]> 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   if( out_res == "float" ) this->_GD1< _TImage, float >( image );
40   if( out_res == "double" ) this->_GD1< _TImage, double >( image );
41 }
42
43 // -------------------------------------------------------------------------
44 template< class _TImage, class _TScalar >
45 void cpPluginsITKSeparableFilters::SmoothingRecursiveGaussianImageFilter::
46 _GD1( _TImage* image )
47 {
48   typedef itk::Image< _TScalar, _TImage::ImageDimension > _TOutput;
49   typedef
50     itk::SmoothingRecursiveGaussianImageFilter< _TImage, _TOutput >
51     _TFilter;
52   typedef typename _TFilter::SigmaArrayType _TSigmas;
53
54   auto param_sigmas = this->m_Parameters.GetRealList( "SigmaArray" );
55   unsigned int dim =
56     ( param_sigmas.size( ) < _TImage::ImageDimension )? 
57     param_sigmas.size( ):
58     _TImage::ImageDimension;
59   _TSigmas sigmas;
60   sigmas.Fill( param_sigmas[ dim - 1 ] );
61   for( unsigned d = 0; d < dim; ++d )
62     sigmas[ d ] = param_sigmas[ d ];
63
64   // Configure filter
65   _TFilter* filter = this->_CreateITK< _TFilter >( );
66   filter->SetInput( image );
67   filter->SetSigmaArray( sigmas );
68   filter->Update( );
69
70   // Connect output
71   this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
72 }
73
74 // eof - $RCSfile$