+
+ //Change information if it must transformation must be saved
+ typedef itk::ChangeInformationImageFilter<OutputImageType> ChangeInfoType;
+ typename ChangeInfoType::Pointer info = ChangeInfoType::New();
+ if(mSaveTransform) {
+ // Set pipeline
+ info->SetInput(itkimg);
+ writer->SetInput(info->GetOutput());
+
+ // Inverse vv matrix
+ itk::Matrix<double, 4, 4> trans;
+ for(int i=0; i<4; i++)
+ for(int j=0; j<4; j++)
+ // TODO SR and BP: check on the list of transforms and not the first only
+ trans[i][j] = mImage->GetTransform()[0]->GetMatrix()->GetElement(i,j);
+ trans = trans.GetInverse();
+
+ // Direction
+ typename ChangeInfoType::DirectionType direction;
+ for(unsigned int i=0; i<VImageDimension; i++)
+ for(unsigned int j=0; j<VImageDimension; j++)
+ direction[i][j] = trans[i][j];
+ info->SetOutputDirection(direction);
+ info->ChangeDirectionOn();
+
+ // Origin
+ typename ChangeInfoType::PointType origin = itkimg->GetOrigin();
+ origin = direction * origin;
+ for(unsigned int i=0; i<VImageDimension; i++)
+ origin[i] += trans[i][3];
+ info->SetOutputOrigin(origin);
+ info->ChangeOriginOn();
+ }
+ else
+ writer->SetInput(itkimg);
+
+