[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