]> Creatis software - cpPlugins.git/blob - plugins/ITKSeparableFilters/SmoothingRecursiveGaussianImageFilter.cxx
...
[cpPlugins.git] / plugins / ITKSeparableFilters / SmoothingRecursiveGaussianImageFilter.cxx
1 #include <ITKSeparableFilters/SmoothingRecursiveGaussianImageFilter.h>
2 #include <cpInstances/Image.h>
3
4 #include <itkSmoothingRecursiveGaussianImageFilter.h>
5
6 // -------------------------------------------------------------------------
7 cpPluginsITKSeparableFilters::SmoothingRecursiveGaussianImageFilter::
8 SmoothingRecursiveGaussianImageFilter( )
9   : Superclass( )
10 {
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" );
15 }
16
17 // -------------------------------------------------------------------------
18 cpPluginsITKSeparableFilters::SmoothingRecursiveGaussianImageFilter::
19 ~SmoothingRecursiveGaussianImageFilter( )
20 {
21 }
22
23 // -------------------------------------------------------------------------
24 void cpPluginsITKSeparableFilters::SmoothingRecursiveGaussianImageFilter::
25 _GenerateData( )
26 {
27   auto o = this->GetInputData( "Input" );
28   cpPlugins_Demangle_Image_ScalarPixels_AllDims_1( o, _GD0 )
29     this->_Error( "Invalid input image dimension." );
30 }
31
32 // -------------------------------------------------------------------------
33 template< class _TImage >
34 void cpPluginsITKSeparableFilters::SmoothingRecursiveGaussianImageFilter::
35 _GD0( _TImage* image )
36 {
37   std::string out_res =
38     this->m_Parameters.GetSelectedChoice( "OutputResolution" );
39 #ifdef cpPlugins_CONFIG_REAL_TYPES_float
40   if( out_res == "float" ) this->_GD1< _TImage, float >( image );
41 #endif // cpPlugins_CONFIG_REAL_TYPES_float
42 #ifdef cpPlugins_CONFIG_REAL_TYPES_double
43   if( out_res == "double" ) this->_GD1< _TImage, double >( image );
44 #endif // cpPlugins_CONFIG_REAL_TYPES_double
45 }
46
47 // -------------------------------------------------------------------------
48 template< class _TImage, class _TScalar >
49 void cpPluginsITKSeparableFilters::SmoothingRecursiveGaussianImageFilter::
50 _GD1( _TImage* image )
51 {
52   typedef itk::Image< _TScalar, _TImage::ImageDimension > _TOutput;
53   typedef
54     itk::SmoothingRecursiveGaussianImageFilter< _TImage, _TOutput >
55     _TFilter;
56   typedef typename _TFilter::SigmaArrayType _TSigmas;
57
58   auto param_sigmas = this->m_Parameters.GetRealList( "SigmaArray" );
59   unsigned int dim =
60     ( param_sigmas.size( ) < _TImage::ImageDimension )? 
61     param_sigmas.size( ):
62     _TImage::ImageDimension;
63   _TSigmas sigmas;
64   sigmas.Fill( param_sigmas[ dim - 1 ] );
65   for( unsigned d = 0; d < dim; ++d )
66     sigmas[ d ] = param_sigmas[ d ];
67
68   // Configure filter
69   _TFilter* filter = this->_CreateITK< _TFilter >( );
70   filter->SetInput( image );
71   filter->SetSigmaArray( sigmas );
72   filter->Update( );
73
74   // Connect output
75   this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
76 }
77
78 // eof - $RCSfile$