[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