X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FImage%2FAlgorithm.h;h=12a2f9140994434a9ac85ef1c2b4854f81b5fdc5;hb=ed2108383e59a45c6fa2e9259a27256a93d8aa6a;hp=d613ce3d8afce33b090f781c9abc04df658cc9d5;hpb=e9083d9f5f381f258f994fa9bbbe39a897f97c5b;p=FrontAlgorithms.git diff --git a/lib/fpa/Image/Algorithm.h b/lib/fpa/Image/Algorithm.h index d613ce3..12a2f91 100644 --- a/lib/fpa/Image/Algorithm.h +++ b/lib/fpa/Image/Algorithm.h @@ -1,10 +1,15 @@ +// ========================================================================= +// @author Leonardo Florez Valencia +// @email florez-l@javeriana.edu.co +// ========================================================================= + #ifndef __fpa__Image__Algorithm__h__ #define __fpa__Image__Algorithm__h__ -#include +#include #include + #include -#include namespace fpa { @@ -12,49 +17,66 @@ namespace fpa { /** */ - template< class _TInputImage, class _TOutputImage > + template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface > class Algorithm - : public fpa::Base::Algorithm< itk::ImageToImageFilter< _TInputImage, _TOutputImage >, typename _TInputImage::IndexType, typename _TOutputImage::PixelType > + : public fpa::Base::Algorithm< itk::ImageToImageFilter< _TInputImage, _TOutputImage >, _TMarksInterface, _TSeedsInterface > { public: - typedef itk::ImageToImageFilter< _TInputImage, _TOutputImage > TFilter; - typedef typename _TInputImage::IndexType TVertex; - typedef typename _TOutputImage::PixelType TOutput; + 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, TVertex, TOutput > Superclass; - typedef itk::SmartPointer< Self > Pointer; - typedef itk::SmartPointer< const Self > ConstPointer; + 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 fpa::Image::Functors::Base< itk::ImageBase< _TInputImage::ImageDimension >, itk::FunctionBase< TVertex, TNeighborhood > > TNeighborhoodFunction; + typedef typename Superclass::TNode TNode; + typedef typename Superclass::TNodes TNodes; + typedef typename Superclass::TSeeds TSeeds; + typedef typename Superclass::TVertex TVertex; + typedef typename Superclass::TPoint TPoint; - protected: - typedef typename Superclass::_TQueueNode _TQueueNode; + 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 _BeforeGenerateData( ) override; - virtual void _InitMarks( ) override; - virtual void _InitResults( const TOutput& init_value ) override; + virtual TNodes _UnifySeeds( ) override; + 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 void _Mark( const _TQueueNode& n ) override; - virtual TFrontId _GetMark( const TVertex& v ) const override; - virtual void _UpdateResult( const _TQueueNode& n ) override; + virtual unsigned long _GetMark( const TVertex& v ) const override; + virtual bool _Mark( const TVertex& v, unsigned long frontId ) override; private: - // Purposely not defined + // Purposely not implemented. Algorithm( const Self& other ); Self& operator=( const Self& other ); protected: - unsigned int m_MarksIdx; + unsigned long m_MarksIdx; + unsigned int m_NeigborhoodOrder; }; } // ecapseman