[Insight-users] Inverse of a ScaleSkew

Luis Ibanez luis.ibanez at kitware.com
Thu Aug 24 09:03:44 EDT 2006


Hi Sohan,

ITK Transform have a double mechanism for representing
their parameterization.

In the particular case of the ScaleSkewVersor3DTransform
the parameterizations are:

    1 Versor for representing rotation
    1 Vector for representing translation
    6 Scalars for representing differential skews
    3 Scalars for representing differential scales

These values are used for computing a Matrix and and
Offset that are an equivalent representation of the
transformation but that do not include the natural
constrains of the Transform.

When you attempt to build a inverse of this transform,
the base class does it by inverting the Matrix and Offset
and then from them attempts to compute the parameters
above (versor,vector,skews and scales).

Unfortunately the implementation of that conversion
is incomplete in the ScaleSkewVersor3DTransform.

We have posted code to the list indicating how that
ComputeMatrixParameters() method could be overloaded
for this Transform. The process is based on a Polar
decomposition of the Matrix.

http://public.kitware.com/pipermail/insight-users/2006-August/019025.html

This is a bug that is being addressed and for which
there should be a fix for the upcoming release of ITK 3.0

In the meantime, you can simply use the Matrix, Offset and
Center of rotation of the ScaleSkewVersor3DTransform in order
to create an equivalent AffineTransform, and then compute
the inverse of the AffineTransform. That will be fully
equivalent to the inverse of the ScaleSkewVersor3DTransform
and you will be able to use it for resampling images, for
example.



   Regards,


      Luis


----------------------------------
Ranjan, Sohan (GE, Research) wrote:
> I was trying to compute of a ScaleSkewVersor3DTransform, where the computation threw
> an exception for the call to ComputeMatrixParameters method.
> 
> In the class MatrixOffsetTransformBase, I see the following code for computing inverse:
> 
>   inverse->m_Matrix         = this->GetInverseMatrix();
>   inverse->m_InverseMatrix  = m_Matrix;
>   inverse->m_Offset         = -(this->GetInverseMatrix() * m_Offset);
>   inverse->ComputeTranslation();
>   inverse->ComputeMatrixParameters();
> 
> I want to understand what does call to the method ComputeMatrixParameters do. For 
> example, for the ScaleSkewVersor3DTransform, the first four lines work. So, do I really
> need to bother about failing of the ComputeMatrixParameters method.
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
> 
> 




More information about the Insight-users mailing list