[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