1 #include "ImageInterpolatorSource.h"
3 #include <cpPlugins/Interface/Image.h>
4 #include <itkLinearInterpolateImageFunction.h>
5 #include <itkNearestNeighborInterpolateImageFunction.h>
7 // -------------------------------------------------------------------------
8 cpPlugins::BasicFilters::ImageInterpolatorSource::
9 ImageInterpolatorSource( )
12 this->_AddInput( "ReferenceImage", true );
13 this->_AddOutput< cpPlugins::Interface::DataObject >( "Output" );
15 std::vector< std::string > type_choices;
16 type_choices.push_back( "Linear" );
17 type_choices.push_back( "NearestNeighbor" );
18 this->m_Parameters->ConfigureAsChoices( "InterpolationType", type_choices );
19 this->m_Parameters->SetSelectedChoice( "InterpolationType", "Linear" );
21 std::vector< std::string > scalar_choices;
22 scalar_choices.push_back( "float" );
23 scalar_choices.push_back( "double" );
24 this->m_Parameters->ConfigureAsChoices( "ScalarType", scalar_choices );
25 this->m_Parameters->SetSelectedChoice( "ScalarType", "float" );
28 // -------------------------------------------------------------------------
29 cpPlugins::BasicFilters::ImageInterpolatorSource::
30 ~ImageInterpolatorSource( )
34 // -------------------------------------------------------------------------
35 std::string cpPlugins::BasicFilters::ImageInterpolatorSource::
39 this->GetInputData< cpPlugins::Interface::Image >( "ReferenceImage" );
41 return( "ImageInterpolatorSource: No input image." );
43 itk::DataObject* itk_image = NULL;
45 cpPlugins_Image_Demangle_AllScalarTypes( 2, image, itk_image, r, _GD0 );
46 else cpPlugins_Image_Demangle_AllScalarTypes( 3, image, itk_image, r, _GD0 );
47 else cpPlugins_Image_Demangle_AllScalarTypes( 4, image, itk_image, r, _GD0 );
48 else r = "ImageInterpolatorSource: Input image type not supported.";
52 // -------------------------------------------------------------------------
54 std::string cpPlugins::BasicFilters::ImageInterpolatorSource::
55 _GD0( itk::DataObject* dobj )
57 std::string int_choice =
58 this->m_Parameters->GetSelectedChoice( "InterpolationType" );
59 std::string scalar_choice =
60 this->m_Parameters->GetSelectedChoice( "ScalarType" );
62 if( int_choice == "Linear" )
64 if( scalar_choice == "float" )
66 this->_GD1< itk::LinearInterpolateImageFunction< I, float > >( )
68 else if( scalar_choice == "double" )
70 this->_GD1< itk::LinearInterpolateImageFunction< I, double > >( )
73 return( "ImageInterpolatorSource: Invalid scalar type" );
75 else if( int_choice == "NearestNeighbor" )
77 if( scalar_choice == "float" )
79 this->_GD1< itk::NearestNeighborInterpolateImageFunction< I, float > >( )
81 else if( scalar_choice == "double" )
83 this->_GD1< itk::NearestNeighborInterpolateImageFunction< I, double > >( )
86 return( "ImageInterpolatorSource: Invalid scalar type" );
89 return( "ImageInterpolatorSource: Invalid interpolator" );
92 // -------------------------------------------------------------------------
94 std::string cpPlugins::BasicFilters::ImageInterpolatorSource::
98 this->GetOutputData< cpPlugins::Interface::DataObject >( "Output" );
99 if( out->GetITK< T >( ) == NULL )
101 typename T::Pointer res = T::New( );
102 out->SetITK( res.GetPointer( ) );