1 #include <ITKSeparableFilters/SmoothingRecursiveGaussianImageFilter.h>
2 #include <cpInstances/Image.h>
4 #include <itkSmoothingRecursiveGaussianImageFilter.h>
6 // -------------------------------------------------------------------------
7 cpPluginsITKSeparableFilters::SmoothingRecursiveGaussianImageFilter::
8 SmoothingRecursiveGaussianImageFilter( )
11 this->_ConfigureInput< cpInstances::Image >( "Input", true, false );
12 this->_ConfigureOutput< cpInstances::Image >( "Output" );
13 this->m_Parameters.ConfigureAsRealList( "SigmaArray" );
14 this->m_Parameters.ConfigureAsRealTypesChoices( "OutputResolution" );
17 // -------------------------------------------------------------------------
18 cpPluginsITKSeparableFilters::SmoothingRecursiveGaussianImageFilter::
19 ~SmoothingRecursiveGaussianImageFilter( )
23 // -------------------------------------------------------------------------
24 void cpPluginsITKSeparableFilters::SmoothingRecursiveGaussianImageFilter::
27 auto o = this->GetInputData( "Input" );
28 cpPlugins_Demangle_Image_ScalarPixels_AllDims_1( o, _GD0 )
29 this->_Error( "Invalid input image dimension." );
32 // -------------------------------------------------------------------------
33 template< class _TImage >
34 void cpPluginsITKSeparableFilters::SmoothingRecursiveGaussianImageFilter::
35 _GD0( _TImage* image )
38 this->m_Parameters.GetSelectedChoice( "OutputResolution" );
39 if( out_res == "float" ) this->_GD1< _TImage, float >( image );
40 if( out_res == "double" ) this->_GD1< _TImage, double >( image );
43 // -------------------------------------------------------------------------
44 template< class _TImage, class _TScalar >
45 void cpPluginsITKSeparableFilters::SmoothingRecursiveGaussianImageFilter::
46 _GD1( _TImage* image )
48 typedef itk::Image< _TScalar, _TImage::ImageDimension > _TOutput;
50 itk::SmoothingRecursiveGaussianImageFilter< _TImage, _TOutput >
52 typedef typename _TFilter::SigmaArrayType _TSigmas;
54 auto param_sigmas = this->m_Parameters.GetRealList( "SigmaArray" );
56 ( param_sigmas.size( ) < _TImage::ImageDimension )?
58 _TImage::ImageDimension;
60 sigmas.Fill( param_sigmas[ dim - 1 ] );
61 for( unsigned d = 0; d < dim; ++d )
62 sigmas[ d ] = param_sigmas[ d ];
65 _TFilter* filter = this->_CreateITK< _TFilter >( );
66 filter->SetInput( image );
67 filter->SetSigmaArray( sigmas );
71 this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );