[Insight-developers] SubtractImageFilter strange behavior ?

Gaetan Lehmann gaetan.lehmann at jouy.inra.fr
Thu Nov 17 03:28:33 EST 2005


On Wed, 16 Nov 2005 18:59:48 +0100, Karthik Krishnan  
<Karthik.Krishnan at kitware.com> wrote:

>
>
> Gaetan Lehmann wrote:
>
>>
>> Hi,
>>
>> I have done a morphological gradient image filter in which I use a   
>> SubtractImageFilter. Everything seems to work fine, but
>> when  I tried to remove the subtract filter and do the subtraction by   
>> hand, I don't get the same result.
>>
>> This part of code:
>>
>>   // Need to subtract the eroded image from the dialted one
>>   typename SubtractImageFilter<TInputImage, TInputImage,   
>> TOutputImage>::Pointer
>>      
>> subtract=SubtractImageFilter<TInputImage,TInputImage,TOutputImage>::New();  
>>   subtract->SetInput1( dilate->GetInput() );
>
> should be dilate->GetOutput();   , shouldn't it   ........
>

Yes it should !
Thanks a lot :-)

>>   subtract->SetInput2( erode->GetOutput() );
>>
>>   // graft our output to the subtract filter to force the proper regions
>>   // to be generated
>>   subtract->GraftOutput( this->GetOutput() );
>>
>>   progress->RegisterInternalFilter(subtract,.1f);
>>
>>   dilate->Update(); // needed to have the right progress values
>>   subtract->Update();
>>
>>   // graft the output of the subtract filter back onto this filter's
>>   // output. this is needed to get the appropriate regions passed
>>   // back.
>>   this->GraftOutput( subtract->GetOutput() );
>>
>>
>> and this one
>>
>>   dilate->Update();
>>   erode->Update();
>>
>>   const TInputImage* inputPtr1 = dilate->GetOutput();
>>   const TInputImage* inputPtr2 = erode->GetOutput();
>>   const TInputImage* inputPtr = this->GetInput();
>>   TOutputImage* outputPtr = this->GetOutput();
>>
>>   ImageRegionConstIterator<TInputImage> inputIt1(inputPtr1,   
>> inputPtr->GetRequestedRegion());
>>   ImageRegionConstIterator<TInputImage> inputIt2(inputPtr2,   
>> inputPtr->GetRequestedRegion());
>>
>>   ImageRegionIterator<TOutputImage> outputIt(outputPtr,   
>> inputPtr->GetRequestedRegion());
>>
>>   inputIt1.GoToBegin();
>>   inputIt2.GoToBegin();
>>   outputIt.GoToBegin();
>>
>>   while( !inputIt1.IsAtEnd() )
>>     {
>>     outputIt.Set( static_cast< typename TOutputImage::PixelType
>> ( inputIt1.Get() - inputIt2.Get() ) );
>>     ++inputIt2;
>>     ++inputIt1;
>>     ++outputIt;
>>     }
>>
>>
>> does not produce the same output.
>>
>> Am I doing something wrong ?
>> Or is it a problem in SubtractImageFilter ?
>>
>> Attached gradient.png is the result with the subtract filter.
>> http://voxel.jouy.inra.fr/darcs/contrib-itk/gradient/gradient.png is  
>> the  result without the subtract filter.
>> The full code is available at   
>> http://voxel.jouy.inra.fr/darcs/contrib-itk/gradient/
>>
>> Regards,
>>
>> Gaetan
>>



-- 
Gaëtan Lehmann
Biologie du Développement et de la Reproduction
INRA de Jouy-en-Josas (France)
tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
http://voxel.jouy.inra.fr


More information about the Insight-developers mailing list