]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Image/RandomWalker.h
...
[FrontAlgorithms.git] / lib / fpa / Image / RandomWalker.h
1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5
6 #ifndef __fpa__Image__RandomWalker__h__
7 #define __fpa__Image__RandomWalker__h__
8
9 #include <itkImage.h>
10 #include <fpa/Base/DijkstraBase.h>
11 #include <fpa/Base/MarksInterface.h>
12 #include <fpa/Image/Algorithm.h>
13 #include <fpa/Image/DefaultTraits.h>
14 #include <fpa/Image/LabelledSeedsInterface.h>
15 #include <fpa/Image/Functors/Dijkstra/Function.h>
16
17 namespace fpa
18 {
19   namespace Image
20   {
21     /**
22      */
23     template< class _TInputImage, class _TLabelImage, class _TScalar >
24     class RandomWalkerTraits
25       : public fpa::Image::DefaultTraits< _TInputImage, itk::Image< _TScalar, _TInputImage::ImageDimension >, typename _TLabelImage::PixelType >
26     {
27     public:
28       typedef RandomWalkerTraits Self;
29       typedef _TInputImage       TInputImage;
30       typedef _TLabelImage       TLabelImage;
31       typedef _TScalar           TScalar;
32       typedef typename _TLabelImage::PixelType TFrontId;
33       typedef itk::Image< TScalar, _TInputImage::ImageDimension > TOutputImage;
34       typedef fpa::Image::DefaultTraits< TInputImage, TOutputImage, TFrontId > Superclass;
35
36       typedef typename Superclass::TVertex       TVertex;
37       typedef typename Superclass::TInputValue   TInputValue;
38       typedef typename Superclass::TPoint        TPoint;
39       typedef typename Superclass::TOutputValue  TOutputValue;
40       typedef typename Superclass::TCompare      TCompare;
41       typedef typename Superclass::TNeighborhood TNeighborhood;
42       typedef typename Superclass::TFilter       TFilter;
43
44       typedef fpa::Image::LabelledSeedsInterface< TVertex, TPoint, TInputValue, TOutputValue, TFrontId, TCompare > TSeedsInterface;
45       typedef fpa::Base::MarksInterface< TVertex > TMarksInterface;
46
47       typedef typename TSeedsInterface::TNode  TNode;
48       typedef typename TSeedsInterface::TNodes TNodes;
49       typedef typename TSeedsInterface::TSeed  TSeed;
50       typedef typename TSeedsInterface::TSeeds TSeeds;
51
52     public:
53       itkConceptMacro(
54         Check_SameDimension,
55         ( itk::Concept::SameDimension< TInputImage::ImageDimension, TLabelImage::ImageDimension > )
56         );
57
58     private:
59       // Purposely not implemented.
60       RandomWalkerTraits( );
61       RandomWalkerTraits( const Self& other );
62       virtual ~RandomWalkerTraits( );
63       Self& operator=( const Self& other );
64     };
65
66     /**
67      */
68     template< class _TInputImage, class _TLabelImage, class _TScalar >
69     class RandomWalker
70       : public fpa::Base::DijkstraBase< fpa::Image::Algorithm< fpa::Image::RandomWalkerTraits< _TInputImage, _TLabelImage, _TScalar > > >
71     {
72     public:
73       typedef _TInputImage TInputImage;
74       typedef _TLabelImage TLabelImage;
75       typedef _TScalar     TScalar;
76
77       typedef fpa::Image::RandomWalkerTraits< TInputImage, TLabelImage, TScalar > TTraits;
78       typedef fpa::Image::Algorithm< TTraits > TAlgorithm;
79       typedef fpa::Base::DijkstraBase< TAlgorithm > Superclass;
80       typedef RandomWalker                    Self;
81       typedef itk::SmartPointer< Self >       Pointer;
82       typedef itk::SmartPointer< const Self > ConstPointer;
83
84       typedef typename TTraits::TNode   TNode;
85       typedef typename TTraits::TNodes  TNodes;
86       typedef typename TTraits::TSeed   TSeed;
87       typedef typename TTraits::TVertex TVertex;
88
89       typedef fpa::Image::Functors::Dijkstra::Function< TInputImage, TScalar > TWeightFunction;
90
91     public:
92       itkNewMacro( Self );
93       itkTypeMacro( fpa::Image::RandomWalker, fpa::Base::RandomWalker );
94
95     public:
96       virtual itk::ModifiedTimeType GetMTime( ) const override;
97
98     protected:
99       RandomWalker( );
100       virtual ~RandomWalker( );
101
102       virtual void _BeforeGenerateData( ) override;
103       virtual TNodes _UnifySeeds( ) override;
104
105     private:
106       // Purposely not implemented.
107       RandomWalker( const Self& other );
108       Self& operator=( const Self& other );
109     };
110
111   } // ecapseman
112
113 } // ecapseman
114
115 #ifndef ITK_MANUAL_INSTANTIATION
116 #  include <fpa/Image/RandomWalker.hxx>
117 #endif // ITK_MANUAL_INSTANTIATION
118
119 #endif // __fpa__Image__RandomWalker__h__
120
121 // eof - $RCSfile$