1 #include <ImageGradientFilters/MultiScaleGaussianImageFilter.h>
2 #include <cpInstances/Image.h>
4 #include <cpExtensions/Algorithms/MultiScaleGaussianImageFilter.h>
6 // -------------------------------------------------------------------------
7 cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter::
8 MultiScaleGaussianImageFilter( )
11 this->_ConfigureInput< cpInstances::Image >( "Input", true, false );
12 this->_ConfigureOutput< cpInstances::Image >( "Output" );
14 this->m_Parameters.ConfigureAsRealList( "Sigmas" );
16 std::vector< std::string > choices;
17 choices.push_back( "float" );
18 choices.push_back( "double" );
19 this->m_Parameters.ConfigureAsChoices( "ScalarType", choices );
20 this->m_Parameters.SetSelectedChoice( "ScalarType", "float" );
23 // -------------------------------------------------------------------------
24 cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter::
25 ~MultiScaleGaussianImageFilter( )
29 // -------------------------------------------------------------------------
30 void cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter::
33 auto o = this->GetInputData( "Input" );
34 cpPlugins_Demangle_Image_ScalarPixels_AllDims_1( o, _GD0 )
35 this->_Error( "Invalid input image." );
38 // -------------------------------------------------------------------------
39 template< class _TImage >
40 void cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter::
41 _GD0( _TImage* image )
43 auto choice = this->m_Parameters.GetSelectedChoice( "ScalarType" );
44 if( choice == "float" ) this->_GD1< _TImage, float >( image );
45 else if( choice == "double" ) this->_GD1< _TImage, double >( image );
46 else this->_Error( "Invalid scalar type." );
49 // -------------------------------------------------------------------------
50 template< class _TInputImage, class _TScalar >
51 void cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter::
52 _GD1( _TInputImage* image )
54 typedef itk::CovariantVector< _TScalar, _TInputImage::ImageDimension > _TGradient;
55 typedef itk::Image< _TGradient, _TInputImage::ImageDimension > _TOutputImage;
57 cpExtensions::Algorithms::MultiScaleGaussianImageFilter< _TInputImage, _TOutputImage >
60 auto sigmas = this->m_Parameters.GetRealList( "Sigmas" );
61 if( sigmas.size( ) == 0 )
62 this->_Error( "No given sigmas." );
65 _TFilter* filter = this->_CreateITK< _TFilter >( );
66 filter->SetInput( image );
67 for( auto sIt = sigmas.begin( ); sIt != sigmas.end( ); ++sIt )
68 filter->AddScale( *sIt );
72 this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );