<div dir="ltr"><div>Hi,</div>
<div>&nbsp;</div>
<div>If I understand correctly, you expected&nbsp;your transform to be applied to the input image. This is called &quot;forwards warping&quot;.</div>
<div>&nbsp;</div>
<div>In ITK, the&nbsp;ResampleImageFilter does &quot;backwards warping&quot;: it uses the transform to go from the OUTPUT image to the INPUT image. In your case, the output pixel at 1,1,1 takes its color from 2,2,2, the output pixel at 2,2,2 takes its color from 4,4,4, etc. Your affine transform gives you a half-sized image.</div>

<div>&nbsp;</div>
<div>Hope that explains it.</div>
<div>&nbsp;</div>
<div>- Aviv</div>
<div><br><br>&nbsp;</div>
<div class="gmail_quote">On Mon, Oct 6, 2008 at 4:39 PM, Hegenbart, Lars <span dir="ltr">&lt;<a href="mailto:Lars.Hegenbart@hs.fzk.de">Lars.Hegenbart@hs.fzk.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Dear ITK-community,<br><br>I am defining an affine transform with [2, 0, 0, &nbsp;0, 2, 0, &nbsp;0, 0, 2,<br>0, 0, 0], basically a stretch of factor 2 in all 3 dimensions. I want to<br>
apply it to an input image to create an output image with same<br>parameters (spacing, etc.). I end up getting an output which is scaled<br>by a factor of 0.5 instead of 2. If I choose 0.5 in the diagonal of the<br>matrix of the affine transform, I end up with the wanted result.<br>
It seems somehow to be inverted. What&#39;s wrong or is that normal?<br><br>Thanks for any hints.<br><br>Best regards<br>Lars<br><br>PS: here some relevant code parts:<br><br>&nbsp; &nbsp; &nbsp; &nbsp;typedef itk::Image&lt; unsigned char, Dimension &gt; InputImageType;<br>
&nbsp; &nbsp; &nbsp; &nbsp;typedef itk::Image&lt; unsigned char, Dimension &gt; OutputImageType;<br>&nbsp; &nbsp; &nbsp; &nbsp;InputImageType::Pointer i_image;<br>&nbsp; &nbsp; &nbsp; &nbsp;OutputImageType::Pointer o_image;<br><br>&nbsp; &nbsp; &nbsp; &nbsp;InputImageType::SpacingType spacing;<br>&nbsp; &nbsp; &nbsp; &nbsp;spacing[0] = 6; //spacing along x<br>
&nbsp; &nbsp; &nbsp; &nbsp;spacing[1] = 6; //spacing along y<br>&nbsp; &nbsp; &nbsp; &nbsp;spacing[2] = 6; //spacing along z<br>&nbsp; &nbsp; &nbsp; &nbsp;i_image-&gt;SetSpacing(spacing);<br>&nbsp; &nbsp; &nbsp; &nbsp;InputImageType::PointType origin;<br>&nbsp; &nbsp; &nbsp; &nbsp;origin[0] = 0;<br>&nbsp; &nbsp; &nbsp; &nbsp;origin[1] = 0;<br>
&nbsp; &nbsp; &nbsp; &nbsp;origin[2] = 0;<br>&nbsp; &nbsp; &nbsp; &nbsp;i_image-&gt;SetOrigin(origin);<br>&nbsp; &nbsp; &nbsp; &nbsp;InputImageType::SizeType size;<br>&nbsp; &nbsp; &nbsp; &nbsp;size[0] = 100; // size along x<br>&nbsp; &nbsp; &nbsp; &nbsp;size[1] = 100; // size along y<br>&nbsp; &nbsp; &nbsp; &nbsp;size[2] = 100; // size along z<br>
<br>&nbsp; &nbsp; &nbsp; &nbsp;typedef itk::AffineTransform&lt; double, Dimension &gt;<br><br>TransformType;<br>&nbsp; &nbsp; &nbsp; &nbsp;TransformType::Pointer transform;<br><br>&nbsp; &nbsp; &nbsp; &nbsp;typedef TransformType::ParametersType &nbsp; &nbsp; ParametersType;<br>&nbsp; &nbsp; &nbsp; &nbsp;const unsigned int numberOfParameters = transform-<br>
&gt;GetNumberOfParameters();<br>&nbsp; &nbsp; &nbsp; &nbsp;ParametersType parameters( numberOfParameters );<br>&nbsp; &nbsp; &nbsp; &nbsp;parameters_affine[ 0]= &nbsp;2;<br>&nbsp; &nbsp; &nbsp; &nbsp;parameters_affine[ 1]= &nbsp;0;<br>&nbsp; &nbsp; &nbsp; &nbsp;parameters_affine[ 2]= &nbsp;0;<br>&nbsp; &nbsp; &nbsp; &nbsp;parameters_affine[ 3]= &nbsp;0;<br>
&nbsp; &nbsp; &nbsp; &nbsp;parameters_affine[ 4]= &nbsp;2;<br>&nbsp; &nbsp; &nbsp; &nbsp;parameters_affine[ 5]= &nbsp;0;<br>&nbsp; &nbsp; &nbsp; &nbsp;parameters_affine[ 6]= &nbsp;0;<br>&nbsp; &nbsp; &nbsp; &nbsp;parameters_affine[ 7]= &nbsp;0;<br>&nbsp; &nbsp; &nbsp; &nbsp;parameters_affine[ 8]= &nbsp;2;<br>&nbsp; &nbsp; &nbsp; &nbsp;parameters_affine[ 9]= &nbsp;0;<br>
&nbsp; &nbsp; &nbsp; &nbsp;parameters_affine[10]= 0;<br>&nbsp; &nbsp; &nbsp; &nbsp;parameters_affine[11]= 0;<br>&nbsp; &nbsp; &nbsp; &nbsp;transform-&gt;SetParameters( parameters);<br><br>&nbsp; &nbsp; &nbsp; &nbsp;typedef itk::ResampleImageFilter&lt; InputImageType,<br>OutputImageType &gt;<br>FilterType;<br>
&nbsp; &nbsp; &nbsp; &nbsp;FilterType::Pointer filter = FilterType::New();<br>&nbsp; &nbsp; &nbsp; &nbsp;filter-&gt;SetTransform(transform);<br><br>&nbsp; &nbsp; &nbsp; &nbsp;typedef itk::NearestNeighborInterpolateImageFunction&lt;<br>InputImageType, double &gt; InterpolatorType;<br>
&nbsp; &nbsp; &nbsp; &nbsp;InterpolatorType::Pointer interpolator =<br>InterpolatorType::New();<br>&nbsp; &nbsp; &nbsp; &nbsp;filter-&gt;SetInterpolator(interpolator);<br>&nbsp; &nbsp; &nbsp; &nbsp;filter-&gt;SetDefaultPixelValue(0);<br><br>&nbsp; &nbsp; &nbsp; &nbsp;filter-&gt;SetOutputSpacing(i_image-&gt;GetSpacing()); // same spacing<br>
like InputImage<br>&nbsp; &nbsp; &nbsp; &nbsp;filter-&gt;SetOutputOrigin(i_image-&gt;GetOrigin()); // same like<br>InputImage<br>&nbsp; &nbsp; &nbsp; &nbsp;filter-&gt;SetSize(size); // same like InputImage<br>&nbsp; &nbsp; &nbsp; &nbsp;filter-&gt;SetInput(i_image);<br><br>&nbsp; &nbsp; &nbsp; &nbsp;o_image = filter-&gt;GetOutput();<br>
<br><br>_______________________________________________<br>Insight-users mailing list<br><a href="mailto:Insight-users@itk.org">Insight-users@itk.org</a><br><a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
</blockquote></div><br></div>