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

john smith mkitkinsightuser at gmail.com
Tue Jun 7 11:48:57 EDT 2011


Well, this code also gives an exception. Thanks for the reply . I am
starting to deal with iterators from now on

 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::SizeType size =
reader->GetOutput()->GetLargestPossibleRegion().GetSize();
             InputImageType::IndexType index =
reader->GetOutput()->GetLargestPossibleRegion().GetIndex();



             InputImageType::PixelType maxValue;
             for(int i = index[0]; i<size[0]; i++)
             {
                    for(int j = index[1]; j<size[1]; j++)
                    {
                           InputImageType::IndexType currentIndex;
                           currentIndex[0] = i;
                           currentIndex[1] = j;
                           InputImageType::PixelType currentValue =
image->GetPixel(currentIndex);
                           if(currentValue>maxValue)
                           {
                                  maxValue = currentValue;
                           }
                    }
             }

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

2011/6/7 Brecht Heyde <Brecht.Heyde at med.kuleuven.be>

>  Hi John,
>
>
>
> The following code should do (for 2D images)
>
>
>
> int main(void)
>
>        {
>
>              //Find maximum of 2D image
>
>              typedef unsigned char PixelType;
>
>              const unsigned int dimension = 2;
>
>              typedef itk::Image<PixelType,dimension> ImageType;
>
>              typedef itk::ImageFileReader<ImageType> ReaderType;
>
>              ReaderType::Pointer reader = ReaderType::New();
>
>              std::string filename =
> "C://Code//ITK320//src//InsightToolkit-3.20.0//Examples//Data//BrainProtonDensitySliceShifted13x17y.mhd"
> ;
>
>              reader->SetFileName(filename);
>
>              try
>
>              {
>
>                     reader->Update();
>
>              }
>
>              catch(itk::ExceptionObject &err)
>
>              {
>
>                     std::cerr << "Error: " << err << std::endl;
>
>                     return EXIT_FAILURE;
>
>              }
>
>
>
>              ImageType::Pointer image = reader->GetOutput();
>
>
>
>              ImageType::SizeType size =
> reader->GetOutput()->GetLargestPossibleRegion().GetSize();
>
>              ImageType::IndexType index =
> reader->GetOutput()->GetLargestPossibleRegion().GetIndex();
>
>
>
>              ImageType::PixelType maxValue;
>
>              for(int i = index[0]; i<size[0]; i++)
>
>              {
>
>                     for(int j = index[1]; j<size[1]; j++)
>
>                     {
>
>                            ImageType::IndexType currentIndex;
>
>                            currentIndex[0] = i;
>
>                            currentIndex[1] = j;
>
>                            ImageType::PixelType currentValue =
> image->GetPixel(currentIndex);
>
>                            if(currentValue>maxValue)
>
>                            {
>
>                                   maxValue = currentValue;
>
>                            }
>
>                     }
>
>              }
>
>              std::cout << "maxValue: " << (int)maxValue << std::endl;
>
>              return EXIT_SUCCESS;
>
>        }
>
>
>
> I would however strongly suggest using the imageIterators as Roberto
> already pointed out. His code snippet should do the exact same thing, only
> more efficient. Have a look in the software guide chapter 11 for examples in
> using image iterators.
>
>
>
> Regards,
>
> Brecht
>
>
>
>
>
> *From:* john smith [mailto:mkitkinsightuser at gmail.com]
> *Sent:* dinsdag 7 juni 2011 16:52
>
> *To:* Brecht Heyde; insight-users at itk.org
> *Subject:* Re: [Insight-users] get the maximum pixel value using
> GetPixel() for 3D image
>
>
>
> You have right.Using Iteretors was really easy, but I am not yet used to
> them.Could somebody give me a small code of finding the max value without
> using iterators, in order to compare the two methods?
>
> Thanks a lot for all your replies.They are very useful.
>
> 2011/6/7 Brecht Heyde <Brecht.Heyde at med.kuleuven.be>
>
> You are probably trying to access a pixel location in image->GetPixel()
> which doesn’t exist.
>
>
>
> Try removing the lines, which I think are not needed:
>
>   image->SetRegions( region );
>   image->Allocate();
>
>
>
> You should also modify the following as your image’s origin might not be [0
> 0 0]:
>
> index = inputRegion.GetIndex();
>
> for ( i=index[0];i<size_x;i++) {
>       for ( j=index[1];i<size_y;j++){
>           for ( k=index[2];i<size_z;k++){
>
>           /*…*/
>
>          }
>
>      }
>
> }
>
>
>
> start_x, start_y and start_z are not needed anymore.
>
>
>
> Try debugging to see at what line of code you are getting the violation
> error or printing the i,j,k to see where it goes wrong. Any C++ basic book
> can tell you how to do that.
>
>
>
> Regards,
>
> Brecht
>
>
>
> *From:* john smith [mailto:mkitkinsightuser at gmail.com]
> *Sent:* dinsdag 7 juni 2011 16:24
> *To:* Brecht Heyde; insight-users at itk.org
>
>
> *Subject:* Re: [Insight-users] get the maximum pixel value using
> GetPixel() for 3D image
>
>
>
> OK, this is the exception that I get
>
> *Unhandled exception at 0x00286a67 in mainwindow.exe: 0xC0000005: Access
> violation reading location 0x04960548.*
>
> 2011/6/7 john smith <mkitkinsightuser at gmail.com>
>
> Well,
>
> When I debug the code, then I am taking an exception:
> *Unhandled exception at 0x00856a67 in mainwindow.exe: 0xC0000005: Access
> violation reading location 0x050f0548.*
>
> Do yoy know why?Should I change something in my code?Is there wrong in the
> logic of the code?
> Thanks for the replies
>
>
>
> 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;
>
>  size = inputRegion.GetSize();
>   // 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 john smith <mkitkinsightuser at gmail.com>
>
> I have added this
>
>
>
>   size = inputRegion.GetSize();
>   // get the size of the hole 3D image
>   size_x = size[0];
>   size_y = size[1];
>   size_z = size[2];
>
> I am getting into the loop, but now I am getting an exception.Do you know
> what I am doing wrong? I have declared the size_x,size_y,size_z in an other
> function as it seems bellow, and declare them as global variable.Is it this
> declaration responcible for the exception?
>
> Thanks
>
>
>
>
> 2011/6/7 Brecht Heyde <Brecht.Heyde at med.kuleuven.be>
>
> Sorry, it should have been:
>
> size = inputRegion.GetSize();
>
>
>
> Regards,
>
> Brecht Heyde
>
>
>
> *From:* insight-users-bounces at itk.org [mailto:
> insight-users-bounces at itk.org] *On Behalf Of *Brecht Heyde
> *Sent:* dinsdag 7 juni 2011 15:34
> *To:* 'john smith'; 'robert tamburo'; insight-users at itk.org
>
>
> *Subject:* Re: [Insight-users] get the maximum pixel value using
> GetPixel() for 3D image
>
>
>
> 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/526cb552/attachment.htm>


More information about the Insight-users mailing list