[Insight-users] Inverse of Similarity3DTransform

Christoph Niedermayr niedermayr at trium.de
Mon Sep 18 03:44:38 EDT 2006


Hi Luis!

It works just fine now!

thanks (again) :)

best regards,
Chris

Am Sonntag, den 17.09.2006, 11:33 -0400 schrieb Luis Ibanez:
> Hi Cristoph,
> 
> The GetInverse method is not implemented in the Similarity3DTransform.
> 
> 
> There has been some discussion on how to implement the inverse
> operation in a consistent way across all the transform.
> 
> 
> The GetInverse() method that is being called is the one of
> the superclasses of the Similarity transform. That's not the
> method that should be used here.
> 
> 
> What you may want to do is to extract the three components of the
> Similarity transform:
> 
>     1) Scale (a Scalar)
>     2) Rotation (a Versor = Unit Quaternion)
>     3) Translation (a Vector)
> 
> Invert them and then invert their sequence of application.
> 
> You get the values with:
> 
>       scale  = similarityTransform->GetScale();
>       versor = similarityTransform->GetVersor();
>       vector = similarityTransform->GetTranslation();
> 
> The inversion is computed as
> 
>       iscale = 1.0 / scale
>       iversor = versor.GetConjugate();
>       ivector = -vector;
> 
> with iscale and iversor you can compute the matrix as
> 
>       matrix = iversor.GetMatrix() * iscale
> 
> Then in order to revert the order of translation you do
> 
>       rivector = matrix * ivector;
> 
> 
> If you take now these componets:
> 
> 
>         { iscale, iversor, rivector }
> 
> 
> and "Set" them in a Similarity transform, you will have
> the inversse of the original similarity transform.
> 
> 
> Please let us know if you  find any problem implementing
> this method.
> 
> 
>    Thanks
> 
> 
> 
>       Luis
> 
> 
> 
> =============================
> Christoph Niedermayr wrote:
> > Hi all!
> > 
> > ITK 2.6
> > I'm trying to get the inverse of Similarity3DTransform's
> > parameter set p. p is valid (has been computed by registration
> > with Similarity3DTransform). I thought [1] should work,
> > but GetInverse always returns false... both transforms are of
> > course Similarity3DTransforms!
> > 
> > Any hints?
> > 
> > best regards,
> > chris
> > 
> > [1]
> > originalTransform->SetParameters(p);
> > if(originalTransform->GetInverse(inverseTransform))
> >   p = inverseTransform->GetParameters();
> > else
> >   cout<< "bad luck :("
> > 	
> >   
> > 
> > 
> > _______________________________________________
> > 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