#include #include #include #include // ------------------------------------------------------------------------- cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter:: MultiScaleGaussianImageFilter( ) : Superclass( ) { this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input", true, false ); this->_ConfigureOutput< cpPlugins::DataObjects::Image >( "Output" ); this->m_Parameters.ConfigureAsRealList( "Sigmas" ); std::vector< std::string > choices; choices.push_back( "float" ); choices.push_back( "double" ); this->m_Parameters.ConfigureAsChoices( "ScalarType", choices ); this->m_Parameters.SetSelectedChoice( "ScalarType", "float" ); } // ------------------------------------------------------------------------- cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter:: ~MultiScaleGaussianImageFilter( ) { } // ------------------------------------------------------------------------- void cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter:: _GenerateData( ) { auto o = this->GetInputData( "Input" ); cpPlugins_Demangle_Image_ScalarPixels_AllDims_1( o, _GD0 ) this->_Error( "Invalid input image." ); } // ------------------------------------------------------------------------- template< class _TImage > void cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter:: _GD0( _TImage* image ) { auto choice = this->m_Parameters.GetSelectedChoice( "ScalarType" ); if( choice == "float" ) this->_GD1< _TImage, float >( image ); else if( choice == "double" ) this->_GD1< _TImage, double >( image ); else this->_Error( "Invalid scalar type." ); } // ------------------------------------------------------------------------- template< class _TInputImage, class _TScalar > void cpPluginsImageGradientFilters::MultiScaleGaussianImageFilter:: _GD1( _TInputImage* image ) { typedef itk::CovariantVector< _TScalar, _TInputImage::ImageDimension > _TGradient; typedef itk::Image< _TGradient, _TInputImage::ImageDimension > _TOutputImage; typedef cpExtensions::Algorithms::MultiScaleGaussianImageFilter< _TInputImage, _TOutputImage > _TFilter; auto sigmas = this->m_Parameters.GetRealList( "Sigmas" ); if( sigmas.size( ) == 0 ) this->_Error( "No given sigmas." ); // Configure filter _TFilter* filter = this->_CreateITK< _TFilter >( ); filter->SetInput( image ); for( auto sIt = sigmas.begin( ); sIt != sigmas.end( ); ++sIt ) filter->AddScale( *sIt ); filter->Update( ); // Connect output this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) ); } // eof - $RCSfile$