]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Image/Dijkstra.h
CMake updated. Some other filters added.
[FrontAlgorithms.git] / lib / fpa / Image / Dijkstra.h
1 #ifndef __FPA__IMAGE__DIJKSTRA__H__
2 #define __FPA__IMAGE__DIJKSTRA__H__
3
4 #include <itkFunctionBase.h>
5 #include <itkImageToImageFilter.h>
6 #include <fpa/Base/Dijkstra.h>
7 #include <fpa/Image/Algorithm.h>
8 #include <fpa/Image/Functors/ImageCostFunction.h>
9
10 namespace fpa
11 {
12   namespace Image
13   {
14     /**
15      * @param I Input image type
16      * @param O Output image type
17      */
18     template< class I, class O = I >
19     class Dijkstra
20       : public Algorithm< I, O, fpa::Base::Dijkstra< typename I::IndexType, typename I::PixelType, typename O::PixelType, I, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, itk::ImageToImageFilter< I, O > > >
21     {
22     public:
23       typedef fpa::Base::Dijkstra< typename I::IndexType, typename I::PixelType, typename O::PixelType, I, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, itk::ImageToImageFilter< I, O > > TBaseAlgorithm;
24
25       typedef Dijkstra                          Self;
26       typedef Algorithm< I, O, TBaseAlgorithm > Superclass;
27       typedef itk::SmartPointer< Self >         Pointer;
28       typedef itk::SmartPointer< const Self >   ConstPointer;
29
30       typedef typename Superclass::TInputImage          TInputImage;
31       typedef typename Superclass::TOutputImage         TOutputImage;
32       typedef typename Superclass::TVertex              TVertex;
33       typedef typename Superclass::TValue               TValue;
34       typedef typename Superclass::TResult              TResult;
35       typedef typename Superclass::TSpace               TSpace;
36       typedef typename Superclass::TMinimumSpanningTree TMinimumSpanningTree;
37
38       typedef typename Superclass::TStartEvent     TStartEvent;
39       typedef typename Superclass::TStartLoopEvent TStartLoopEvent;
40       typedef typename Superclass::TEndEvent       TEndEvent;
41       typedef typename Superclass::TEndLoopEvent   TEndLoopEvent;
42       typedef typename Superclass::TAliveEvent     TAliveEvent;
43       typedef typename Superclass::TFrontEvent     TFrontEvent;
44       typedef typename Superclass::TFreezeEvent    TFreezeEvent;
45
46       typedef typename Superclass::TStartBacktrackingEvent TStartBacktrackingEvent;
47       typedef typename Superclass::TEndBacktrackingEvent TEndBacktrackingEvent;
48       typedef typename Superclass::TBacktrackingEvent TBacktrackingEvent;
49
50       typedef fpa::Image::Functors::ImageCostFunction< TInputImage, TResult > TCostFunction;
51       typedef itk::FunctionBase< TResult, TResult > TConversionFunction;
52
53     protected:
54       typedef typename Superclass::_TVertices      _TVertices;
55       typedef typename Superclass::_TCollision     _TCollision;
56       typedef typename Superclass::_TCollisionsRow _TCollisionsRow;
57       typedef typename Superclass::_TCollisions    _TCollisions;
58       typedef typename Superclass::_TNode          _TNode;
59       typedef typename Superclass::_TNodes         _TNodes;
60
61     public:
62       itkNewMacro( Self );
63       itkTypeMacro( Dijkstra, Algorithm );
64
65       itkGetObjectMacro( CostFunction, TCostFunction );
66       itkGetObjectMacro( ConversionFunction, TConversionFunction );
67
68       itkGetConstObjectMacro( CostFunction, TCostFunction );
69       itkGetConstObjectMacro( ConversionFunction, TConversionFunction );
70
71       itkSetObjectMacro( CostFunction, TCostFunction );
72       itkSetObjectMacro( ConversionFunction, TConversionFunction );
73
74     protected:
75       Dijkstra( );
76       virtual ~Dijkstra( );
77
78       virtual TResult _Cost( const TVertex& v, const TVertex& p ) const;
79
80       virtual void _BeforeGenerateData( );
81       virtual void _InitResults( );
82
83     private:
84       // Purposely not implemented
85       Dijkstra( const Self& other );
86       Self& operator=( const Self& other );
87
88     protected:
89       typename TCostFunction::Pointer m_CostFunction;
90       typename TConversionFunction::Pointer m_ConversionFunction;
91     };
92
93   } // ecapseman
94
95 } // ecapseman
96
97 #include <fpa/Image/Dijkstra.hxx>
98
99 #endif // __FPA__IMAGE__DIJKSTRA__H__
100
101 // eof - $RCSfile$