[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