X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=registration%2FclitkConvertBSplineDeformableTransformToVFGenericFilter.cxx;h=1536ff63adaca40ee1d5ee6db6a319590de0f90c;hb=8d1b013bf256345b2e7a60687c200e02a6210f13;hp=98e5f75668ec04844d9bc51532442c1124740be5;hpb=f9c73d25ecff9bfb90c9b040acab74dc102ceac2;p=clitk.git diff --git a/registration/clitkConvertBSplineDeformableTransformToVFGenericFilter.cxx b/registration/clitkConvertBSplineDeformableTransformToVFGenericFilter.cxx index 98e5f75..1536ff6 100644 --- a/registration/clitkConvertBSplineDeformableTransformToVFGenericFilter.cxx +++ b/registration/clitkConvertBSplineDeformableTransformToVFGenericFilter.cxx @@ -28,23 +28,11 @@ ===================================================*/ // 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 InputImageType; typedef itk::Image OutputImageType; - // Read the input - typedef itk::ImageFileReader InputReaderType; - InputReaderType::Pointer reader = InputReaderType::New(); - reader->SetFileName( m_InputFileName); - reader->Update(); - InputImageType::Pointer input= reader->GetOutput(); - + typedef ConvertBLUTCoeffsToVFFilter 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 ConvertorType; -#else - typedef itk::TransformToDeformationFieldSource ConvertorType; -#endif - ConvertorType::Pointer filter= ConvertorType::New(); - - //Output image info - if (m_ArgsInfo.like_given) - { -/* typedef itk::ImageFileReader 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;iSetOutputOrigin(origin); - } - if (m_ArgsInfo.spacing_given) - { - OutputImageType::SpacingType spacing; - for (i=0;iSetOutputSpacing(spacing); - } - if (m_ArgsInfo.spacing_given) - { - OutputImageType::SizeType size; - for (i=0;iSetOutputSize(size); - } + if (m_ArgsInfo.like_given) { + filter->SetLikeFileName(m_ArgsInfo.like_arg); } - - if (m_Verbose) - { - std::cout<< "Setting output origin to "<GetOutputOrigin()<<"..."<GetOutputSpacing()<<"..."<GetOutputSize()<<"..."<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..." <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; iGetSpacing()[i]/ filter->GetOutputSpacing()[i]); - if (m_Verbose) std::cout<<"Setting sampling factor "<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 CoefficientType; - typedef itk::Image CoefficientImageType; - typedef clitk::VectorImageToImageFilter 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..."<Update(); - } - catch (itk::ExceptionObject) - { - std::cerr<<"Error: Exception thrown during execution convertion filter!"<SetBLUTSplineOrders(order); } - + + if (m_ArgsInfo.mask_given) + filter->SetMaskFileName(m_ArgsInfo.mask_arg); + + filter->Update(); + OutputImageType::Pointer output=filter->GetOutput(); - // ----------------------------------------------- // Output // -----------------------------------------------