// ========================================================================= // @author Leonardo Florez Valencia // @email florez-l@javeriana.edu.co // ========================================================================= #ifndef __fpa__Image__Algorithm__h__ #define __fpa__Image__Algorithm__h__ #include #include #include namespace fpa { namespace Image { /** */ template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface > class Algorithm : public fpa::Base::Algorithm< itk::ImageToImageFilter< _TInputImage, _TOutputImage >, _TMarksInterface, _TSeedsInterface > { public: typedef _TInputImage TInputImage; typedef _TOutputImage TOutputImage; typedef _TMarksInterface TMarksInterface; typedef _TSeedsInterface TSeedsInterface; typedef itk::ImageToImageFilter< TInputImage, TOutputImage > TFilter; typedef Algorithm Self; typedef fpa::Base::Algorithm< TFilter, TMarksInterface, TSeedsInterface > Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef typename TInputImage::PixelType TInputValue; typedef typename TOutputImage::PixelType TOutputValue; typedef typename Superclass::TFrontId TFrontId; typedef typename Superclass::TNeighborhood TNeighborhood; typedef typename Superclass::TNode TNode; typedef typename Superclass::TVertex TVertex; typedef itk::Image< TFrontId, TInputImage::ImageDimension > TMarks; public: itkTypeMacro( fpa::Image::Algorithm, fpa::Base::Algorithm ); itkGetConstMacro( NeigborhoodOrder, unsigned int ); itkSetMacro( NeigborhoodOrder, unsigned int ); public: TMarks* GetMarks( ); const TMarks* GetMarks( ) const; protected: Algorithm( ); virtual ~Algorithm( ); virtual void _ConfigureOutput( const TOutputValue& v ) override; virtual TNeighborhood _GetNeighbors( const TVertex& v ) const override; virtual TInputValue _GetInputValue( const TVertex& v ) const override; virtual TOutputValue _GetOutputValue( const TVertex& v ) const override; virtual void _UpdateOutputValue( const TNode& n ) override; virtual bool _IsMarked( const TVertex& v ) const override; virtual unsigned long _GetMark( const TVertex& v ) const override; virtual bool _Mark( const TVertex& v, unsigned long frontId ) override; private: // Purposely not implemented. Algorithm( const Self& other ); Self& operator=( const Self& other ); protected: unsigned long m_MarksIdx; unsigned int m_NeigborhoodOrder; }; } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION # include #endif // ITK_MANUAL_INSTANTIATION #endif // __fpa__Image__Algorithm__h__ // eof - $RCSfile$