[Insight-developers] Question about MIRegistration

Bill Lorensen wlorens1@nycap.rr.com
Thu, 20 Feb 2003 19:11:31 -0500


The rotations are extracted from the 4x4 matrix. The order is as you explained. Why is it odd? The order depends on how the rotations are extracted from the matrix. If you apply the rotations in this order, you will produce the 4x4 transform that the MI code produced. The scripts use vtkImageChangeInformation to adjust the origin of the volume such that (0,0,0) is in the center of the volume.

Bill

At 02:52 PM 2/20/03 -0700, Ross Whitaker wrote:

>Hi Folks, 
>
>The MIRegistration appliation (3D rigid) spits about a file that looks
>like this:
>
>set study1Prefix "/scratch/research/mrangiog/BB"
>set study1ByteOrder "BigEndian"
>set study1Extent "0 511 0 1039 1 140"
>set study1Spacing "1 1 1"
>set study2Prefix "/scratch/research/mrangiog/wb"
>set study2ByteOrder "BigEndian"
>set study2Extent "0 511 0 1039 1 120"
>set study2Spacing "1 1 1"
>set rotateX 1.18844
>set rotateY -0.424268
>set rotateZ 0.328555
>set translate "16.3099 2.70433 -4.72612"
>
>However, it is not clear how to interpret the rigid transformation
>part of this file.  One way to go is to look at how it is created.
>This would be from the vtk object , aTrans, in the application.  The
>output is:
>
>  fptr << "set rotateX "
>       << aTrans->GetOrientation()[0] << std::endl;
>  fptr << "set rotateY "
>       << aTrans->GetOrientation()[1] << std::endl;
>  fptr << "set rotateZ "
>       << aTrans->GetOrientation()[2] << std::endl;
>  fptr << "set translate \""
>        << aTrans->GetPosition()[0] << " "
>        << aTrans->GetPosition()[1] << " "
>        << aTrans->GetPosition()[2] << "\"" << std::endl;
>
>However, I can't find documentation in VTK (looked at the code and the
>on-line docs---not much there).  For instance, if these are Euler
>angles, what order does the rotation take place in?  Is it (XYZ)p or
>(ZYX)p (where p is a point vector).  Furthermore the VTK gui that
>reads and displays the results of this registration reads this file
>using the following code:
>
>if {[info exists matrix] == 0} {
>eval  transform Translate $translate
>      transform RotateZ $rotateZ
>      transform RotateX $rotateX
>      transform RotateY $rotateY
>} else {
>eval transform SetMatrix $matrix
>}
>
>Because the transforms in VTK assume a premultiply, this would imply
>that the transformation matrix is built like 
>
>TZXYp
>
>That is, rotate around the y axis before the x and the z.  This is
>very odd.  Is this the VTK default.  If not, isn't this a bug?
>
>Also, it doesn't say where the origin is.  Do I assume that all
>transformation occur with the origin located at the pixel position (0,
>0, 0)?
>
>Regards, 
>
>Ross
>
>--------------------------
>Ross T. Whitaker, Assistant Professor
>50 S. Central Campus Drive, Rm. 3190 
>University of Utah
>Salt Lake City, UT  84112-9205
>voice: 801/587-9549, fax: 801/581-5843
>web: www.cs.utah.edu/~whitaker
>
>_______________________________________________
>Insight-developers mailing list
>Insight-developers@public.kitware.com
>http://public.kitware.com/mailman/listinfo/insight-developers