#ifndef __FPA__IMAGE__ALGORITHM__H__ #define __FPA__IMAGE__ALGORITHM__H__ #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 > class Algorithm : public A { public: /// Standard class typdedefs 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; private: typedef itk::Image< bool, I::ImageDimension > _TMarks; typedef itk::Image< _TFrontId, I::ImageDimension > _TFrontsIds; typedef itk::Image< TVertex, I::ImageDimension > _TParents; public: itkTypeMacro( Algorithm, TAlgorithm ); /// Set/Get itkGetConstMacro( NeighborhoodOrder, unsigned int ); itkGetConstObjectMacro( CostConversion, TCostConversionFunction ); itkGetObjectMacro( CostConversion, TCostConversionFunction ); itkSetMacro( NeighborhoodOrder, unsigned int ); itkSetObjectMacro( CostConversion, TCostConversionFunction ); 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 ( ); private: Algorithm( const Self& ); // Not impl. void operator=( const Self& ); // Not impl. protected: unsigned int m_NeighborhoodOrder; typename TCostConversionFunction::Pointer m_CostConversion; }; } // ecapseman } // ecapseman #include #endif // __FPA__IMAGE__ALGORITHM__H__ // eof - $RCSfile$