#ifndef __FPA__IMAGE__DIJKSTRA__H__ #define __FPA__IMAGE__DIJKSTRA__H__ #include #include #include #include #include #include namespace fpa { namespace Image { /** * @param I Input image type * @param O Output image type */ template< class I, class O = I > class Dijkstra : public Algorithm< I, O, fpa::Base::Dijkstra< typename I::IndexType, typename I::PixelType, typename O::PixelType, I, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, fpa::Image::MinimumSpanningTree< I::ImageDimension >, itk::ImageToImageFilter< I, O > > > { public: typedef fpa::Base::Dijkstra< typename I::IndexType, typename I::PixelType, typename O::PixelType, I, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, fpa::Image::MinimumSpanningTree< I::ImageDimension >, itk::ImageToImageFilter< I, O > > TBaseAlgorithm; typedef Dijkstra Self; typedef Algorithm< I, O, TBaseAlgorithm > Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef typename Superclass::TInputImage TInputImage; typedef typename Superclass::TOutputImage TOutputImage; typedef typename Superclass::TVertex TVertex; typedef typename Superclass::TValue TValue; typedef typename Superclass::TResult TResult; typedef typename Superclass::TSpace TSpace; typedef typename Superclass::TStartEvent TStartEvent; typedef typename Superclass::TStartLoopEvent TStartLoopEvent; typedef typename Superclass::TEndEvent TEndEvent; typedef typename Superclass::TEndLoopEvent TEndLoopEvent; typedef typename Superclass::TAliveEvent TAliveEvent; typedef typename Superclass::TFrontEvent TFrontEvent; typedef typename Superclass::TFreezeEvent TFreezeEvent; typedef typename Superclass::TStartBacktrackingEvent TStartBacktrackingEvent; typedef typename Superclass::TEndBacktrackingEvent TEndBacktrackingEvent; typedef typename Superclass::TBacktrackingEvent TBacktrackingEvent; typedef typename TBaseAlgorithm::TMinimumSpanningTree TMinimumSpanningTree; typedef fpa::Image::Functors::ImageCostFunction< TInputImage, TResult > TCostFunction; typedef itk::FunctionBase< TResult, TResult > TConversionFunction; protected: typedef typename Superclass::_TVertices _TVertices; typedef typename Superclass::_TCollision _TCollision; typedef typename Superclass::_TCollisionsRow _TCollisionsRow; typedef typename Superclass::_TCollisions _TCollisions; typedef typename Superclass::_TNode _TNode; typedef typename Superclass::_TNodes _TNodes; public: itkNewMacro( Self ); itkTypeMacro( Dijkstra, Algorithm ); itkGetObjectMacro( CostFunction, TCostFunction ); itkGetObjectMacro( ConversionFunction, TConversionFunction ); itkGetConstObjectMacro( CostFunction, TCostFunction ); itkGetConstObjectMacro( ConversionFunction, TConversionFunction ); itkSetObjectMacro( CostFunction, TCostFunction ); itkSetObjectMacro( ConversionFunction, TConversionFunction ); protected: Dijkstra( ); virtual ~Dijkstra( ); virtual TResult _Cost( const TVertex& v, const TVertex& p ) const; virtual void _BeforeGenerateData( ); virtual void _AfterGenerateData( ); virtual void _InitResults( ); private: // Purposely not implemented Dijkstra( const Self& other ); Self& operator=( const Self& other ); protected: typename TCostFunction::Pointer m_CostFunction; typename TConversionFunction::Pointer m_ConversionFunction; }; } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION #include #endif // ITK_MANUAL_INSTANTIATION #endif // __FPA__IMAGE__DIJKSTRA__H__ // eof - $RCSfile$