]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Filters/Image/RandomWalker.h
41fba2c148fecfa6a8a60630cc75f549b8a4f095
[FrontAlgorithms.git] / lib / fpa / Filters / Image / RandomWalker.h
1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5 #ifndef __fpa__Filters__Image__RandomWalker__h__
6 #define __fpa__Filters__Image__RandomWalker__h__
7
8 #include <itkImage.h>
9 #include <fpa/Filters/DijkstraBase.h>
10 #include <fpa/Filters/Image/Algorithm.h>
11 #include <fpa/Filters/Image/DefaultTraits.h>
12 #include <fpa/Filters/MarksInterface.h>
13 #include <fpa/Filters/Image/LabelsSeedInterface.h>
14
15 namespace fpa
16 {
17   namespace Filters
18   {
19     namespace Image
20     {
21       /**
22        */
23       template< class _TInputImage, class _TInputLabels, class _TCostsImage >
24       class RandomWalkerTraits
25         : public fpa::Filters::Image::DefaultTraits< _TInputImage, _TCostsImage, typename _TInputLabels::PixelType >
26       {
27       public:
28         typedef _TInputImage  TInputImage;
29         typedef _TInputLabels TInputLabels;
30         typedef _TCostsImage  TCostsImage;
31         typedef fpa::Filters::Image::DefaultTraits< TInputImage, TCostsImage, typename _TInputLabels::PixelType > Superclass;
32
33         typedef typename Superclass::TInternalTraits TInternalTraits;
34         typedef typename Superclass::TFilter TFilter;
35         typedef fpa::Filters::MarksInterface< TInternalTraits >  TMarksInterface;
36         typedef fpa::Filters::Image::LabelsSeedInterface< TInternalTraits > TSeedsInterface;
37       };
38
39       /**
40        */
41       template< class _TInputImage, class _TInputLabels, class _TCostsImage = itk::Image< float, _TInputImage::ImageDimension >, class _TTraits = fpa::Filters::Image::RandomWalkerTraits< _TInputImage, _TInputLabels, _TCostsImage > >
42       class RandomWalker
43         : public fpa::Filters::Image::Algorithm< fpa::Filters::DijkstraBase< _TTraits > >
44       {
45       public:
46         typedef _TInputImage  TInputImage;
47         typedef _TInputLabels TInputLabels;
48         typedef _TCostsImage  TCostsImage;
49         typedef _TTraits      TTraits;
50         fpaTraitsMacro( typename, TTraits );
51
52         typedef fpa::Filters::DijkstraBase< TTraits >        TAlgorithm;
53         typedef fpa::Filters::Image::Algorithm< TAlgorithm > Superclass;
54         typedef RandomWalker                                 Self;
55         typedef itk::SmartPointer< Self >                    Pointer;
56         typedef itk::SmartPointer< const Self >              ConstPointer;
57
58         typedef typename Superclass::TMarksImage TOutputLabels;
59
60       public:
61         itkNewMacro( Self );
62         itkTypeMacro(
63           fpa::Filters::Image::RandomWalker, fpa::Filters::Image::Algorithm
64           );
65
66         fpaFilterInputMacro( InputLabels, TInputLabels );
67
68       public:
69         TCostsImage* GetOutputCosts( );
70         const TCostsImage* GetOutputCosts( ) const;
71
72         TOutputLabels* GetOutputLabels( );
73         const TOutputLabels* GetOutputLabels( ) const;
74
75         TInputImage* GetInputImage( );
76         const TInputImage* GetInputImage( ) const;
77         void SetInputImage( TInputImage* image );
78
79       protected:
80         RandomWalker( );
81         virtual ~RandomWalker( );
82
83         virtual const itk::DataObject* _GetReferenceInput( ) const override;
84         virtual void _PrepareSeeds( const itk::DataObject* input ) override;
85
86       private:
87         // Purposely not implemented.
88         RandomWalker( const Self& other );
89         Self& operator=( const Self& other );
90
91       protected:
92         unsigned int m_InputLabelsIdx;
93       };
94
95     } // ecapseman
96
97   } // ecapseman
98
99 } // ecapseman
100
101 #ifndef ITK_MANUAL_INSTANTIATION
102 #  include <fpa/Filters/Image/RandomWalker.hxx>
103 #endif // ITK_MANUAL_INSTANTIATION
104 #endif // __fpa__Filters__Image__RandomWalker__h__
105 // eof - $RCSfile$