[Insight-users] Euler3D transform, how to set the rotation matrix?

Luis Ibanez luis.ibanez at kitware.com
Thu Mar 25 18:45:07 EDT 2010


Hi Michiel,

Thanks for the clarification.



About your question:

    Yes, ITK uses radians as the units for angles.



    Regards,


          Luis


--------------------------------------
2010/3/25 michiel mentink <michael.mentink at st-hughs.ox.ac.uk>:
> Hi Luis,
>
> 1) I might try those methods, thank you.
> 2) and I will also check out that suggestion.
>
> 3) I got the angles using IRTK, which is a custom software program. I think
> these angles are in degrees,
>    whereas ITK uses Radians?
>    I've checked the angles and they dfinately are correct.
>
> cheers, Michael
>
> 2010/3/18 Luis Ibanez <luis.ibanez at kitware.com>
>>
>> Hi Michiel,
>>
>>
>> 1)  Why not to simply call the itk::Euler3DTransfom methods:
>>
>>             SetAngleX()
>>             SetAngleY()
>>             SetAngleZ()
>>
>>                                                  ??
>>
>>
>> 2) If you want to see how the rotation matrix is computed from
>>    the rotation angles above, please look at the method
>>
>>                          ComputeMatrix()
>>
>>   in lines 202-243 of
>>
>>                Insight/Code/Common/itkEuler3DTransform.txx
>>
>>
>>
>> 3) Please, note that one of the problems with Euler angles
>>    is that different implementations apply them in different
>>    order, ... and ... the order really matters.
>>
>>     How did you get the initial three angles ?
>>     are they the result of a registration that you did with ITK ?
>>
>>
>>   Please let us know,
>>
>>
>>       Thanks
>>
>>
>>              Luis
>>
>>
>>
>> ---------------------------------------------------------------------------------
>> 2010/3/9 michiel mentink <michael.mentink at st-hughs.ox.ac.uk>:
>> >
>> > I have 3 rotation angles, that I got from a registration algorithm.
>> > rx = 0.0664    ry = -0.0625    rz = -0.0078
>> > Now I would like to apply to rotation.
>> >
>> > The Euler3D transform needs a rotation matrix. How can that matrix be
>> > calculated?
>> > This is what I've come up with so far, but it doesn't do anything:
>> >
>> >
>> >   typedef itk::Euler3DTransform<double>TransformType2;
>> >   TransformType2::Pointer transform2 =TransformType2::New();
>> >
>> > // Rotation matrix:
>> >
>> > //  Rx(θ)                x                y cos theta - z sin theta
>> > z
>> > cos theta + y sin theta
>> > //  Ry(θ)     x cos theta + z sin theta                y
>> > -x
>> > sin theta + z cos theta
>> > //  Rz(θ)     x cos theta - y sin theta    y cos theta + x sin theta
>> >         z
>> >
>> >   typedef itk::Matrix<double> MatrixType;
>> >   MatrixType rotMatrix;
>> >
>> >   //   column  row
>> >   rotMatrix[0][0] = 1;
>> >   rotMatrix[0][1] =  cos( atof(argv[7]) ) + sin( atof(argv[7]) );
>> >   rotMatrix[0][2] =  cos( atof(argv[9]) ) - sin( atof(argv[9]) );
>> >
>> >   rotMatrix[1][0] =  cos( atof(argv[7]) ) - sin( atof(argv[7]) );
>> >   rotMatrix[1][1] = 1;
>> >   rotMatrix[1][2] =  cos( atof(argv[7]) ) + sin( atof(argv[7]) );
>> >
>> >   rotMatrix[2][0] =  cos( atof(argv[7]) ) + sin( atof(argv[7]) );
>> >   rotMatrix[2][1] = -cos( atof(argv[7]) ) + sin( atof(argv[7]) );
>> >   rotMatrix[2][2] = 1;
>> >
>> >   transform->SetMatrix( rotMatrix);
>> >
>> >
>> > I'm not to sure about the '1' entries too, since they should by x, y, or
>> > z...
>> >
>> > cheers,
>> >
>> > Michael
>> >
>> > _____________________________________
>> > Powered by www.kitware.com
>> >
>> > Visit other Kitware open-source projects at
>> > http://www.kitware.com/opensource/opensource.html
>> >
>> > Kitware offers ITK Training Courses, for more information visit:
>> > http://www.kitware.com/products/protraining.html
>> >
>> > Please keep messages on-topic and check the ITK FAQ at:
>> > http://www.itk.org/Wiki/ITK_FAQ
>> >
>> > Follow this link to subscribe/unsubscribe:
>> > http://www.itk.org/mailman/listinfo/insight-users
>> >
>> >
>
>


More information about the Insight-users mailing list