[Insight-developers] RE: QuaterionRigidTransform
Luis Ibanez
ibanez@choroid.cs.unc.edu
Thu, 13 Sep 2001 08:08:45 -0400 (EDT)
Hi,
itkVersor is the replacement for Quaternions.
Versors are just unit Quaternions. The advantage
of having a limited versor class is that only the
operation that produce versors have been implemented.
For example, the sum is not, because the sum of two
unit quaternions (versors) is not a unit quaternion.
operator*() is used to represent versor composition,
which is a preserving operations. Exponentiation and
logarithms are also preserving operations.
For the details, there are two documents PDF docuements
about quaternions in InsigthDocuments/Developer/General.
The Transform hierarchy is intended to be:
itkTransform
|
itkRigid3DTransform
|
itkVersorRigid3DTransform
Versors only require 3 parameters (as unit quaternions do).
So, the total number of parameters for the Rigid3DTransform
is 6. (as opposed to the 7 we had before).
The combination of a versor and a vector is called a "screw"
because it represent a helicoidal movement. (not necesarily
infinitesimal).
Lydia, the solution you propose for the itkQuaternion seems
to be the best option, just derive it directly from
itkTransform and keep 7 parameters (4 for the quaternion and
3 for the translation). I apologize for breaking this part of
the code.
Now, for the optimization, Lydia's initiative of writing a
specialized Quaternion optimizer seems to be the way to go.
A generic GradientDescent algorithm cannot be used for
searching in the space of unit quaternions because it is
not a vector space (the result of a sums of versors is not
a versor). The solution however is relatively simple and the
optimizer's code will almost be the same.
I expect to get the itkVersor optimizer and an itkVersorRigid
optimizer done soon.
Luis