]> Creatis software - clitk.git/blob - common/vvImage.txx
Account for ITK image direction
[clitk.git] / common / vvImage.txx
1 #include <itkImageToVTKImageFilter.h>
2
3 //--------------------------------------------------------------------
4 template<class TItkImageType>
5 void vvImage::AddItkImage(TItkImageType *input)
6 {
7   // Convert from ITK object to VTK object
8   mImageDimension = TItkImageType::ImageDimension; 
9   typedef itk::ImageToVTKImageFilter <TItkImageType> ConverterType;
10   typename ConverterType::Pointer converter = ConverterType::New();
11   mItkToVtkConverters.push_back(dynamic_cast< itk::ProcessObject *>(converter.GetPointer()));
12   converter->SetInput(input);
13   converter->Update();
14   mVtkImages.push_back( converter->GetOutput() );
15   
16   // Account for direction in transform. The offset is already accounted for
17   // in the VTK image coordinates, no need to put it in the transform.
18   for(unsigned int j=0; j<input->GetImageDimension(); j++)
19     for(unsigned int i=0; i<input->GetImageDimension(); i++)
20       mTransform->GetMatrix()->SetElement(i,j, input->GetDirection()[i][j]);
21
22   // Create the corresponding transformed image
23   mVtkImageReslice.push_back(vtkSmartPointer<vtkImageReslice>::New());
24   mVtkImageReslice.back()->SetInterpolationModeToLinear();
25   mVtkImageReslice.back()->AutoCropOutputOn();
26   mVtkImageReslice.back()->SetBackgroundColor(-1000,-1000,-1000,1);
27   mVtkImageReslice.back()->SetResliceTransform(mTransform);
28   mVtkImageReslice.back()->SetInput(0, converter->GetOutput());
29   mVtkImageReslice.back()->UpdateInformation();
30   mTransformedVtkImages.push_back( mVtkImageReslice.back()->GetOutput(0) );
31 }
32 //--------------------------------------------------------------------
33