X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FImage%2FAlgorithm.h;h=6bed9adc858a68b142aca6effff34065fef065a5;hb=c9542e420b94b0bfc1f285599f7816eab1191519;hp=289eb6c0e7da7dad12899fcf8c929b3b0e58d5f1;hpb=9622bd5b833a8845881003228207e0caca59b081;p=FrontAlgorithms.git diff --git a/lib/fpa/Image/Algorithm.h b/lib/fpa/Image/Algorithm.h index 289eb6c..6bed9ad 100644 --- a/lib/fpa/Image/Algorithm.h +++ b/lib/fpa/Image/Algorithm.h @@ -1,105 +1,125 @@ -#ifndef __FPA__IMAGE__ALGORITHM__H__ -#define __FPA__IMAGE__ALGORITHM__H__ +// ========================================================================= +// @author Leonardo Florez Valencia +// @email florez-l@javeriana.edu.co +// ========================================================================= + +#ifndef __fpa__Image__Algorithm__h__ +#define __fpa__Image__Algorithm__h__ #include -#include +#include +#include namespace fpa { namespace Image { /** - * A generic front propagation algorithm were vertices are image pixels. - * - * @param I Input image type - * @param A Base algorithm (RegionGrow, Dijkstra or FastMarching) */ - template< class I, class A > + template< class _TTraits, class _TMarks, class _TSeeds > class Algorithm - : public A + : public fpa::Base::Algorithm< itk::ImageToImageFilter< typename _TTraits::TInputImage, typename _TTraits::TOutputImage >, _TMarks, _TSeeds > { public: - /// Standard class typdedefs + typedef _TTraits TTraits; + typedef _TMarks TMarksInterface; + typedef _TSeeds TSeedsInterface; + typedef typename TTraits::TInputImage TInputImage; + typedef typename TTraits::TOutputImage TOutputImage; + typedef itk::ImageToImageFilter< TInputImage, TOutputImage > TFilter; + + typedef fpa::Base::Algorithm< TFilter, TMarksInterface, TSeedsInterface > Superclass; typedef Algorithm Self; - typedef A Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; - /// Template input values - typedef I TInputImage; - typedef A TBaseAlgorithm; - - typedef typename A::TTraits TTraits; - typedef typename TTraits::TCost TCost; - typedef typename TTraits::TResult TResult; - typedef typename TTraits::TVertex TVertex; - typedef typename TTraits::TVertexValue TVertexValue; - - typedef itk::Image< TResult, I::ImageDimension > TOutputImage; - typedef itk::FunctionBase< TCost, TCost > TCostConversionFunction; - - protected: - typedef typename TTraits::TFrontId _TFrontId; - typedef typename TTraits::TNode _TNode; - typedef typename TTraits::TNodes _TNodes; + fpa_Base_TraitTypes( typename TTraits ); + + /* TODO + typedef typename TTraits::TFrontId TFrontId; + typedef typename TTraits::TInputImage TInputImage; + typedef typename TTraits::TInputValue TInputValue; + typedef typename TTraits::TNeighborhood TNeighborhood; + typedef typename TTraits::TNode TNode; + typedef typename TTraits::TNodes TNodes; + typedef typename TTraits::TOutputImage TOutputImage; + typedef typename TTraits::TOutputValue TOutputValue; + typedef typename TTraits::TSeeds TSeeds; + typedef typename TTraits::TVertex TVertex; + */ + + typedef itk::Image< TFrontId, TTraits::Dimension > TMarks; + + /* TODO + typedef _TMarksInterface TMarksInterface; + typedef _TSeedsInterface TSeedsInterface; + + typedef typename TSeedsInterface::TTraits TTraits; + typedef typename TTraits::TInputImage TInputImage; + typedef typename TTraits::TOutputImage TOutputImage; + typedef typename TTraits::TInputValue TInputValue; + typedef typename TTraits::TOutputValue TOutputValue; + typedef typename TTraits::TFrontId TFrontId; + typedef typename TTraits::TNeighborhood TNeighborhood; + typedef typename TTraits::TNode TNode; + typedef typename TTraits::TNodes TNodes; + typedef typename TTraits::TSeeds TSeeds; + typedef typename TTraits::TVertex TVertex; + typedef typename TTraits::TPoint TPoint; + + typedef itk::ImageToImageFilter< TInputImage, TOutputImage > TFilter; + typedef fpa::Base::Algorithm< TFilter, TMarksInterface, TSeedsInterface > Superclass; + typedef Algorithm Self; + */ private: - typedef itk::Image< bool, I::ImageDimension > _TMarks; - typedef itk::Image< _TFrontId, I::ImageDimension > _TFrontsIds; - typedef itk::Image< TVertex, I::ImageDimension > _TParents; + itkConceptMacro( + Marks_SameTraits, + ( itk::Concept::SameType< typename _TMarks::TTraits, TTraits > ) + ); public: - itkTypeMacro( Algorithm, TAlgorithm ); + itkTypeMacro( fpa::Image::Algorithm, fpa::Base::Algorithm ); - /// Set/Get - itkGetConstMacro( NeighborhoodOrder, unsigned int ); - itkGetConstObjectMacro( CostConversion, TCostConversionFunction ); - itkGetObjectMacro( CostConversion, TCostConversionFunction ); + itkGetConstMacro( NeigborhoodOrder, unsigned int ); + itkSetMacro( NeigborhoodOrder, unsigned int ); - itkSetMacro( NeighborhoodOrder, unsigned int ); - itkSetObjectMacro( CostConversion, TCostConversionFunction ); + public: + TMarks* GetMarks( ); + const TMarks* GetMarks( ) const; protected: Algorithm( ); virtual ~Algorithm( ); - /// Base interface - virtual bool _UpdateResult( _TNode& n ); - - /// Pure virtual interface: vertices - virtual unsigned long _NumberOfVertices ( ) const; - virtual TVertexValue _Value ( const TVertex& v ) const; - virtual TResult _Result ( const TVertex& v ) const; - - /// Pure virtual interface: edges - virtual double _Norm ( const TVertex& a, const TVertex& b ) const; - virtual bool _Edge ( const TVertex& a, const TVertex& b ) const; - virtual TCost _Cost ( const TVertex& a, const TVertex& b ) const; - - /// Pure virtual interface: neighborhood - virtual void _Neighs ( const _TNode& n, _TNodes& N ) const; - virtual void _NeighsInDim ( const _TNode& n, - const unsigned int& d, - _TNodes& N ); - - /// Pure virtual interface: results - virtual void _InitializeResults ( ); + 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( TNode& n ) override; + virtual bool _IsMarked( const TVertex& v ) const override; + virtual unsigned long _GetMark( const TVertex& v ) const override; + virtual void _Mark( const TVertex& v, unsigned long frontId ) override; private: - Algorithm( const Self& ); // Not impl. - void operator=( const Self& ); // Not impl. + // Purposely not implemented. + Algorithm( const Self& other ); + Self& operator=( const Self& other ); protected: - unsigned int m_NeighborhoodOrder; - typename TCostConversionFunction::Pointer m_CostConversion; + unsigned long m_MarksIdx; + unsigned int m_NeigborhoodOrder; }; } // ecapseman } // ecapseman -#include +#ifndef ITK_MANUAL_INSTANTIATION +# include +#endif // ITK_MANUAL_INSTANTIATION -#endif // __FPA__IMAGE__ALGORITHM__H__ +#endif // __fpa__Image__Algorithm__h__ // eof - $RCSfile$