#include #include #include // ------------------------------------------------------------------------- cpPluginsITKAnisotropicSmoothing::CurvatureAnisotropicDiffusionImageFilter:: CurvatureAnisotropicDiffusionImageFilter( ) : Superclass( ) { typedef cpInstances::Image _TImage; this->_ConfigureInput< _TImage >( "Input", true, false ); this->_ConfigureOutput< _TImage >( "Output" ); 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 ); this->m_Parameters.ConfigureAsRealTypesChoices( "OutputResolution" ); } // ------------------------------------------------------------------------- cpPluginsITKAnisotropicSmoothing::CurvatureAnisotropicDiffusionImageFilter:: ~CurvatureAnisotropicDiffusionImageFilter( ) { } // ------------------------------------------------------------------------- void cpPluginsITKAnisotropicSmoothing::CurvatureAnisotropicDiffusionImageFilter:: _GenerateData( ) { auto o = this->GetInputData( "Input" ); cpPlugins_Demangle_Image_ScalarPixels_AllDims_1( o, _GD0 ) this->_Error( "No valid input image." ); } // ------------------------------------------------------------------------- template< class _TImage > void cpPluginsITKAnisotropicSmoothing::CurvatureAnisotropicDiffusionImageFilter:: _GD0( _TImage* image ) { std::string out_res = this->m_Parameters.GetSelectedChoice( "OutputResolution" ); if( out_res == "float" ) this->_GD1< _TImage, float >( image ); if( out_res == "double" ) this->_GD1< _TImage, double >( image ); } // ------------------------------------------------------------------------- template< class _TImage, class _TScalar > void cpPluginsITKAnisotropicSmoothing::CurvatureAnisotropicDiffusionImageFilter:: _GD1( _TImage* image ) { typedef itk::Image< _TScalar, _TImage::ImageDimension > _TOutImage; typedef itk::CurvatureAnisotropicDiffusionImageFilter< _TImage, _TOutImage > _TFilter; // Configure filter _TFilter* filter = this->_CreateITK< _TFilter >( ); filter->SetInput( image ); filter->SetNumberOfIterations( this->m_Parameters.GetUint( "NumberOfIterations" ) ); filter->SetUseImageSpacing( this->m_Parameters.GetBool( "UseImageSpacing" ) ); filter->SetConductanceParameter( this->m_Parameters.GetReal( "ConductanceParameter" ) ); filter->SetTimeStep( this->m_Parameters.GetReal( "TimeStep" ) ); filter->Update( ); // Connect output this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) ); } // eof - $RCSfile$