#include "RGBImageToOtherChannelsFilter.h" #include #include #include #include #include // ------------------------------------------------------------------------- cpPlugins::BasicFilters::RGBImageToOtherChannelsFilter:: RGBImageToOtherChannelsFilter( ) : Superclass( ) { typedef cpPlugins::Interface::Parameters TParameters; this->_AddInput( "Input" ); this->_MakeOutput< cpPlugins::Interface::Image >( "Output" ); std::vector< std::string > choices; choices.push_back( "HSV" ); choices.push_back( "YPbPr" ); this->m_Parameters->ConfigureAsChoices( "OutChannel", choices ); } // ------------------------------------------------------------------------- cpPlugins::BasicFilters::RGBImageToOtherChannelsFilter:: ~RGBImageToOtherChannelsFilter( ) { } // ------------------------------------------------------------------------- std::string cpPlugins::BasicFilters::RGBImageToOtherChannelsFilter:: _GenerateData( ) { cpPlugins::Interface::Image* image = this->GetInput< cpPlugins::Interface::Image >( "Input" ); if( image == NULL ) return( "RGBImageToOtherChannelsFilter: No input image." ); itk::DataObject* itk_image = NULL; std::string r = ""; cpPlugins_Image_Demangle_AllRGBTypes( 2, image, itk_image, r, _GD0 ); else cpPlugins_Image_Demangle_AllRGBTypes( 3, image, itk_image, r, _GD0 ); else cpPlugins_Image_Demangle_AllRGBTypes( 4, image, itk_image, r, _GD0 ); else r = "RGBImageToOtherChannelsFilter: Input image type not supported."; return( r ); } // ------------------------------------------------------------------------- template< class I > std::string cpPlugins::BasicFilters::RGBImageToOtherChannelsFilter:: _GD0( itk::DataObject* image ) { typedef typename I::PixelType _P; std::string outc = this->m_Parameters->GetSelectedChoice( "OutChannel" ); std::string r = ""; using namespace cpExtensions::Algorithms; if( outc == "HSV" ) r = this->_RealGD< I, RGBToHSVFunction< _P > >( image ); else if( outc == "YPbPr" ) r = this->_RealGD< I, RGBToYPbPrFunction< _P > >( image ); else if( outc == "Copy" ) r = this->_RealGD< I, RGBExtractFunction< _P > >( image ); else r = std::string( "RGBImageToOtherChannelsFilter: Conversor not available: " ) + outc; return( r ); } // ------------------------------------------------------------------------- template< class I, class C > std::string cpPlugins::BasicFilters::RGBImageToOtherChannelsFilter:: _RealGD( itk::DataObject* image ) { typedef itk::Image< itk::RGBPixel< double >, I::ImageDimension > _O; typedef cpExtensions::Algorithms::RGBImageToOtherChannelsFilter< I, _O, C > _F; // Configure filter _F* filter = this->_CreateITK< _F >( ); filter->SetInput( dynamic_cast< I* >( image ) ); filter->Update( ); // Connect output cpPlugins::Interface::Image* out = this->GetOutput< cpPlugins::Interface::Image >( "Output" ); if( out != NULL ) { out->SetITK< _O >( filter->GetOutput( ) ); return( "" ); } else return( "RGBImageToOtherChannelsFilter: output not correctly created." ); return( "" ); } // eof - $RCSfile$