[Insight-users] itkImageRegionIterator question

Mathieu Lamard Mathieu.Lamard@enst-bretagne.fr
Fri, 06 Sep 2002 17:15:50 +0200


Thanks Luis,

with the ->update() every thing works fine.

Mathieu



Luis Ibanez wrote:
> 
> Hi Mathieu,
> 
> Did you invoked "Update()" in the ClipRescaleIntensityImageFilter
> before attempting to read the output with the iterator ?
> 
> The output of the filter is only valid after Update() is executed.
> 
> Please try adding  a  line like:
> 
>     itkClipRescaleIntensityImageFilterPtr_a->Update();
> 
> after the lines with SetOutputMinimum and SetOutputMaximum.
> 
> 
> Also, there is a performance trade off between the two iterators:
> 
> a) - itkImageRegionIterator
> b) - itkImageRegionIteratorWithIndex
> 
> (a) is faster if you are only reading the pixels
>     values using "Get()". This iterator doesn't keep internally
>     the values of pixel coordinates. That makes the call to
>     "GetIndex()" to be costly in computing time.
> 
> (b) keeps internally an updated Index with the current
>     position of the pixel. This makes it slower than (a)
>     for normal operations. However, when you also call
>     GetIndex(), the combined cost of Get() and GetIndex()
>     is much lower in (b) than in (a).
> 
> To summarize:
> 
>   If you only want "Get()" then (a) is faster.
>   If you want "Get()" and "GetIndex()" then (b) is faster.
> 
> 
> ---
> 
> 
> Please let us know if you encounter further problems,
> 
> Thanks
> 
> Luis
> 
> ============================
> 
> 
> 
> Mathieu Lamard wrote:
> 
>> Dear All,
>>
>> I am using ITK since few months and I have some problems
>>
>> Here is my goal :
>>
>> To have an access the each pixel in an image (value + coordinates).
>>
>> It seems that itkImageRegionIterator is the good class to perform that.
>>
>> I have read http://www.itk.org/Doxygen/html/ImageIteratorsPage.html, I 
>> undersand the concept but I din't reach to use it correctly.
>>
>>
>> here is my code :
>>
>> typedef itk::Image<float,2> FloatImageType_a;   typedef   
>> itk::RescaleIntensityImageFilter<
>>              FloatImageType_a,
>>                             FloatImageType_a > 
>> RescaleIntensityImageFilterType_a;
>> RescaleIntensityImageFilterType_a::Pointer 
>> itkRescaleIntensityImageFilterPtr_a;
>>
>> ...
>> ...
>>
>>
>> itkClipRescaleIntensityImageFilterPtr_a->SetInput(itkGradientMagnitudeImageFilterPtr_a->GetOutput()); 
>>
>> itkClipRescaleIntensityImageFilterPtr_a-> SetOutputMinimum(0);
>> itkClipRescaleIntensityImageFilterPtr_a-> SetOutputMaximum(255);
>>
>> /* I try that but it does't work */
>>
>>
>> typedef   itk::ImageRegionIterator<FloatImageType_a> 
>> FloatImageRegionIteratorType_a;
>>
>> FloatImageRegionIteratorType_a 
>> it(itkClipRescaleIntensityImageFilterPtr_a->GetOutput(),itkClipRescaleIntensityImageFilterPtr_a->GetOutput()->GetRequestedRegion()); 
>>
>>
>> it.GoToBegin();
>>     while(!it.IsAtEnd())
>> {
>> cerr << it.Get() << endl;
>> ++it;
>> }
>>
>>
>> Is some one have the solution of my problem ?
>> Thanks in advance
>>
>> Mathieu
>>
>>
>>
>> _______________________________________________
>> Insight-users mailing list
>> Insight-users@public.kitware.com
>> http://public.kitware.com/mailman/listinfo/insight-users
>>
> 
> 
> 
> 
>