]> Creatis software - cpPlugins.git/blobdiff - plugins/AnisotropicDiffusion/CurvatureAnisotropicDiffusionImageFilter.cxx
...
[cpPlugins.git] / plugins / AnisotropicDiffusion / CurvatureAnisotropicDiffusionImageFilter.cxx
index d2f2aea8fbf6e0d84370c7f7e824abb8f8bb2576..ad82dc8980475f74b09d7b29b30a81e694c62d69 100644 (file)
@@ -3,36 +3,28 @@
 #include <cpPlugins/DataObjects/Image_Demanglers.h>
 
 #include <itkCurvatureAnisotropicDiffusionImageFilter.h>
-/* TODO
-   #include <itkCurvatureNDAnisotropicDiffusionFunction.hxx>
-   #include <itkFiniteDifferenceFunction.hxx>
-   #include <itkNeighborhoodInnerProduct.hxx>
-   #include <itkNeighborhoodOperator.hxx>
-   #include <itkFiniteDifferenceImageFilter.hxx>
-   #include <itkAnisotropicDiffusionImageFilter.hxx>
-   #include <itkDenseFiniteDifferenceImageFilter.hxx>
-   #include <itkNeighborhoodAlgorithm.hxx>
-   #include <itkDerivativeOperator.hxx>
-   #include <itkScalarAnisotropicDiffusionFunction.hxx>
-*/
 
 // -------------------------------------------------------------------------
 cpPluginsAnisotropicDiffusion::CurvatureAnisotropicDiffusionImageFilter::
 CurvatureAnisotropicDiffusionImageFilter( )
   : Superclass( )
 {
-  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input", true, false );
-  this->_ConfigureOutput< cpPlugins::DataObjects::Image >( "Output" );
+  typedef cpPlugins::DataObjects::Image _TImage;
+  this->_ConfigureInput< _TImage >( "Input", true, false );
+  this->_ConfigureOutput< _TImage >( "Output" );
 
-  this->m_Parameters.ConfigureAsUint( "NumberOfIterations" );
-  this->m_Parameters.ConfigureAsBool( "UseImageSpacing" );
-  this->m_Parameters.ConfigureAsReal( "ConductanceParameter" );
-  this->m_Parameters.ConfigureAsReal( "TimeStep" );
-
-  this->m_Parameters.SetUint( "NumberOfIterations", 5 );
-  this->m_Parameters.SetBool( "UseImageSpacing", false );
-  this->m_Parameters.SetReal( "ConductanceParameter", 3 );
-  this->m_Parameters.SetReal( "TimeStep", 0.0625 );
+  this->m_Parameters.ConfigureAsUint( "NumberOfIterations", 5 );
+  this->m_Parameters.ConfigureAsBool( "UseImageSpacing", false );
+  this->m_Parameters.ConfigureAsReal( "ConductanceParameter", 3 );
+  this->m_Parameters.ConfigureAsReal( "TimeStep", 0.0625 );
+  std::vector< std::string > choices;
+#ifdef cpPlugins_CONFIG_REAL_TYPES_float
+  choices.push_back( "float" );
+#endif // cpPlugins_CONFIG_REAL_TYPES_float
+#ifdef cpPlugins_CONFIG_REAL_TYPES_double
+  choices.push_back( "double" );
+#endif // cpPlugins_CONFIG_REAL_TYPES_double
+  this->m_Parameters.ConfigureAsChoices( "OutputResolution", choices );
 }
 
 // -------------------------------------------------------------------------
@@ -46,7 +38,7 @@ void cpPluginsAnisotropicDiffusion::CurvatureAnisotropicDiffusionImageFilter::
 _GenerateData( )
 {
   auto o = this->GetInputData( "Input" );
-  cpPlugins_Demangle_Image_ScalarPixels_VisualDims_1( o, _GD0 )
+  cpPlugins_Demangle_Image_ScalarPixels_AllDims_1( o, _GD0 )
     this->_Error( "No valid input image." );
 }
 
@@ -55,7 +47,25 @@ template< class _TImage >
 void cpPluginsAnisotropicDiffusion::CurvatureAnisotropicDiffusionImageFilter::
 _GD0( _TImage* image )
 {
-  typedef itk::CurvatureAnisotropicDiffusionImageFilter< _TImage, _TImage > _TFilter;
+  std::string out_res =
+    this->m_Parameters.GetSelectedChoice( "OutputResolution" );
+#ifdef cpPlugins_CONFIG_REAL_TYPES_float
+  if( out_res == "float" ) this->_GD1< _TImage, float >( image );
+#endif // cpPlugins_CONFIG_REAL_TYPES_float
+#ifdef cpPlugins_CONFIG_REAL_TYPES_double
+  if( out_res == "double" ) this->_GD1< _TImage, double >( image );
+#endif // cpPlugins_CONFIG_REAL_TYPES_double
+}
+
+// -------------------------------------------------------------------------
+template< class _TImage, class _TScalar >
+void cpPluginsAnisotropicDiffusion::CurvatureAnisotropicDiffusionImageFilter::
+_GD1( _TImage* image )
+{
+  typedef itk::Image< _TScalar, _TImage::ImageDimension > _TOutImage;
+  typedef
+    itk::CurvatureAnisotropicDiffusionImageFilter< _TImage, _TOutImage >
+    _TFilter;
 
   // Configure filter
   _TFilter* filter = this->_CreateITK< _TFilter >( );