#include #include #include #include #define ITK_MANUAL_INSTANTIATION #include #include // ------------------------------------------------------------------------- #define cpPlugins_RGB2HSV_Dimension( r, d, o, f ) \ if( dynamic_cast< itk::ImageBase< d >* >( o ) != NULL ) \ r = this->f< d >( ) // ------------------------------------------------------------------------- #define cpPlugins_RGB2HSV_RGB( r, p, d, o, f ) \ if( \ dynamic_cast< itk::Image< itk::RGBPixel< p >, d >* >( o ) != NULL \ ) \ r = this->f< p, d >( ) // ------------------------------------------------------------------------- std::string cpPlugins::Plugins::RGBImageToHSVChannelsFilter:: GetClassName( ) const { return( "cpPlugins::Plugins::RGBImageToHSVChannelsFilter" ); } // ------------------------------------------------------------------------- cpPlugins::Plugins::RGBImageToHSVChannelsFilter:: RGBImageToHSVChannelsFilter( ) : Superclass( ) { this->SetNumberOfInputs( 1 ); this->SetNumberOfOutputs( 3 ); this->_MakeOutput< cpPlugins::Interface::Image >( 0 ); this->_MakeOutput< cpPlugins::Interface::Image >( 1 ); this->_MakeOutput< cpPlugins::Interface::Image >( 2 ); this->m_DefaultParameters.Clear( ); } // ------------------------------------------------------------------------- cpPlugins::Plugins::RGBImageToHSVChannelsFilter:: ~RGBImageToHSVChannelsFilter( ) { } // ------------------------------------------------------------------------- std::string cpPlugins::Plugins::RGBImageToHSVChannelsFilter:: _GenerateData( ) { itk::DataObject* o = this->_GetInput( 0 ); std::string r = "cpPlugins::Plugins::RGBImageToHSVChannelsFilter: itk::Image dimension not supported."; cpPlugins_RGB2HSV_Dimension( r, 1, o, _GD0 ); else cpPlugins_RGB2HSV_Dimension( r, 2, o, _GD0 ); else cpPlugins_RGB2HSV_Dimension( r, 3, o, _GD0 ); else cpPlugins_RGB2HSV_Dimension( r, 4, o, _GD0 ); return( r ); } // ------------------------------------------------------------------------- template< unsigned int D > std::string cpPlugins::Plugins::RGBImageToHSVChannelsFilter:: _GD0( ) { itk::ImageBase< D >* i = dynamic_cast< itk::ImageBase< D >* >( this->_GetInput( 0 ) ); std::string r = "cpPlugins::Plugins::RGBImageToHSVChannelsFilter: itk::Image pixel type not supported"; cpPlugins_RGB2HSV_RGB( r, char, D, i, _GD1 ); else cpPlugins_RGB2HSV_RGB( r, short, D, i, _GD1 ); else cpPlugins_RGB2HSV_RGB( r, int, D, i, _GD1 ); else cpPlugins_RGB2HSV_RGB( r, long, D, i, _GD1 ); else cpPlugins_RGB2HSV_RGB( r, unsigned char, D, i, _GD1 ); else cpPlugins_RGB2HSV_RGB( r, unsigned short, D, i, _GD1 ); else cpPlugins_RGB2HSV_RGB( r, unsigned int, D, i, _GD1 ); else cpPlugins_RGB2HSV_RGB( r, unsigned long, D, i, _GD1 ); else cpPlugins_RGB2HSV_RGB( r, float, D, i, _GD1 ); else cpPlugins_RGB2HSV_RGB( r, double, D, i, _GD1 ); return( r ); } // ------------------------------------------------------------------------- template< class P, unsigned int D > std::string cpPlugins::Plugins::RGBImageToHSVChannelsFilter:: _GD1( ) { typedef itk::Image< itk::RGBPixel< P >, D > _TImage; typedef itk::Image< P, D > _TChannel; typedef cpPlugins::Extensions::Algorithms::RGBToHSVFunction< P > _TFunction; typedef cpPlugins::Extensions::Algorithms:: RGBImageToOtherChannelsFilter< _TImage, _TChannel, _TFunction > _TFilter; // Filter creation _TFilter* filter = dynamic_cast< _TFilter* >( this->m_RealProcessObject.GetPointer( ) ); if( filter == NULL ) { this->m_RealProcessObject = _TFilter::New( ); filter = dynamic_cast< _TFilter* >( this->m_RealProcessObject.GetPointer( ) ); } // fi filter->SetInput( dynamic_cast< _TImage* >( this->_GetInput( 0 ) ) ); filter->Update( ); this->_SetOutput( 0, filter->GetChannel1( ) ); this->_SetOutput( 1, filter->GetChannel2( ) ); this->_SetOutput( 2, filter->GetChannel3( ) ); return( "" ); } // eof - $RCSfile$