]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Image/RandomWalker.h
5438f007b992133bc021ebd451fd015568ff0d0c
[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
11 #include <fpa/Base/DijkstraBase.h>
12 #include <fpa/Base/MarksInterface.h>
13 #include <fpa/Image/Algorithm.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 RandomWalker
25       : public fpa::Base::DijkstraBase< fpa::Image::Algorithm< _TInputImage, itk::Image< _TScalar, _TInputImage::ImageDimension >, fpa::Base::MarksInterface< typename _TInputImage::IndexType >, fpa::Image::LabelledSeedsInterface< typename _TInputImage::IndexType, typename _TInputImage::PointType, typename _TInputImage::PixelType, _TScalar, typename _TLabelImage::PixelType, typename _TInputImage::IndexType::LexicographicCompare > > >
26     {
27     public:
28       typedef _TInputImage TInputImage;
29       typedef _TLabelImage TLabelImage;
30       typedef _TScalar     TScalar;
31       typedef typename TInputImage::IndexType        TVertex;
32       typedef typename TInputImage::PointType        TPoint;
33       typedef typename TVertex::LexicographicCompare TVertexCompare;
34       typedef typename TInputImage::PixelType        TInputValue;
35       typedef typename TLabelImage::PixelType        TFrontId;
36
37       typedef itk::Image< TScalar, _TInputImage::ImageDimension > TOutputImage;
38       typedef fpa::Base::MarksInterface< TVertex > TMarksInterface;
39       typedef fpa::Image::LabelledSeedsInterface< TVertex, TPoint, TInputValue, _TScalar, TFrontId, TVertexCompare > TSeedsInterface;
40       typedef fpa::Image::Algorithm< _TInputImage, TOutputImage, TMarksInterface, TSeedsInterface > TAlgorithm;
41
42       typedef RandomWalker                          Self;
43       typedef fpa::Base::DijkstraBase< TAlgorithm > Superclass;
44       typedef itk::SmartPointer< Self >             Pointer;
45       typedef itk::SmartPointer< const Self >       ConstPointer;
46
47       typedef fpa::Image::Functors::Dijkstra::Function< TInputImage, TScalar > TWeightFunction;
48       typedef typename TSeedsInterface::TNode  TNode;
49       typedef typename TSeedsInterface::TNodes TNodes;
50
51     public:
52       itkNewMacro( Self );
53       itkTypeMacro( fpa::Image::RandomWalker, fpa::Base::RandomWalker );
54
55     public:
56       virtual itk::ModifiedTimeType GetMTime( ) const override;
57
58     protected:
59       RandomWalker( );
60       virtual ~RandomWalker( );
61
62       virtual void _BeforeGenerateData( ) override;
63       virtual TNodes _UnifySeeds( ) override;
64
65     private:
66       // Purposely not implemented.
67       RandomWalker( const Self& other );
68       Self& operator=( const Self& other );
69     };
70
71   } // ecapseman
72
73 } // ecapseman
74
75 #ifndef ITK_MANUAL_INSTANTIATION
76 #  include <fpa/Image/RandomWalker.hxx>
77 #endif // ITK_MANUAL_INSTANTIATION
78
79 #endif // __fpa__Image__RandomWalker__h__
80
81 // eof - $RCSfile$