<div dir="ltr">Hi Andaharoo,<div><br></div><div>It's possible to simplify things by using one transformation instead of two: When using SetResliceAxesOrigin(), it's best to use SetResliceAxesDirectionCosines<wbr>() to set the orientation instead of SetResliceTransform().</div><div><br></div><div>I'm going to define maxpos[] instead of extent[]:</div><div><br></div><div>maxpos[i] = (dim[i] - 1) * spacing[i]</div><div><br></div><div>The "- 1" is very important: the idea here is that the first slice is at position 0, and the last slice is at position n-1 if "n" is the number of slices.  Then we can set up vtkImageReslice as follows:</div><div><br></div><div><div>reslicer->SetResliceAxesOrigin<wbr>(slice * spacing[0], 0.0, maxpos[2]);<br></div><div>reslicer->SetResliceAxesDirect<wbr>ionCosines(0.0, 1.0, 0.0,  0.0, 0.0, -1.0,  -1.0, 0.0, 0.0);</div><div>reslicer->SetOutputOrigin(0.0, 0.0, 0.0);<br></div></div><div><br></div><div>The "direction cosines" specify the orientation of the extracted slices: in the above example, (0, 1, 0) is in the "y" direction and (0, 0, -1) is in the "-z" direction so it will show a slice from the YZ plane.  The third direction (-1, 0, 0) is the slicing direction, and it must be set to the cross product of the other two directions.</div><div><br></div><div>The reason that the ResliceAxesOrigin must be set to (slicepos, 0.0, maxpos[2]) in this case is that the "z" component of one of the direction cosines is negative.</div><div><br></div><div> - David</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 14, 2017 at 11:35 PM, Andaharoo <span dir="ltr"><<a href="mailto:Andx_roo@live.com" target="_blank">Andx_roo@live.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I have a program that shows the three major axii of a volume using<br>
vtkImageViewer2 and I want to output a single image given the x, y, or z<br>
slice number. I've been using vtkImageReslice to accomplish this task.<br>
Outputting the XY plane is easy, I just do:<br>
<br>
reslicer-><wbr>setResliceAxesOrigin(0, 0, slice * spacing[2]);<br>
<br>
I don't have to transform the plane as XY is default. Then I just set the z<br>
of the plane, which in physical space would be the slice number * spacing.<br>
<br>
Now to do the same thing but with the YZ plane I do:<br>
<br>
reslicer-><wbr>SetResliceAxesOrigin(0, 0, slice * spacing[0]);<br>
transform->Translate(extent[0]<wbr>, extent[1], extent[2]);<br>
transform->RotateY(90);<br>
transform->Translate(-extent[<wbr>0], -extent[1], -extent[2]);<br>
reslicer->SetResliceTransform(<wbr>transform);<br>
<br>
Note: extent[i] = dim[i] * spacing[i], not vtk's image data extent.<br>
<br>
So I transform to the origin, then rotate the plane on the Y axis. I've<br>
noticed that the axes origin gets applied after transform so the slice<br>
number that would have been on the x axis should be specified as z in<br>
SetResliceAxesOrigin. Also to get the correct depth of the slice I need the<br>
spacing from the corresponding axis in the image which would be x axis<br>
spacing or spacing[0].<br>
<br>
Now the problem is that while the transform works perfectly the slice number<br>
isn't the correct one. In fact it's a suspicious number.<br>
<br>
With this input image:<br>
Dim = 240, 240, 163<br>
Spacing = 1.0444, 1.0444, 1.0999<br>
Dim with Spacing (size) ~ 249, 249, 179<br>
<br>
When I try to export the middle slice, 120, I get the wrong slice. Now I<br>
noticed if I swap the spacing with the spacing of the z axis (spacing[2])<br>
then I get the middle slice of the z axis. Slice 81 (163/2 floored). Which<br>
makes me think the slice is somehow in z axis scale. So I tried manually<br>
rescaling the axesorigin by normalizing the slice. frac = slice / maxslice<br>
or 0.5 = 120 / 240. Then frac * size[2] or 0.5 * 163 * 1.0999. But the<br>
scaling is still off. While I get the correct slice from 120 all the others<br>
are still off.<br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://vtk.1045678.n5.nabble.com/vtkImageReslicing-from-every-major-axis-problem-tp5743646.html" rel="noreferrer" target="_blank">http://vtk.1045678.n5.nabble.<wbr>com/vtkImageReslicing-from-<wbr>every-major-axis-problem-<wbr>tp5743646.html</a><br>
Sent from the VTK - Users mailing list archive at Nabble.com.<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 <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_<wbr>FAQ</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=<wbr>vtkusers</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">http://public.kitware.com/<wbr>mailman/listinfo/vtkusers</a><br>
</blockquote></div><br></div>