#include "RGBImageToOtherChannelsFilter.h" #include #include #include #include #include // ------------------------------------------------------------------------- cpPlugins::BasicFilters::RGBImageToOtherChannelsFilter:: RGBImageToOtherChannelsFilter( ) : Superclass( ) { typedef cpPlugins::Interface::Parameters TParameters; this->m_ClassName = "cpPlugins::BasicFilters::RGBImageToOtherChannelsFilter"; this->m_ClassCategory = "ImageToImageFilter"; this->SetNumberOfInputs( 1 ); this->SetNumberOfOutputs( 1 ); this->_MakeOutput< cpPlugins::Interface::Image >( 0 ); this->m_DefaultParameters.Configure( TParameters::String, "OutChannel" ); this->m_Parameters = this->m_DefaultParameters; } // ------------------------------------------------------------------------- cpPlugins::BasicFilters::RGBImageToOtherChannelsFilter:: ~RGBImageToOtherChannelsFilter( ) { } // ------------------------------------------------------------------------- #define cpPlugins_Plugins_RGBImageToOtherChannelsFilter( P, D, I, O, r, f ) \ cpPlugins_Image_Input_Demangle( P< char >, D, I, O, r, f ); \ else cpPlugins_Image_Input_Demangle( P< short >, D, I, O, r, f ); \ else cpPlugins_Image_Input_Demangle( P< int >, D, I, O, r, f ); \ else cpPlugins_Image_Input_Demangle( P< long >, D, I, O, r, f ); \ else cpPlugins_Image_Input_Demangle( \ P< unsigned char >, D, I, O, r, f \ ); \ else cpPlugins_Image_Input_Demangle( \ P< unsigned short >, D, I, O, r, f \ ); \ else cpPlugins_Image_Input_Demangle( \ P< unsigned int >, D, I, O, r, f \ ); \ else cpPlugins_Image_Input_Demangle( \ P< unsigned long >, D, I, O, r, f \ ) // ------------------------------------------------------------------------- std::string cpPlugins::BasicFilters::RGBImageToOtherChannelsFilter:: _GenerateData( ) { cpPlugins::Interface::Image* image = this->GetInput< cpPlugins::Interface::Image >( 0 ); if( image == NULL ) return( "RGBImageToOtherChannelsFilter: No input image." ); itk::DataObject* itk_image = NULL; std::string r = ""; cpPlugins_Plugins_RGBImageToOtherChannelsFilter( itk::RGBPixel, 2, image, itk_image, r, _DemangleOutput ); else cpPlugins_Plugins_RGBImageToOtherChannelsFilter( itk::RGBPixel, 3, image, itk_image, r, _DemangleOutput ); else cpPlugins_Plugins_RGBImageToOtherChannelsFilter( itk::RGBPixel, 4, image, itk_image, r, _DemangleOutput ); else r = "RGBImageToOtherChannelsFilter: Input image type not supported."; return( r ); } // ------------------------------------------------------------------------- template< class I > std::string cpPlugins::BasicFilters::RGBImageToOtherChannelsFilter:: _DemangleOutput( itk::DataObject* image ) { typedef typename I::PixelType _P; std::string outc = this->m_Parameters.GetValueAsString( "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 = dynamic_cast< _F* >( this->m_RealProcessObject.GetPointer( ) ); if( filter == NULL ) { this->m_RealProcessObject = _F::New( ); filter = dynamic_cast< _F* >( this->m_RealProcessObject.GetPointer( ) ); } // fi filter->SetInput( dynamic_cast< I* >( image ) ); filter->Update( ); // Connect output cpPlugins::Interface::Image* out = this->GetOutput< cpPlugins::Interface::Image >( 0 ); if( out != NULL ) { out->SetITKImage< _O >( filter->GetOutput( ) ); return( "" ); } else return( "RGBImageToOtherChannelsFilter: output not correctly created." ); return( "" ); } // eof - $RCSfile$