// ------------------------------------------------------------------------- // @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co) // ------------------------------------------------------------------------- #ifndef __CPPLUGINS__EXTENSIONS__ALGORITHMS__RGBIMAGETOHSVCHANNELSFILTER__H__ #define __CPPLUGINS__EXTENSIONS__ALGORITHMS__RGBIMAGETOHSVCHANNELSFILTER__H__ #include namespace cpPlugins { namespace Extensions { namespace Algorithms { /** */ template< class I, class O > class RGBImageToHSVChannelsFilter : public itk::ImageToImageFilter< I, O > { public: typedef RGBImageToHSVChannelsFilter Self; typedef itk::ImageToImageFilter< I, O > Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef I TInputImage; typedef O TOutputImage; typedef typename I::PixelType TInputPixel; typedef typename O::PixelType TOutputPixel; public: itkNewMacro( Self ); itkTypeMacro( RGBImageToHSVChannelsFilter, itkImageToImageFilter ); public: O* GetHueOutput( ); O* GetSaturationOutput( ); O* GetValueOutput( ); const O* GetHueOutput( ) const; const O* GetSaturationOutput( ) const; const O* GetValueOutput( ) const; void GraftHueOutput( O* hue ); void GraftSaturationOutput( O* saturation ); void GraftValueOutput( O* value ); protected: RGBImageToHSVChannelsFilter( ); virtual ~RGBImageToHSVChannelsFilter( ); virtual void BeforeThreadedGenerateData( ); virtual void AfterThreadedGenerateData( ); virtual void ThreadedGenerateData( const typename Superclass::OutputImageRegionType& region, itk::ThreadIdType threadId ); protected: static void _RGB2HSV( const TInputPixel& RGB, TOutputPixel& H, TOutputPixel& S, TOutputPixel& V ); private: // Purposely not implemented RGBImageToHSVChannelsFilter( const Self& other ); void operator=( const Self& other ); }; } // ecapseman } // ecapseman } // ecapseman #include #endif // __CPPLUGINS__EXTENSIONS__ALGORITHMS__RGBIMAGETOHSVCHANNELSFILTER__H__ // eof - $RCSfile$