// ------------------------------------------------------------------------- // @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co) // ------------------------------------------------------------------------- #ifndef __CPEXTENSIONS__ALGORITHMS__MULTISCALEGAUSSIANIMAGEFILTER__H__ #define __CPEXTENSIONS__ALGORITHMS__MULTISCALEGAUSSIANIMAGEFILTER__H__ #include #include namespace cpExtensions { namespace Algorithms { /** */ template< class I, class O > class MultiScaleGaussianImageFilter : public itk::ImageToImageFilter< I, O > { public: typedef MultiScaleGaussianImageFilter 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 std::set< double > TScalesContainer; enum FilterId { Gradient = 0, GradientMagnitude, Hessian, None }; protected: /** */ class _Greater { public: typedef typename O::PixelType _T; public: _Greater( ); virtual ~_Greater( ); bool operator!=( const _Greater& b ) const; bool operator==( const _Greater& b ) const; inline _T operator()( const _T& a ) const; inline _T operator()( const _T& a, const _T& b ) const; }; public: itkNewMacro( Self ); itkTypeMacro( MultiScaleGaussianImageFilter, itkImageToImageFilter ); public: void SetFilterToGradient( ); void SetFilterToGradientMagnitude( ); void SetFilterToHessian( ); bool IsGradientFilter( ) const; bool IsGradientMagnitudeFilter( ) const; bool IsHessianFilter( ) const; void AddScale( const double& s ); unsigned long GetNumberOfScales( ) const; protected: MultiScaleGaussianImageFilter( ); virtual ~MultiScaleGaussianImageFilter( ); virtual void GenerateData( ); template< class F > void _GenerateData( ); private: // Purposely not implemented. MultiScaleGaussianImageFilter( const Self& ); void operator=( const Self& ); protected: TScalesContainer m_Scales; FilterId m_FilterId; }; } // ecapseman } // ecapseman #include #endif // __CPEXTENSIONS__ALGORITHMS__MULTISCALEGAUSSIANIMAGEFILTER__H__ // eof - $RCSfile$