]> Creatis software - clitk.git/blobdiff - tools/clitkComposeVFGenericFilter.txx
QVTKOpenGLNativeWidget is available from VTK8.2
[clitk.git] / tools / clitkComposeVFGenericFilter.txx
index 07df9882fe573cafd268b4b78a83d9e914cc80f7..0e6d1a47e2ad187e16f09379fc43cac4dd602d79 100644 (file)
 #define __clitkComposeVFGenericFilter_txx
 #include "clitkComposeVFGenericFilter.h"
 
-#include "clitkBSplineDeformableTransform.h"
-#include "clitkBSplineDeformableTransformInitializer.h"
-#if ITK_VERSION_MAJOR >= 4
-#include "itkTransformToDisplacementFieldSource.h"
-#else
-#include "itkTransformToDeformationFieldSource.h"
-#endif
+#include "clitkConvertBLUTCoeffsToVFFilter.h"
 
 namespace clitk
 {
@@ -43,59 +37,6 @@ namespace clitk
       }
   }
 
-  template<class DisplacementFieldType>
-  typename DisplacementFieldType::Pointer ComposeVFGenericFilter::CoeffsToDVF(std::string fileName, std::string likeFileName)
-  {
-    typedef clitk::BSplineDeformableTransform<double, DisplacementFieldType::ImageDimension, DisplacementFieldType::ImageDimension> TransformType;
-    typedef typename TransformType::CoefficientImageType CoefficientImageType;
-
-    typedef itk::ImageFileReader<CoefficientImageType> CoeffReaderType;
-    typename CoeffReaderType::Pointer reader = CoeffReaderType::New();
-    reader->SetFileName(fileName);
-    reader->Update();
-
-    typename TransformType::Pointer transform = TransformType::New();
-    transform->SetCoefficientImage(reader->GetOutput());
-    
-#if ITK_VERSION_MAJOR >= 4
-        typedef itk::TransformToDisplacementFieldSource<DisplacementFieldType, double> ConvertorType;
-#else
-        typedef itk::TransformToDeformationFieldSource<DisplacementFieldType, double> ConvertorType;
-#endif
-
-    typedef itk::ImageIOBase ImageIOType;
-    typename ImageIOType::Pointer imageIO = itk::ImageIOFactory::CreateImageIO(likeFileName.c_str(), itk::ImageIOFactory::ReadMode);
-    imageIO->SetFileName(likeFileName);
-    imageIO->ReadImageInformation();
-
-    typename ConvertorType::Pointer convertor= ConvertorType::New();
-    typename ConvertorType::SizeType output_size;
-    typename ConvertorType::SpacingType output_spacing;
-    typename ConvertorType::OriginType output_origin;
-    typename ConvertorType::DirectionType output_direction;
-    for (unsigned int i = 0; i < DisplacementFieldType::ImageDimension; i++) {
-      output_size[i] = imageIO->GetDimensions(i);
-      output_spacing[i] = imageIO->GetSpacing(i);
-      output_origin[i] = imageIO->GetOrigin(i);
-      for (unsigned int j = 0; j < DisplacementFieldType::ImageDimension; j++)
-        output_direction[i][j] = imageIO->GetDirection(i)[j];
-    }
-    
-    if (m_Verbose) {
-      std::cout << "Interpolating coefficients with grid:" << std::endl;
-      std::cout << output_size << output_spacing << std::endl;
-    }
-    
-    convertor->SetNumberOfThreads(1);
-    convertor->SetTransform(transform);
-    convertor->SetOutputOrigin(output_origin);
-    convertor->SetOutputSpacing(output_spacing);
-    convertor->SetOutputSize(output_size);
-    convertor->SetOutputDirection(output_direction);
-    convertor->Update();
-
-    return convertor->GetOutput();
-  }
   
   template<unsigned int Dimension, class PixelType>
   void ComposeVFGenericFilter::UpdateWithDimAndPixelType()
@@ -106,8 +47,17 @@ namespace clitk
 
     //Define the image type
     if (m_Type == 1) {
-      input1 = this->CoeffsToDVF<ImageType>(m_InputName1, m_LikeImage);
-      input2 = this->CoeffsToDVF<ImageType>(m_InputName2, m_LikeImage);
+      typedef ConvertBLUTCoeffsToVFFilter<ImageType> VFFilterType;
+      typename VFFilterType::Pointer vf_filter = VFFilterType::New();
+      vf_filter->SetInputFileName(m_InputName1);
+      vf_filter->SetLikeFileName(m_LikeImage);
+      vf_filter->SetVerbose(m_Verbose);
+      vf_filter->Update();
+      input1 = vf_filter->GetOutput();
+
+      vf_filter->SetInputFileName(m_InputName2);
+      vf_filter->Update();
+      input2 = vf_filter->GetOutput();
     }
     else {
       //Read the input1