<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial,helvetica,sans-serif;font-size:10pt">From: Christian Werner &lt;<a ymailto="mailto:christian.werner@rwth-aachen.de" href="mailto:christian.werner@rwth-aachen.de">christian.werner@rwth-aachen.de</a>&gt;<br><div style="font-family: arial,helvetica,sans-serif; font-size: 10pt;"><div style="font-family: tahoma,new york,times,serif; font-size: 10pt;"><br>&gt; I need a slightly modified version of the itkSubtractImageFilter that <br>&gt; caps the result at 0, such that all negative values will become 0 <br>&gt; instead. I know I could do that with the actual SubtractImageFilter <br>&gt; followed by a ShiftScaleImageFilter, but it is important that this is a <br>&gt; one-pass filter since we are working with extremely large (up to 1GB) data.<br><br>It would be easier to define your own function and re-use the BinaryFunctorImageFilter...example
 code:<br><br>// A function (not templated at this point, but could be by replacing PixelType) that will calculate difference between two points.<br>//<br>class RealDifference<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RealDifference() {};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~RealDifference() {};<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool operator!=( const RealDifference&amp; ) const<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool operator==( const RealDifference&amp; other ) const<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return !( *this != other );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inline PixelType operator()( const PixelType&amp; A, const PixelType&amp; B )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return vnl_max(
 itk::NumericTraits&lt; PixelType &gt;::Zero, A - B );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>};<br><br>typedef itk::BinaryFunctorImageFilter&lt; ImageType,  ImageType, ImageType, RealDifference &gt; RealDifferenceFilter;<br><br>RealDifferenceFilter::Pointer differenceFilter = RealDifferenceFilter::New();<br>differenceFilter-&gt;InPlaceOff(); // will re-use first input buffer as output buffer if "on".<br>differenceFilter-&gt;SetInput1( image1Ptr ); // A<br>differenceFilter-&gt;SetInput2( image2Ptr ); // B<br>differenceFilter-&gt;Update();<br><br>differenceImage = differenceFilter-&gt;GetOutput( 0 );<br><br><br>Todd Jensen<br></div></div>
</div></body></html>