]> Creatis software - cpPlugins.git/blob - plugins/ImageGradientFilters/MultiScaleGaussianImageFilter.cxx
...
[cpPlugins.git] / plugins / ImageGradientFilters / MultiScaleGaussianImageFilter.cxx
1 #include <ImageGradientFilters/MultiScaleGaussianImageFilter.h>
2 #include <cpInstances/Image.h>
3
4 #include <cpExtensions/Algorithms/MultiScaleGaussianImageFilter.h>
5
6 // -------------------------------------------------------------------------
7 cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter::
8 MultiScaleGaussianImageFilter( )
9   : Superclass( )
10 {
11   this->_ConfigureInput< cpInstances::Image >( "Input", true, false );
12   this->_ConfigureOutput< cpInstances::Image >( "Output" );
13
14   this->m_Parameters.ConfigureAsRealList( "Sigmas" );
15
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" );
21 }
22
23 // -------------------------------------------------------------------------
24 cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter::
25 ~MultiScaleGaussianImageFilter( )
26 {
27 }
28
29 // -------------------------------------------------------------------------
30 void cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter::
31 _GenerateData( )
32 {
33   auto o = this->GetInputData( "Input" );
34   cpPlugins_Demangle_Image_ScalarPixels_AllDims_1( o, _GD0 )
35     this->_Error( "Invalid input image." );
36 }
37
38 // -------------------------------------------------------------------------
39 template< class _TImage >
40 void cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter::
41 _GD0( _TImage* image )
42 {
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." );
47 }
48
49 // -------------------------------------------------------------------------
50 template< class _TInputImage, class _TScalar >
51 void cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter::
52 _GD1( _TInputImage* image )
53 {
54   typedef itk::CovariantVector< _TScalar, _TInputImage::ImageDimension > _TGradient;
55   typedef itk::Image< _TGradient, _TInputImage::ImageDimension > _TOutputImage;
56   typedef
57     cpExtensions::Algorithms::MultiScaleGaussianImageFilter< _TInputImage, _TOutputImage >
58     _TFilter;
59
60   auto sigmas = this->m_Parameters.GetRealList( "Sigmas" );
61   if( sigmas.size( ) == 0 )
62     this->_Error( "No given sigmas." );
63
64   // Configure filter
65   _TFilter* filter = this->_CreateITK< _TFilter >( );
66   filter->SetInput( image );
67   for( auto sIt = sigmas.begin( ); sIt != sigmas.end( ); ++sIt )
68     filter->AddScale( *sIt );
69   filter->Update( );
70
71   // Connect output
72   this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
73 }
74
75 // eof - $RCSfile$