[Insight-users] to combine two affine transformations

Henry nyhenry at gmail.com
Mon Dec 3 16:15:08 EST 2007


Hi all,
I am confused by the results of combination of two transformations. I
need to apply affine transform1(Matrix1, Offset1) first and then
affine transform2 (Matrix2, Offset2).

Should the result transform3(Matrix3, Offset3) be like

Matrix3 = Matrix2*Matrix1
Matrix3 = Matrix2*Offset1 + Offset2 ?

I apply the transform3 and compare the image with apply two separate
(transform1 and then transform2),  and found the rotations are the
same but the offset/translation of the two results are different.
Any idea why this happens?

Thanks!!
Henry

~~~~~~~~~~~~~~~
//my program looks like this:

  typedef itk::AffineTransform<double,3> AffineTransformType;
  AffineTransformType::Pointer affine = AffineTransformType::New();
  itk::TransformFileReader::Pointer transformreader1;
  itk::TransformFileReader::Pointer transformreader2;
  transformreader1 = itk::TransformFileReader::New();
  transformreader2 = itk::TransformFileReader::New();
  transformreader1->SetFileName( argv[1] );
  transformreader2->SetFileName( argv[2] );

    transformreader1->Update();
    transformreader2->Update();

//I read in two .tfm files and do the following:


	transform->SetMatrix( affine_read2->GetMatrix()*affine_read1->GetMatrix());
	transform->SetOffset(affine_read2->GetMatrix()*affine_read1->GetOffset()
+affine_read2->GetOffset());


//and then write the final results

  itk::TransformFileWriter::Pointer writer;
  writer = itk::TransformFileWriter::New();
  writer->SetInput(transform);
  writer->SetFileName( argv[3] );


More information about the Insight-users mailing list