1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
6 #ifndef __fpa__Image__RandomWalker__h__
7 #define __fpa__Image__RandomWalker__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>
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 >
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;
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;
44 typedef fpa::Image::LabelledSeedsInterface< TVertex, TPoint, TInputValue, TOutputValue, TFrontId, TCompare > TSeedsInterface;
45 typedef fpa::Base::MarksInterface< TVertex > TMarksInterface;
47 typedef typename TSeedsInterface::TNode TNode;
48 typedef typename TSeedsInterface::TNodes TNodes;
49 typedef typename TSeedsInterface::TSeed TSeed;
50 typedef typename TSeedsInterface::TSeeds TSeeds;
55 ( itk::Concept::SameDimension< TInputImage::ImageDimension, TLabelImage::ImageDimension > )
59 // Purposely not implemented.
60 RandomWalkerTraits( );
61 RandomWalkerTraits( const Self& other );
62 virtual ~RandomWalkerTraits( );
63 Self& operator=( const Self& other );
68 template< class _TInputImage, class _TLabelImage, class _TScalar >
70 : public fpa::Base::DijkstraBase< fpa::Image::Algorithm< fpa::Image::RandomWalkerTraits< _TInputImage, _TLabelImage, _TScalar > > >
73 typedef _TInputImage TInputImage;
74 typedef _TLabelImage TLabelImage;
75 typedef _TScalar TScalar;
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;
84 typedef typename TTraits::TNode TNode;
85 typedef typename TTraits::TNodes TNodes;
86 typedef typename TTraits::TSeed TSeed;
87 typedef typename TTraits::TVertex TVertex;
89 typedef fpa::Image::Functors::Dijkstra::Function< TInputImage, TScalar > TWeightFunction;
93 itkTypeMacro( fpa::Image::RandomWalker, fpa::Base::RandomWalker );
96 virtual itk::ModifiedTimeType GetMTime( ) const override;
100 virtual ~RandomWalker( );
102 virtual void _BeforeGenerateData( ) override;
103 virtual TNodes _UnifySeeds( ) override;
106 // Purposely not implemented.
107 RandomWalker( const Self& other );
108 Self& operator=( const Self& other );
115 #ifndef ITK_MANUAL_INSTANTIATION
116 # include <fpa/Image/RandomWalker.hxx>
117 #endif // ITK_MANUAL_INSTANTIATION
119 #endif // __fpa__Image__RandomWalker__h__