<HTML>
<HEAD>
<TITLE>How to deform segmentation to compare registration result??</TITLE>
</HEAD>
<BODY>
<FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>Hi, I just started to use ITK and am comparing the performance of the registration algorithms.<BR>
When I deform a brain label segmentation, I have many artifacts in the segmentation.<BR>
<BR>
The procedure is as follows.<BR>
Let&#8217;s say I have 5, 3D brain images with ground truth segmentations.<BR>
So I register all the brains to one specific brain then using the deformation field found, I transform all the segmentation to the same specific brain. Then I measure how well the each segmented region is overlapping each other.<BR>
But problem I have now is that after I transform the segmentation, I observe lots of salt and pepper like noise here there inside each region. <BR>
<BR>
<BR>
One more question is...how long does 3D BSplineTransform usually take??? I have 7*7*7 landmarks and it takes around 2 minutes in intel 2.4 mobile cpu 2GB memory.<BR>
<BR>
Thank you!!!<BR>
<BR>
Here is the code for Bspline deformation that I am using .......<BR>
</SPAN></FONT><SPAN STYLE='font-size:11pt'><FONT FACE="Palatino"><BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">const</FONT> <FONT COLOR="#BF0090">unsigned</FONT> <FONT COLOR="#BF0090">int</FONT> ImageDimension = </FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">3</FONT></FONT><FONT FACE="Palatino">; <BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">typedef</FONT> itk::ImageFileWriter&lt; ITKIMAGE3D &gt; MovingWriterType; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;MovingWriterType::Pointer movingWriter = MovingWriterType::New(); <BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">typedef</FONT> itk::ResampleImageFilter&lt; ITKIMAGE3D, <BR>
&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D &gt; FilterType;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D::Pointer fixedImage=itkimage_src;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;FilterType::Pointer resampler = FilterType::New(); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">typedef</FONT> itk::LinearInterpolateImageFunction&lt; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D, <FONT COLOR="#BF0090">double</FONT> &gt; InterpolatorType; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;InterpolatorType::Pointer interpolator = InterpolatorType::New(); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;resampler-&gt;SetInterpolator( interpolator ); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D::SpacingType fixedSpacing = fixedImage-&gt;GetSpacing();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D::PointType fixedOrigin = fixedImage-&gt;GetOrigin();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D::DirectionType fixedDirection &nbsp;= fixedImage-&gt;GetDirection();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;resampler-&gt;SetOutputSpacing( fixedSpacing ); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;resampler-&gt;SetOutputOrigin( fixedOrigin ); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;resampler-&gt;SetOutputDirection( fixedDirection ); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D::RegionType fixedRegion = fixedImage-&gt;GetLargestPossibleRegion();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D::SizeType fixedSize = fixedRegion.GetSize(); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;resampler-&gt;SetSize( fixedSize ); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;resampler-&gt;SetOutputStartIndex( fixedRegion.GetIndex() ); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;resampler-&gt;SetInput(itkimage_dst ); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;movingWriter-&gt;SetInput( resampler-&gt;GetOutput() ); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;movingWriter-&gt;SetFileName(outputPath);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;</FONT></SPAN><FONT FACE="Palatino"><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>/*<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We instantiate now the type of the BSplineDeformableTransform using as template param- <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eters the type for coordinates representation, the dimension of the space, and the order of the <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B-spline.*/<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;TransformType3D::Pointer bsplineTransform = TransformType3D::New(); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>/*Since we are using a B-spline of order 3, the coverage of the BSpling grid should exceed by one <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the spatial extent of the image on the lower region of image indices, and by two grid points on <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the upper region of image indices. We choose here to use a 8 <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&times; 8 B-spline grid, from which only <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a 5 by 5 sub-grid will be covering the input image. If we use an input image of size 500 by 500<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pixels, and pixel spacing 2.0 &times; 2.0 then we need the 5 &times; 5 B-spline grid to cover a physical <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extent of 1000 &times; 1000 mm. This can be achieved by setting the pixel spacing of the B-spline <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid to 250.0 &times; 250.0 mm. The origin of the B-spline grid must be set at one grid position away <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from the origin of the desired output image. All this is done with the following lines of code. */<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">typedef</FONT> TransformType3D::RegionType RegionType; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;RegionType bsplineRegion; </SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//itk::BSplineDeformableTransform::RegionType<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;RegionType::SizeType size; </SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//itk::BSplineDeformableTransform::RegionType::SizeType<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">const</FONT> <FONT COLOR="#BF0090">unsigned</FONT> <FONT COLOR="#BF0090">int</FONT> numberOfGridNodesOutsideTheImageSupport = </SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">3</FONT></FONT><FONT FACE="Palatino">; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">const</FONT> <FONT COLOR="#BF0090">unsigned</FONT> <FONT COLOR="#BF0090">int</FONT> numberOfGridNodesInsideTheImageSupportH = nH;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">const</FONT> <FONT COLOR="#BF0090">unsigned</FONT> <FONT COLOR="#BF0090">int</FONT> numberOfGridNodesInsideTheImageSupportW = nW;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">const</FONT> <FONT COLOR="#BF0090">unsigned</FONT> <FONT COLOR="#BF0090">int</FONT> numberOfGridNodesInsideTheImageSupportD = nD; &nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">const</FONT> <FONT COLOR="#BF0090">unsigned</FONT> <FONT COLOR="#BF0090">int</FONT> numberOfGridNodesH = <BR>
&nbsp;&nbsp;&nbsp;&nbsp;numberOfGridNodesInsideTheImageSupportH + <BR>
&nbsp;&nbsp;&nbsp;&nbsp;numberOfGridNodesOutsideTheImageSupport; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">const</FONT> <FONT COLOR="#BF0090">unsigned</FONT> <FONT COLOR="#BF0090">int</FONT> numberOfGridNodesW = <BR>
&nbsp;&nbsp;&nbsp;&nbsp;numberOfGridNodesInsideTheImageSupportW + <BR>
&nbsp;&nbsp;&nbsp;&nbsp;numberOfGridNodesOutsideTheImageSupport;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">const</FONT> <FONT COLOR="#BF0090">unsigned</FONT> <FONT COLOR="#BF0090">int</FONT> numberOfGridNodesD = <BR>
&nbsp;&nbsp;&nbsp;&nbsp;numberOfGridNodesInsideTheImageSupportD + <BR>
&nbsp;&nbsp;&nbsp;&nbsp;numberOfGridNodesOutsideTheImageSupport;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;</FONT></SPAN></FONT><FONT FACE="Palatino"><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//We need to modify this size[0]=m_nW size[1]=m_nH<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;</SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//itk::BSplineDeformableTransform::RegionType::SizeType.Fill<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;size[</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino">]=numberOfGridNodesW;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;size[</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">1</FONT></FONT><FONT FACE="Palatino">]=numberOfGridNodesH;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;size[</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">2</FONT></FONT><FONT FACE="Palatino">]=numberOfGridNodesD; &nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;bsplineRegion.SetSize( size ); </FONT></SPAN></FONT><FONT FACE="Palatino"><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//itk::BSplineDeformableTransform::RegionType::SetSize<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">typedef</FONT> TransformType3D::SpacingType SpacingType; </SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//itk::BSplineDeformableTransform::SpacingType<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;SpacingType spacing; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;spacing[</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino">] = nHorSpace*fixedSpacing[</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino">];</FONT></SPAN></FONT><FONT FACE="Palatino"><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//floor( fixedSpacing[0] * (fixedSize[0] - 1) / numberOfGridCellsW ); //convert pixel spacing to metric....<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;spacing[</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">1</FONT></FONT><FONT FACE="Palatino">] = nVerSpace*fixedSpacing[</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">1</FONT></FONT><FONT FACE="Palatino">];</FONT></SPAN></FONT><FONT FACE="Palatino"><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//floor( fixedSpacing[1] * (fixedSize[1] - 1) / numberOfGridCellsH );<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;spacing[</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">2</FONT></FONT><FONT FACE="Palatino">] = nSliSpace*fixedSpacing[</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">2</FONT></FONT><FONT FACE="Palatino">];</FONT></SPAN></FONT><FONT FACE="Palatino"><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//floor( fixedSpacing[1] * (fixedSize[1] - 1) / numberOfGridCellsH );<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">typedef</FONT> TransformType3D::OriginType OriginType; </SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//itk::BSplineDeformableTransform::OriginType<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;OriginType origin; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;origin = fixedOrigin - fixedDirection*spacing; </SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//due to boundary...<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;bsplineTransform-&gt;SetGridSpacing( spacing ); </SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//itk::BSplineDeformableTransform-&gt;SetGridSpacing<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;bsplineTransform-&gt;SetGridOrigin( origin ); </SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//itk::BSplineDeformableTransform-&gt;SetGridOrigin<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;bsplineTransform-&gt;SetGridRegion( bsplineRegion );</SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//itk::BSplineDeformableTransform-&gt;SetGridRegion<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;bsplineTransform-&gt;SetGridDirection( fixedDirection );<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">typedef</FONT> TransformType3D::ParametersType ParametersType; </SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//itk::BSplineDeformableTransform::ParametersType<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">const</FONT> <FONT COLOR="#BF0090">unsigned</FONT> <FONT COLOR="#BF0090">int</FONT> numberOfParameters = <BR>
&nbsp;&nbsp;&nbsp;&nbsp;bsplineTransform-&gt;GetNumberOfParameters(); </SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//itk::BSplineDeformableTransform-&gt;GetNumberOfParameters();<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">const</FONT> <FONT COLOR="#BF0090">unsigned</FONT> <FONT COLOR="#BF0090">int</FONT> numberOfNodes = numberOfParameters / ImageDimension; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;ParametersType parameters( numberOfParameters );<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>/*<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The B-spline grid should now be fed with coe&#64257;cients at each node. Since this is a two dimen- <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sional grid, each node should receive two coef&#64257;cients. Each coef&#64257;cient pair is representing a <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;displacement vector at this node. The coef&#64257;cients can be passed to the B-spline in the form of <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;an array where the &#64257;rst set of elements are the &#64257;rst component of the displacements for all the <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodes, and the second set of elemets is formed by the second component of the displacements <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for all the nodes. <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In this example we read such displacements from a &#64257;le, but for convinience we have written this <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#64257;le using the pairs of (x, y) displacement for every node. The elements read from the &#64257;le should <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;therefore be reorganized when assigned to the elements of the array. We do this by storing all <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the odd elements from the &#64257;le in the &#64257;rst block of the array, and all the even elements from the <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#64257;le in the second block of the array. Finally the array is passed to the B-spline transform using <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the SetParameters(). */<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">int</FONT> nPos=</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino">;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">for</FONT>(<FONT COLOR="#BF0090">int</FONT> z=-</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">1</FONT></FONT><FONT FACE="Palatino">;z&lt;nD+</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">2</FONT></FONT><FONT FACE="Palatino">;z++)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">for</FONT>(<FONT COLOR="#BF0090">int</FONT> y=-</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">1</FONT></FONT><FONT FACE="Palatino">;y&lt;nH+</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">2</FONT></FONT><FONT FACE="Palatino">;y++)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">for</FONT>(<FONT COLOR="#BF0090">int</FONT> x=-</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">1</FONT></FONT><FONT FACE="Palatino">;x&lt;nW+</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">2</FONT></FONT><FONT FACE="Palatino">;x++)<BR>
&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;<FONT COLOR="#BF0090">if</FONT>(z&gt;=</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino"> &amp;&amp;z&lt; nD &amp;&amp; y&gt;=</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino"> &amp;&amp; y&lt; nH &amp;&amp; x&gt;=</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino"> &amp;&amp; x&lt;nW)<BR>
&nbsp;&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;parameters[nPos]=disVector[z*nW*nH+y*nW+x].x;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameters[nPos+numberOfNodes]=disVector[z*nW*nH+y*nW+x].y;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameters[nPos+numberOfNodes*</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">2</FONT></FONT><FONT FACE="Palatino">]=disVector[z*nW*nH+y*nW+x].z;<BR>
&nbsp;&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;<FONT COLOR="#BF0090">else<BR>
</FONT> &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;parameters[nPos]=</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino">;</FONT></SPAN></FONT><FONT FACE="Palatino"><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//disVector[y*nW+x].x;<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameters[nPos+numberOfNodes]=</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino">;</FONT></SPAN></FONT><FONT FACE="Palatino"><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//disVector[y*nW+x].y;<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameters[nPos+numberOfNodes*</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">2</FONT></FONT><FONT FACE="Palatino">]=</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino">;<BR>
&nbsp;&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;nPos++;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;bsplineTransform-&gt;SetParameters( parameters ); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;resampler-&gt;SetDefaultPixelValue(</FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino">);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;resampler-&gt;SetTransform( bsplineTransform ); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">try</FONT> <BR>
&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movingWriter-&gt;Update(); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;} <BR>
&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">catch</FONT>( itk::ExceptionObject &amp; excp ) <BR>
&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cerr &lt;&lt; </FONT></SPAN></FONT><FONT COLOR="#DB0500"><FONT SIZE="1"><FONT FACE="Monaco, Courier New"><SPAN STYLE='font-size:9pt'>&quot;Exception thrown &quot;</SPAN></FONT></FONT></FONT><FONT SIZE="2"><FONT FACE="Palatino"><SPAN STYLE='font-size:10pt'> &lt;&lt; std::endl; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cerr &lt;&lt; excp &lt;&lt; std::endl; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">return</FONT> EXIT_FAILURE; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></FONT></FONT><FONT FACE="Palatino"><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//We just transform segmentation image to evaluate.....<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">if</FONT>(m_strSegPath!=</SPAN></FONT></FONT><FONT COLOR="#DB0500"><FONT SIZE="1"><FONT FACE="Monaco, Courier New"><SPAN STYLE='font-size:9pt'>&quot;&quot;</SPAN></FONT></FONT></FONT><FONT SIZE="2"><FONT FACE="Palatino"><SPAN STYLE='font-size:10pt'>)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">if</FONT>(nLevel==</SPAN></FONT><SPAN STYLE='font-size:10pt'><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino">)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</FONT></SPAN></FONT><FONT FACE="Palatino"><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//input is fixed segmentation image...<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITK_IMG_READER_TYPE3D::Pointer seg_reader=ITK_IMG_READER_TYPE3D::New();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seg_reader-&gt;SetFileName(m_strSegPath);<BR>
&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;</SPAN></FONT><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//we first compute maximum and minimum of the label...and remember it....<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">typedef</FONT> itk::MinimumMaximumImageCalculator&lt;ITKIMAGE3D&gt; calType;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calType::Pointer cal=calType::New();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal-&gt;SetImage(seg_reader-&gt;GetOutput());<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seg_reader-&gt;Update();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal-&gt;ComputeMaximum();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal-&gt;ComputeMinimum();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D::PixelType maxval=cal-&gt;GetMaximum();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D::PixelType minval=cal-&gt;GetMinimum();<BR>
&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;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">typedef</FONT> itk::RescaleIntensityImageFilter&lt; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D, ITKIMAGE3D&gt; RescaleFilterType;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RescaleFilterType::Pointer enlarge_rescaler = RescaleFilterType::New();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//This rescaler was used to avoid interpolation ambiguity between adjacent labels.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// in hope for avoiding salt and pepper like noise....<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enlarge_rescaler-&gt;SetOutputMinimum( &nbsp;&nbsp;</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino"> );<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enlarge_rescaler-&gt;SetOutputMaximum( </FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">30000</FONT></FONT><FONT FACE="Palatino"> );<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enlarge_rescaler-&gt;SetInput(seg_reader-&gt;GetOutput());<BR>
&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;resampler-&gt;SetInput(enlarge_rescaler-&gt;GetOutput());<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITK_IMG_WRITER_TYPE3D::Pointer seg_writer=ITK_IMG_WRITER_TYPE3D::New();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QString strFileName;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strFileName.sprintf(</FONT></SPAN></FONT><FONT COLOR="#DB0500"><FONT SIZE="1"><FONT FACE="Monaco, Courier New"><SPAN STYLE='font-size:9pt'>&quot;%s%s_seg_deformed%.2d.hdr&quot;</SPAN></FONT></FONT></FONT><FONT SIZE="2"><FONT FACE="Palatino"><SPAN STYLE='font-size:10pt'>,qPrintable(m_strOutPath),qPrintable(m_strFileName),nLevel);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seg_writer-&gt;SetFileName(strFileName);<BR>
&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;RescaleFilterType::Pointer shorten_rescaler = RescaleFilterType::New();<BR>
&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;shorten_rescaler-&gt;SetOutputMinimum(minval);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shorten_rescaler-&gt;SetOutputMaximum(maxval);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shorten_rescaler-&gt;SetInput(resampler-&gt;GetOutput());<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seg_writer-&gt;SetInput(shorten_rescaler-&gt;GetOutput());<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seg_writer-&gt;Update();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">else<BR>
</FONT> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</SPAN></FONT></FONT><FONT FACE="Palatino"><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//input is transformed segmentation image....<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QString strFileName;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strFileName.sprintf(</SPAN></FONT></FONT><FONT COLOR="#DB0500"><FONT SIZE="1"><FONT FACE="Monaco, Courier New"><SPAN STYLE='font-size:9pt'>&quot;%s%s_seg_deformed%.2d.hdr&quot;</SPAN></FONT></FONT></FONT><FONT SIZE="2"><FONT FACE="Palatino"><SPAN STYLE='font-size:10pt'>,qPrintable(m_strOutPath),qPrintable(m_strFileName),nLevel-</SPAN></FONT><SPAN STYLE='font-size:10pt'><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">1</FONT></FONT><FONT FACE="Palatino">);<BR>
&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;ITK_IMG_READER_TYPE3D::Pointer seg_reader=ITK_IMG_READER_TYPE3D::New();<BR>
&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;</FONT></SPAN></FONT><FONT FACE="Palatino"><FONT COLOR="#007600"><FONT SIZE="1"><SPAN STYLE='font-size:9pt'>//we first compute maximum and minimum of the label...and remember it....<BR>
</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">typedef</FONT> itk::MinimumMaximumImageCalculator&lt;ITKIMAGE3D&gt; calType;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calType::Pointer cal=calType::New();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal-&gt;SetImage(seg_reader-&gt;GetOutput());<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seg_reader-&gt;Update();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal-&gt;ComputeMaximum();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal-&gt;ComputeMinimum();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D::PixelType maxval=cal-&gt;GetMaximum();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D::PixelType minval=cal-&gt;GetMinimum();<BR>
&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;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR="#BF0090">typedef</FONT> itk::RescaleIntensityImageFilter&lt; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITKIMAGE3D, ITKIMAGE3D&gt; RescaleFilterType;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RescaleFilterType::Pointer enlarge_rescaler = RescaleFilterType::New();<BR>
&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;enlarge_rescaler-&gt;SetOutputMinimum( &nbsp;&nbsp;</SPAN></FONT></FONT><FONT SIZE="2"><SPAN STYLE='font-size:10pt'><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">0</FONT></FONT><FONT FACE="Palatino"> );<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enlarge_rescaler-&gt;SetOutputMaximum( </FONT><FONT COLOR="#2800D4"><FONT FACE="Monaco, Courier New">30000</FONT></FONT><FONT FACE="Palatino"> );<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enlarge_rescaler-&gt;SetInput(seg_reader-&gt;GetOutput());<BR>
&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;resampler-&gt;SetInput(enlarge_rescaler-&gt;GetOutput());<BR>
&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;seg_reader-&gt;SetFileName(strFileName);<BR>
&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;ITK_IMG_WRITER_TYPE3D::Pointer seg_writer=ITK_IMG_WRITER_TYPE3D::New();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strFileName.sprintf(</FONT></SPAN></FONT><FONT COLOR="#DB0500"><FONT SIZE="1"><FONT FACE="Monaco, Courier New"><SPAN STYLE='font-size:9pt'>&quot;%s%s_seg_deformed%.2d.hdr&quot;</SPAN></FONT></FONT></FONT><FONT SIZE="2"><FONT FACE="Palatino"><SPAN STYLE='font-size:10pt'>,qPrintable(m_strOutPath),qPrintable(m_strFileName),nLevel);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seg_writer-&gt;SetFileName(strFileName);<BR>
&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;RescaleFilterType::Pointer shorten_rescaler = RescaleFilterType::New();<BR>
&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;shorten_rescaler-&gt;SetOutputMinimum(minval);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shorten_rescaler-&gt;SetOutputMaximum(maxval);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shorten_rescaler-&gt;SetInput(resampler-&gt;GetOutput());<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seg_writer-&gt;SetInput(shorten_rescaler-&gt;GetOutput());<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seg_writer-&gt;Update();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></FONT><SPAN STYLE='font-size:10pt'><FONT FACE="Calibri, Verdana, Helvetica, Arial"> </FONT></SPAN></FONT><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'><BR>
</SPAN></FONT>
</BODY>
</HTML>