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