<div dir="ltr"><div><div><div><div><div>Hello Antoine,<br><br></div>What you are doing is correct. What I would do is that I would use the smallest value of the spacing and create an isotropic output image (similar to what you are doing with setting your output spacing to {0.1,0.1,0.1}, but in an automatic manner.<br></div>The only reason I can think of why you are getting an enterely black output image is maybe because your output image space does not cover your transformed image. If you decrease the spacing, you also need to adjust the image size to make sure that your transformed image will be contained in the output image space.<br></div>I created a project a long time ago that computes the output image space based on an input image and a transform [1]. Maybe looking at that project will help you.<br><br></div>Hope this helps,<br></div>Francois<br><br>[1] <a href="https://github.com/fbudin69500/ITKTransformTools/blob/master/GetNewSizeAndOrigin.cxx">https://github.com/fbudin69500/ITKTransformTools/blob/master/GetNewSizeAndOrigin.cxx</a><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 12, 2017 at 5:41 AM, g2 <span dir="ltr"><<a href="mailto:antoine.letouzey@gmail.com" target="_blank">antoine.letouzey@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br>
<br>
I am trying to rotate in 3D with a arbitrary rotation matrix a 3D image with<br>
non uniform spacing (0.15, 0.15, 0.19). I am currently using<br>
itk::AffineTransform because at some point in the future I would like to<br>
introduce a translation. My question is about the spacing of the output<br>
image. Since my rotation matrix can be anything, I cannot just re-use the<br>
spacing of my original image. I actually do not care to much about the<br>
output spacing, it can be the same, it can be isotropic, whatever as long as<br>
the data makes sense.<br>
<br>
here is a bit of code of what I've done so far:<br>
<br>
typedef itk::Image<short, 3> Image3d;<br>
Image3d::Pointer itkImage = getImageSomehow();<br>
typedef itk::AffineTransform<double, 3> TransformType;<br>
TransformType::Pointer Rt = TransformType::New();<br>
TransformType::ParametersType params(12);<br>
for (int i = 0; i < 9; i++){<br>
        params[i] = R[i/3][i%3]; // R is the rotation matrix of type<br>
double[3][3]<br>
}<br>
params[9] = 0;<br>
params[10] = 0;<br>
params[11] = 0;<br>
<br>
Rt->SetParameters(params);<br>
<br>
typedef itk::ResampleImageFilter<<wbr>Image3d, Image3d > FilterType;<br>
FilterType::Pointer filter = FilterType::New();<br>
typedef itk::<wbr>NearestNeighborInterpolateImag<wbr>eFunction<Image3d, double ><br>
InterpolatorType;<br>
InterpolatorType::Pointer interpolator = InterpolatorType::New();<br>
filter->SetInterpolator(<wbr>interpolator);<br>
filter->SetDefaultPixelValue(<wbr>255);<br>
filter->SetOutputOrigin(<wbr>itkImage->GetOrigin());<br>
filter->SetOutputSpacing(<wbr>itkImage->GetSpacing());<br>
//double outSpacing[3] = { 0.1, 0.1, 0.1 };<br>
//filter->SetOutputSpacing(<wbr>outSpacing);<br>
filter->SetSize(itkImage-><wbr>GetLargestPossibleRegion().<wbr>GetSize());<br>
filter->SetOutputDirection(<wbr>itkImage->GetDirection());<br>
filter->SetInput(itkImage);<br>
filter->SetTransform(Rt);<br>
filter->Update();<br>
<br>
<br>
After this when I save filter->GetOutput() and open it with IKT-Snap I can<br>
see my new image properly rotated. But it has the same spacing as the input<br>
image, as specified with filter->SetOutputSpacing(<wbr>itkImage->GetSpacing());<br>
and to me this doesn't make sense. The axes are rotated and so should be the<br>
spacing. When I try to put some other values, such as (0.1, 0.1, 0.1). The<br>
output image is all black. I'm confused because to me those values are not<br>
more erroneous than a plain copy of the input spacing.<br>
<br>
Questions :<br>
I want to rotate a generic 3D image with anisotropic spacing with a generic<br>
rotation matrix (i.e. not around a single axis and not with a n*90° angle)<br>
so that any physical point P in the original volumes maps to R*P in the<br>
final one. How should I proceed ?<br>
<br>
thanks<br>
<br>
<br>
<br>
--<br>
Sent from: <a href="http://itk-insight-users.2283740.n2.nabble.com/" rel="noreferrer" target="_blank">http://itk-insight-users.<wbr>2283740.n2.nabble.com/</a><br>
______________________________<wbr>_______<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at<br>
<a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.php" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>products/protraining.php</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at:<br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" rel="noreferrer" target="_blank">http://www.itk.org/Wiki/ITK_<wbr>FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/insight-users" rel="noreferrer" target="_blank">http://public.kitware.com/<wbr>mailman/listinfo/insight-users</a><br>
</blockquote></div><br></div>