]> Creatis software - clitk.git/blobdiff - common/vvImage.txx
fixing clitk gamma for profiles
[clitk.git] / common / vvImage.txx
index 6e8907633987e48e4fc17c0f7b97cd3eecc57eae..14da10a227f7d825cde021a143b8c2f84a74d7bb 100644 (file)
@@ -26,21 +26,30 @@ void vvImage::AddItkImage(TItkImageType *input)
   input->Update();
 
   // Convert from ITK object to VTK object
-  mImageDimension = TItkImageType::ImageDimension; 
+  mImageDimension = TItkImageType::ImageDimension;
   typedef itk::ImageToVTKImageFilter <TItkImageType> ConverterType;
   typename ConverterType::Pointer converter = ConverterType::New();
   mItkToVtkConverters.push_back(dynamic_cast< itk::ProcessObject *>(converter.GetPointer()));
   converter->SetInput(input);
   converter->Update();
   mVtkImages.push_back( converter->GetOutput() );
-  
+
   // Account for direction in transform. The offset is already accounted for
   // in the VTK image coordinates, no need to put it in the transform.
   vtkSmartPointer<vtkMatrix4x4> matrix = vtkSmartPointer<vtkMatrix4x4>::New();
   matrix->Identity();
-  for(unsigned int j=0; j<input->GetImageDimension(); j++)
-    for(unsigned int i=0; i<input->GetImageDimension(); i++)
+  for(unsigned int i=0; i<input->GetImageDimension(); i++) {
+    for(unsigned int j=0; j<input->GetImageDimension(); j++) {
       (*matrix)[i][j] = input->GetDirection()[i][j];
+      // Direction is used around the image origin in ITK
+      (*matrix)[i][3] -= (*matrix)[i][j] * input->GetOrigin()[j];
+    }
+    (*matrix)[i][3] += input->GetOrigin()[i];
+  }
+
+  // GetDirection provides the forward transform, vtkImageReslice wants the inverse
+  matrix->Invert();
+
   mTransform->SetMatrix(matrix);
 }
 //--------------------------------------------------------------------