[Insight-users] Finding the inverse of a Transformation

N.E. Mackenzie Mackay 9nem at qlink.queensu.ca
Wed Jun 23 12:15:13 EDT 2004


Considered the bug reported.  One down.

I was wondering if itk had anything to convert the final parameters 
into a 4x4 homogeneous matrix.  I am going to use the result in vtk.

Thanks again,
Neilson
On Jun 22, 2004, at 4:22 PM, Luis Ibanez wrote:

>
>
> Hi Neilson,
>
>
> The problem is that the "Inverse()" method is not defined in
> the CenteredRigid2DTransform.
>
> Could you please log a bug repport on the bug tracker ?
> The link is:
>
>                http://www.itk.org/Bug/
>
> You just need to create an account using your email address.
>
>
> -------
>
>
> In the meantime, what you can do is to pass the rotation matrix
> and offset from this transform into an itkAffineTransform, and
> then ask the affinne transform to compute the inverse.  The resulting 
> transform should still be a rigid transform (but stored in the form
> of an affine transform).
>
>
>
> The code will be something like
>
>
>
>   typedef itk::AffineTransform< 2, double >  AffineType;
>
>   AffineType::Pointer affine = AffineType::New();
>
>   finalTransform->SetParameters( parameters );
>
>   affine->SetMatrix( finalTransform->GetRotationMatrix() );
>   affine->SetOffset( finalTransform->GetOffset() );
>
>   AffineType::Pointer invTransform = affine->Inverse();
>
>   AffineType::MatrixType matrix = invTransform->GetMatrix();
>   AffineType::OffsetType offset = invTransform->GetOffset();
>
>
>
>
> Regards,
>
>
>    Luis
>
>
> -----------------------------
> N.E. Mackenzie Mackay wrote:
>
>> Hi,
>>     I have been able to register two images together successfully.  
>> Right now I am trying to find the inverse of the Transformation 
>> between the two but having problems.  I am using 
>> CenteredRigid2DTansform as my transformation.
>>     Two questions:
>>         First, how do I get the inverse of the transform.  I tried 
>> this:
>>             TransformType::Pointer finalTransform = 
>> TransformType::New();
>>             finalTransform->SetParameters ( finalParameters );
>>             TransformType::Pointer finalTrasnformInvers = 
>> TransformType::New();
>>             finalTransformInverse = finalTransform->Inverse();
>>         When I compile this code I get a compile error :
>>             binary '=' operator defined which takes a right-hand 
>> operand of type 'class itk::SmartPointer<class 
>> itk::Rigid3DTransform<double> >' (or there is no acceptable 
>> conversion)
>>         I tried changing my code to:
>>             TransformType::Pointer finalTransform = 
>> TransformType::New();
>>             finalTransform->SetParameters ( finalParameters );
>>                    finalTransform->Inverse();
>>             TransformType::Pointer finalTrasnformInvers = 
>> TransformType::New();
>>             finalTransformInverse = finalTransform;
>>         This compiled but didn't give the actual inverse.  I gave the 
>> original one.
>>     My second question is (and probably answered before) how do I 
>> output the transform as a 4x4 matrix.  My goal is to eventually use 
>> it in vtk.
>> Thanks for all the help,
>> Neilson
>>     _______________________________________________
>> 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