]> Creatis software - clitk.git/blobdiff - registration/clitkConvertBSplineDeformableTransformToVFGenericFilter.cxx
Removed typename outside template which prevents MSVC compilation
[clitk.git] / registration / clitkConvertBSplineDeformableTransformToVFGenericFilter.cxx
index 98e5f75668ec04844d9bc51532442c1124740be5..1536ff63adaca40ee1d5ee6db6a319590de0f90c 100644 (file)
  ===================================================*/
 
 // clitk include
-#include "clitkIO.h"
-#include "clitkCommon.h"
-#include "clitkImageCommon.h"
-#include "clitkConvertBSplineDeformableTransformToVF_ggo.h"
 #include "clitkBSplineDeformableTransform.h"
 #include "clitkTransformToDeformationFieldSource.h"
 #include "clitkShapedBLUTSpatioTemporalDeformableTransform.h"
-#include "itkImageMaskSpatialObject.h"
-
+#include "clitkConvertBLUTCoeffsToVFFilter.h"
 #include "clitkConvertBSplineDeformableTransformToVFGenericFilter.h"
-#include "clitkVectorImageToImageFilter.h"
-#if ITK_VERSION_MAJOR >= 4
-#include "itkTransformToDisplacementFieldSource.h"
-#else
-#include "itkTransformToDeformationFieldSource.h"
-#endif
-#include "itkBSplineDeformableTransform.h"
 
 
 namespace clitk
@@ -86,201 +74,45 @@ namespace clitk
     typedef itk::Image<InputPixelType, Dimension> InputImageType;
     typedef itk::Image<OutputPixelType, Dimension> OutputImageType;
 
-    // Read the input
-    typedef itk::ImageFileReader<InputImageType> InputReaderType;
-    InputReaderType::Pointer reader = InputReaderType::New();
-    reader->SetFileName( m_InputFileName);
-    reader->Update();
-    InputImageType::Pointer input= reader->GetOutput();
-
+    typedef ConvertBLUTCoeffsToVFFilter<OutputImageType> FilterType;
+    FilterType::Pointer filter = FilterType::New();
+    filter->SetInputFileName(m_InputFileName);
+    filter->SetTransformType(m_ArgsInfo.type_arg);
+    filter->SetVerbose(m_ArgsInfo.verbose_flag);
 
