[Insight-users] get the maximum pixel value using GetPixel() for 3D image

Brecht Heyde Brecht.Heyde at med.kuleuven.be
Tue Jun 7 09:34:19 EDT 2011


Hi,

 

Your size_x, size_y and size_z are not representing the actual  size of the
image.

 

Add:

size = inputRegion->GetSize();

Before 

size_x = .

size_y = .

size_z = .

 

I would however also suggest to use an imageIterator.

 

Regards,

Brecht Heyde

 

From: insight-users-bounces at itk.org [mailto:insight-users-bounces at itk.org]
On Behalf Of john smith
Sent: dinsdag 7 juni 2011 15:27
To: robert tamburo; insight-users at itk.org
Subject: Re: [Insight-users] get the maximum pixel value using GetPixel()
for 3D image

 

Thanks for your reply.I have used the MinimumMaximumImageCalculator, but
know I want to take the result playing with the raw data.But I am trying to
do that without using iterators, just with using for loop. I have added the
largest possible area from reader, but when I am debuging my code, it seems
that I cannot get inside the loop. Do you know why? Here is my code:

 ReaderType::Pointer reader = ReaderType::New();

     reader->SetFileName( fileName.toStdString()  );
     reader->Update();

      InputImageType::RegionType inputRegion =
           reader->GetOutput()->GetLargestPossibleRegion();

  
    //typedef itk::Image< short, 3 > InputImageType;
  
     InputImageType::Pointer image = reader->GetOutput();

  

  InputImageType::IndexType start;
  InputImageType::SizeType  size;

  // get the size of the hole 3D image
  size_x = size[0];
  size_y = size[1];
  size_z = size[2];

  start[0] =   0;  // first index on X
  start[1] =   0;  // first index on Y
  start[2] =   0;  // first index on Z

  InputImageType::RegionType region;
  region.SetSize( size );
  region.SetIndex( start );
  
  // Pixel data is allocated
  image->SetRegions( region );
  image->Allocate();

   int i,j,k;
 int max_value=0;

  for ( i=0;i<size_x;i++) {
      for ( j=0;i<size_y;j++){
          for ( k=0;i<size_z;k++){

              InputImageType::IndexType pixelIndex;
                pixelIndex[0] = i; // x position
                pixelIndex[1] = j; // y position
                pixelIndex[2] = k; // z position

                InputImageType::PixelType pixelValue = image->GetPixel(
pixelIndex );

                if(pixelValue>max_value){max_value=pixelValue;}
                
          }
      }
  }

   ui->label_22->setText(QString("maximum_value_raw%1").arg(max_value));

2011/6/7 robert tamburo <robert.tamburo at gmail.com>

GetPixel() belongs to itkImage, not the reader. Try
reader->GetOutput()->GetPixel(index).  

 

Two other things: 1) You may want to consider using an ImageRegionIterator
instead of for loops, and 2) You can use the MinimumMaximumImageCalculator
to get the maximum intensity in an image.

 

There are examples on how to use each class at
http://www.itk.org/Wiki/ITK/Examples

 

 

On Tue, Jun 7, 2011 at 8:36 AM, john smith <mkitkinsightuser at gmail.com>
wrote:

Hello,

I am trying to find the maximum pixel value of a 3D  image, and I am using
the GetPixel method with 3 loops.I want to load my image from a file so I
created a reader pointer.Does this pointer include the raw data of my image?
I have created the following code but I get an error: GetPixel() method is
not a member of reader. Could somebody tell me what I am doing wrong? How I
could find the maximum pixel value of a loaded image with the method of
GetPixel()?

Thanks

  typedef short               InputPixelType;
  const   unsigned int        Dimension = 3;

  typedef itk::Image< InputPixelType,  Dimension >    InputImageType;
  typedef itk::ImageFileReader< InputImageType  >  ReaderType;


  ReaderType::Pointer reader = ReaderType::New();

     reader->SetFileName( fileName.toStdString()  );
     reader->Update();

       InputImageType::RegionType inputRegion =
           reader->GetOutput()->GetLargestPossibleRegion();

  InputImageType::SizeType size = inputRegion.GetSize();
 
  // get the size of the hole 3D image
  size_x = size[0];
  size_y = size[1];
  size_z = size[2];

   InputImageType::IndexType start = inputRegion.GetIndex();
  start[0] =   0;  // first index on X
  start[1] =   0;  // first index on Y
  start[2] =   0;  // first index on Z

 int i,j,k;
 int max_value=0;
  for ( i=0;i<size_x;i++) {
      for ( j=0;i<size_y;j++){
          for ( k=0;i<size_z;k++){

              InputImageType::IndexType pixelIndex;
                pixelIndex[0] = i; // x position
                pixelIndex[1] = j; // y position
                pixelIndex[2] = k; // z position

                InputImageType::PixelType pixelValue = reader->GetPixel(
pixelIndex );

                if(pixelValue>max_value){max_value=pixelValue;}
                
          }
      }
  }

_____________________________________


Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.html

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://www.itk.org/mailman/listinfo/insight-users

 

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20110607/0adba740/attachment.htm>


More information about the Insight-users mailing list