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__
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>
23 template< class _TInputImage, class _TInputLabels, class _TCostsImage >
24 class RandomWalkerTraits
25 : public fpa::Filters::Image::DefaultTraits< _TInputImage, _TCostsImage, typename _TInputLabels::PixelType >
28 typedef _TInputImage TInputImage;
29 typedef _TInputLabels TInputLabels;
30 typedef _TCostsImage TCostsImage;
31 typedef fpa::Filters::Image::DefaultTraits< TInputImage, TCostsImage, typename _TInputLabels::PixelType > Superclass;
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;
41 template< class _TInputImage, class _TInputLabels, class _TCostsImage = itk::Image< float, _TInputImage::ImageDimension >, class _TTraits = fpa::Filters::Image::RandomWalkerTraits< _TInputImage, _TInputLabels, _TCostsImage > >
43 : public fpa::Filters::Image::Algorithm< fpa::Filters::DijkstraBase< _TTraits > >
46 typedef _TInputImage TInputImage;
47 typedef _TInputLabels TInputLabels;
48 typedef _TCostsImage TCostsImage;
49 typedef _TTraits TTraits;
50 fpaTraitsMacro( typename, TTraits );
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;
58 typedef typename Superclass::TMarksImage TOutputLabels;
63 fpa::Filters::Image::RandomWalker, fpa::Filters::Image::Algorithm
66 fpaFilterInputMacro( InputLabels, TInputLabels );
69 TCostsImage* GetOutputCosts( );
70 const TCostsImage* GetOutputCosts( ) const;
72 TOutputLabels* GetOutputLabels( );
73 const TOutputLabels* GetOutputLabels( ) const;
75 TInputImage* GetInputImage( );
76 const TInputImage* GetInputImage( ) const;
77 void SetInputImage( TInputImage* image );
81 virtual ~RandomWalker( );
83 virtual const itk::DataObject* _GetReferenceInput( ) const override;
84 virtual void _PrepareSeeds( const itk::DataObject* input ) override;
87 // Purposely not implemented.
88 RandomWalker( const Self& other );
89 Self& operator=( const Self& other );
92 unsigned int m_InputLabelsIdx;
101 #ifndef ITK_MANUAL_INSTANTIATION
102 # include <fpa/Filters/Image/RandomWalker.hxx>
103 #endif // ITK_MANUAL_INSTANTIATION
104 #endif // __fpa__Filters__Image__RandomWalker__h__