]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Filters/Image/RandomWalker.h
...
[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/LabelsSeedFilter.h>
14 #include <fpa/Filters/Image/LabelsSeedInterface.h>
15
16 namespace fpa
17 {
18   namespace Filters
19   {
20     namespace Image
21     {
22       /**
23        */
24       template< class _TInputImage, class _TInputLabels, class _TCostsImage >
25       class RandomWalkerTraits
26         : public fpa::Filters::Image::DefaultTraits< _TInputImage, _TCostsImage, typename _TInputLabels::PixelType >
27       {
28       public:
29         typedef _TInputImage  TInputImage;
30         typedef _TInputLabels TInputLabels;
31         typedef _TCostsImage  TCostsImage;
32         typedef fpa::Filters::Image::DefaultTraits< TInputImage, TCostsImage, typename _TInputLabels::PixelType > Superclass;
33
34         typedef typename Superclass::TInternalTraits TInternalTraits;
35         typedef typename Superclass::TFilter TFilter;
36         typedef fpa::Filters::MarksInterface< TInternalTraits >  TMarksInterface;
37         typedef fpa::Filters::Image::LabelsSeedInterface< TInternalTraits > TSeedsInterface;
38       };
39
40       /**
41        */
42       template< class _TInputImage, class _TInputLabels, class _TCostsImage = itk::Image< float, _TInputImage::ImageDimension >, class _TTraits = fpa::Filters::Image::RandomWalkerTraits< _TInputImage, _TInputLabels, _TCostsImage > >
43       class RandomWalker
44         : public fpa::Filters::Image::LabelsSeedFilter< fpa::Filters::Image::Algorithm< fpa::Filters::DijkstraBase< _TTraits > >, _TInputLabels >
45       {
46       public:
47         typedef _TInputImage  TInputImage;
48         typedef _TInputLabels TInputLabels;
49         typedef _TCostsImage  TCostsImage;
50         typedef _TTraits      TTraits;
51         fpaTraitsMacro( typename, TTraits );
52
53         typedef fpa::Filters::DijkstraBase< TTraits >        TAlgorithm;
54         typedef fpa::Filters::Image::Algorithm< TAlgorithm > TBase;
55         typedef fpa::Filters::Image::LabelsSeedFilter< TBase, TInputLabels > Superclass;
56         typedef RandomWalker                     Self;
57         typedef itk::SmartPointer< Self >        Pointer;
58         typedef itk::SmartPointer< const Self >  ConstPointer;
59         typedef typename Superclass::TMarksImage TOutputLabels;
60
61       public:
62         itkNewMacro( Self );
63         itkTypeMacro(
64           fpa::Filters::Image::RandomWalker, fpa::Filters::Image::Algorithm
65           );
66
67       public:
68         TCostsImage* GetOutputCosts( );
69         const TCostsImage* GetOutputCosts( ) const;
70
71         TOutputLabels* GetOutputLabels( );
72         const TOutputLabels* GetOutputLabels( ) const;
73
74         TInputImage* GetInputImage( );
75         const TInputImage* GetInputImage( ) const;
76         void SetInputImage( TInputImage* image );
77
78       protected:
79         RandomWalker( );
80         virtual ~RandomWalker( );
81
82       private:
83         // Purposely not implemented.
84         RandomWalker( const Self& other );
85         Self& operator=( const Self& other );
86       };
87
88     } // ecapseman
89
90   } // ecapseman
91
92 } // ecapseman
93
94 #ifndef ITK_MANUAL_INSTANTIATION
95 #  include <fpa/Filters/Image/RandomWalker.hxx>
96 #endif // ITK_MANUAL_INSTANTIATION
97 #endif // __fpa__Filters__Image__RandomWalker__h__
98 // eof - $RCSfile$