]> Creatis software - cpPlugins.git/blobdiff - plugins/AnisotropicDiffusion/CurvatureAnisotropicDiffusionImageFilter.cxx
...
[cpPlugins.git] / plugins / AnisotropicDiffusion / CurvatureAnisotropicDiffusionImageFilter.cxx
index 41e0c9c25afe979bf9b6564bc75ffc4ce94edf42..ad82dc8980475f74b09d7b29b30a81e694c62d69 100644 (file)
@@ -1,35 +1,30 @@
-#include <plugins/AnisotropicDiffusion/CurvatureAnisotropicDiffusionImageFilter.h>
+#include <AnisotropicDiffusion/CurvatureAnisotropicDiffusionImageFilter.h>
 #include <cpPlugins/DataObjects/Image.h>
+#include <cpPlugins/DataObjects/Image_Demanglers.h>
 
 #include <itkCurvatureAnisotropicDiffusionImageFilter.h>
-#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 );
 }
 
 // -------------------------------------------------------------------------
@@ -43,9 +38,8 @@ void cpPluginsAnisotropicDiffusion::CurvatureAnisotropicDiffusionImageFilter::
 _GenerateData( )
 {
   auto o = this->GetInputData( "Input" );
-  cpPlugins_Demangle_ImageScalars( o, _GD0, 2 );
-  else cpPlugins_Demangle_ImageScalars( o, _GD0, 3 );
-  else this->_Error( "No valid input image." );
+  cpPlugins_Demangle_Image_ScalarPixels_AllDims_1( o, _GD0 )
+    this->_Error( "No valid input image." );
 }
 
 // -------------------------------------------------------------------------
@@ -53,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 >( );