[Insight-users] get the maximum pixel value using GetPixel() for 3D image
robert tamburo
robert.tamburo at gmail.com
Tue Jun 7 10:30:34 EDT 2011
This is why the image iterator is so valuable. They handle the grunt work
for you and are so easy to use. You're code would be simplified to something
like:
itk::ImageRegionIterator<ImageType> it(image,
image->GetLargestPossibleRegion());
for(it.GoToBegin(); !it.IsAtEnd(); ++it)
{
if(it.Value() > max)
max = it.Value();
}
Anyway, back to your code. The below looks unusual and unnecessary. Why are
you allocating image after assigning it to the reader output?
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();
On Tue, Jun 7, 2011 at 10:15 AM, john smith <mkitkinsightuser at gmail.com>wrote:
> 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
>>>
>>>
>>>
>>>
>>>
>>
>>
>
> _____________________________________
> 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/a8975e87/attachment-0001.htm>
More information about the Insight-users
mailing list