-    // -----------------------------------------------
-    // Filter
-    // -----------------------------------------------
-#if ITK_VERSION_MAJOR >= 4
-    typedef itk::TransformToDisplacementFieldSource<OutputImageType, double> ConvertorType;
-#else
-    typedef itk::TransformToDeformationFieldSource<OutputImageType, double> ConvertorType;
-#endif
-    ConvertorType::Pointer filter= ConvertorType::New();
-
-    //Output image info
-    if (m_ArgsInfo.like_given)
-    {
-/*        typedef itk::ImageFileReader<OutputImageType> ReaderType;
-        ReaderType::Pointer reader2=ReaderType::New();
-        reader2->SetFileName(m_ArgsInfo.like_arg);
-        reader2->Update();
-
-        OutputImageType::Pointer image=reader2->GetOutput();
-        filter->SetOutputParametersFromImage(image);*/
-
-        typedef itk::ImageIOBase ImageIOType;
-        typename ImageIOType::Pointer imageIO = itk::ImageIOFactory::CreateImageIO(m_ArgsInfo.like_arg, itk::ImageIOFactory::ReadMode);
-        imageIO->SetFileName(m_ArgsInfo.like_arg);
-        imageIO->ReadImageInformation();
-
-        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 < Dimension; 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 < Dimension; j++)
-            output_direction[i][j] = imageIO->GetDirection(i)[j];
-        }
-        
-        filter->SetOutputOrigin(output_origin);
-        filter->SetOutputSpacing(output_spacing);
-        filter->SetOutputSize(output_size);
-        filter->SetOutputDirection(output_direction);
-    }
-    else
-    {
-        unsigned int i=0;
-        if (m_ArgsInfo.origin_given)
-        {
-            OutputImageType::PointType origin;
-            for (i=0;i<Dimension;i++)
-                origin[i]=m_ArgsInfo.origin_arg[i];
-            filter->SetOutputOrigin(origin);
-        }
-        if (m_ArgsInfo.spacing_given)
-        {
-            OutputImageType::SpacingType spacing;
-            for (i=0;i<Dimension;i++)
-                spacing[i]=m_ArgsInfo.spacing_arg[i];
-            filter->SetOutputSpacing(spacing);
-        }
-        if (m_ArgsInfo.spacing_given)
-        {
-            OutputImageType::SizeType size;
-            for (i=0;i<Dimension;i++)
-                size[i]=m_ArgsInfo.size_arg[i];
-            filter->SetOutputSize(size);
-        }
+    if (m_ArgsInfo.like_given) {
+      filter->SetLikeFileName(m_ArgsInfo.like_arg);
     }
-
-    if (m_Verbose)
-    {
-        std::cout<< "Setting output origin to "<<filter->GetOutputOrigin()<<"..."<<std::endl;
-        std::cout<< "Setting output spacing to "<<filter->GetOutputSpacing()<<"..."<<std::endl;
-        std::cout<< "Setting output size to "<<filter->GetOutputSize()<<"..."<<std::endl;
+    else {
+      FilterType::OutputImagePointType origin;
+      FilterType::OutputImageSpacingType spacing;
+      FilterType::OutputImageSizeType size;
+      for (unsigned int i = 0; i < Dimension; i++) {
+        origin[i] = m_ArgsInfo.origin_arg[i];
+        spacing[i] = m_ArgsInfo.spacing_arg[i];
+        size[i] = m_ArgsInfo.size_arg[i];
+      }
+      filter->SetOutputOrigin(origin);
+      filter->SetOutputSpacing(spacing);
+      filter->SetOutputSize(size);
     }
-
-
-    // -----------------------------------------------
-    // Transform
-    // -----------------------------------------------
-    typedef clitk::BSplineDeformableTransform< double, Dimension, Dimension> BLUTTransformType;
-    BLUTTransformType::Pointer blut_transform=BLUTTransformType::New();
-
-    typedef itk::BSplineDeformableTransform< double, Dimension, Dimension> ITKTransformType;
-    ITKTransformType::Pointer itk_transform=ITKTransformType::New();
     
-    typedef itk::Transform< double, Dimension, Dimension> GenericTransformType;
-    typename GenericTransformType::Pointer transform;
-    
-    // Mask
-    typedef itk::ImageMaskSpatialObject<  Dimension >   MaskType;
-    MaskType::Pointer  spatialObjectMask=NULL;
-    if (m_ArgsInfo.mask_given)
-    {
-        typedef itk::Image< unsigned char, Dimension >   ImageMaskType;
-        typedef itk::ImageFileReader< ImageMaskType >    MaskReaderType;
-        MaskReaderType::Pointer  maskReader = MaskReaderType::New();
-        maskReader->SetFileName(m_ArgsInfo.mask_arg);
-
-        try
-        {
-            maskReader->Update();
-        }
-        catch ( itk::ExceptionObject & err )
-        {
-            std::cerr << "ExceptionObject caught while reading mask !" << std::endl;
-            std::cerr << err << std::endl;
-            return;
-        }
-        if (m_Verbose)std::cout <<"Mask was read..." <<std::endl;
-
-        // Set the image to the spatialObject
-        spatialObjectMask = MaskType::New();
-        spatialObjectMask->SetImage( maskReader->GetOutput() );
-        blut_transform->SetMask(spatialObjectMask);
-    }
-
-    if (m_ArgsInfo.type_arg != 0 ) { // using BLUT
-      // Spline orders:  Default is cubic splines
-        if (m_Verbose) {
-          std::cout << "Using clitk::BLUT." << std::endl;
-          std::cout << "Setting spline orders and sampling factors." << std::endl;
-        }
-      InputImageType::RegionType::SizeType splineOrders ;
-      splineOrders.Fill(3);
-      if (m_ArgsInfo.order_given)
-          for (unsigned int i=0; i<Dimension;i++)
-              splineOrders[i]=m_ArgsInfo.order_arg[i];
-      if (m_Verbose) std::cout<<"Setting the spline orders  to "<<splineOrders<<"..."<<std::endl;
-
-      // Samplingfactors
-      InputImageType::SizeType samplingFactors;
-      for (unsigned int i=0; i< Dimension; i++)
-      {
-          samplingFactors[i]= (int) ( input->GetSpacing()[i]/ filter->GetOutputSpacing()[i]);
-          if (m_Verbose) std::cout<<"Setting sampling factor "<<i<<" to "<<samplingFactors[i]<<"..."<<std::endl;
+    if (m_ArgsInfo.order_given) {
+      FilterType::OutputImageSizeType order;
+      for (unsigned int i = 0; i < Dimension; i++) {
+        order[i] = m_ArgsInfo.order_arg[i];
       }
-      blut_transform->SetSplineOrders(splineOrders);
-      blut_transform->SetLUTSamplingFactors(samplingFactors);
-      blut_transform->SetCoefficientImage(input);
-
-      transform = blut_transform;
-    }
-    else { // using ITK transform
-        if (m_Verbose) {
-          std::cout << "Using itk::BSpline" << std::endl;
-          std::cout << "Extracting components from input coefficient image and creating one coefficient image per-component" << std::endl;
-        }
-          
-        typedef  double PixelType;
-        typedef itk::Vector<PixelType, Dimension> CoefficientType;
-        typedef itk::Image<CoefficientType, Dimension> CoefficientImageType;
-        typedef clitk::VectorImageToImageFilter<CoefficientImageType, typename ITKTransformType::ImageType> FilterType;
-        typename FilterType::Pointer component_filter[Dimension];
-
-        typename ITKTransformType::ImagePointer coefficient_images[Dimension];
-        for (unsigned int i=0; i < Dimension; i++) {
-            component_filter[i] = FilterType::New();
-            component_filter[i]->SetInput(input);
-            component_filter[i]->SetComponentIndex(i);
-            component_filter[i]->Update();
-            coefficient_images[i] = component_filter[i]->GetOutput();
-        }
-        itk_transform->SetCoefficientImage(coefficient_images);
 
-        transform = itk_transform;
-    }
-   
-    filter->SetTransform(transform);
-
-
-    // -----------------------------------------------
-    // Update
-    // -----------------------------------------------
-    if (m_Verbose)std::cout<< "Converting the BSpline transform..."<<std::endl;
-    try
-    {
-        filter->Update();
-    }
-    catch (itk::ExceptionObject)
-    {
-        std::cerr<<"Error: Exception thrown during execution convertion filter!"<<std::endl;
+      filter->SetBLUTSplineOrders(order);
     }
-
+    
+    if (m_ArgsInfo.mask_given)
+      filter->SetMaskFileName(m_ArgsInfo.mask_arg);
+    
+    filter->Update();
+    
     OutputImageType::Pointer output=filter->GetOutput();
 
-
     // -----------------------------------------------
     // Output
     // -----------------------------------------------