#include #include #include // ------------------------------------------------------------------------- cpPluginsImageFilters::MultiScaleGaussianImageFilter:: MultiScaleGaussianImageFilter( ) : Superclass( ) { this->_AddInput( "Input" ); this->_AddOutput< cpPlugins::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" ); } // ------------------------------------------------------------------------- cpPluginsImageFilters::MultiScaleGaussianImageFilter:: ~MultiScaleGaussianImageFilter( ) { } // ------------------------------------------------------------------------- void cpPluginsImageFilters::MultiScaleGaussianImageFilter:: _GenerateData( ) { auto image = this->GetInputData< itk::DataObject >( "Input" ); cpPlugins_Image_Demangle_Pixel_AllScalars ( _GD0, image, 2 ); else cpPlugins_Image_Demangle_Pixel_AllScalars( _GD0, image, 3 ); else this->_Error( "No valid input image." ); } // ------------------------------------------------------------------------- template< class _TImage > void cpPluginsImageFilters::MultiScaleGaussianImageFilter:: _GD0( _TImage* image ) { if( image != NULL ) { 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( "No valid scalar type." ); } else this->_Error( "No valid input image." ); } // ------------------------------------------------------------------------- template< class _TImage, class _TScalar > void cpPluginsImageFilters::MultiScaleGaussianImageFilter:: _GD1( _TImage* image ) { typedef itk::CovariantVector< _TScalar, _TImage::ImageDimension > _TVector; typedef itk::Image< _TVector, _TImage::ImageDimension > _TGradient; typedef cpExtensions::Algorithms::MultiScaleGaussianImageFilter< _TImage, _TGradient > _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$