]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Image/ExtractAxisFilter.h
25eee47ed9315ecb2ab2b576e3c5d60fa9f8f52e
[FrontAlgorithms.git] / lib / fpa / Image / ExtractAxisFilter.h
1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5
6 #ifndef __fpa__Image__ExtractAxisFilter__h__
7 #define __fpa__Image__ExtractAxisFilter__h__
8
9 #include <itkProcessObject.h>
10 #include <itkSignedMaurerDistanceMapImageFilter.h>
11
12 #include <fpa/Image/Dijkstra.h>
13 #include <fpa/Image/PolyLineParametricPath.h>
14
15 namespace fpa
16 {
17   namespace Image
18   {
19     /**
20      */
21     template< class _TInputImage, class _TScalar, class _TCenterness = itk::SignedMaurerDistanceMapImageFilter< _TInputImage, itk::Image< _TScalar, _TInputImage::ImageDimension > > >
22     class ExtractAxisFilter
23       : public itk::ProcessObject
24     {
25     public:
26       typedef ExtractAxisFilter               Self;
27       typedef itk::ProcessObject              Superclass;
28       typedef itk::SmartPointer< Self >       Pointer;
29       typedef itk::SmartPointer< const Self > ConstPointer;
30
31       typedef _TInputImage TInputImage;
32       typedef _TScalar     TScalar;
33       typedef _TCenterness TCenterness;
34       itkStaticConstMacro(
35         Dimension,
36         unsigned int,
37         TInputImage::ImageDimension
38         );
39
40       typedef typename TCenterness::OutputImageType TOutputImage;
41       typedef typename TInputImage::IndexType       TIndex;
42
43       typedef fpa::Image::PolyLineParametricPath< Self::Dimension > TPath;
44       typedef fpa::Image::Dijkstra< TOutputImage, TOutputImage > TDijkstra;
45
46     public:
47       itkNewMacro( Self );
48       itkTypeMacro( fpa::Image::ExtractAxisFilter, fpa::Image::Dijkstra );
49
50       itkGetConstObjectMacro( Centerness, TCenterness );
51       itkGetObjectMacro( Centerness, TCenterness );
52
53     public:
54       virtual itk::ModifiedTimeType GetMTime( ) const override;
55
56       virtual void AddSeed( const TVertex& seed );
57       virtual void AddSeed( const TPoint& seed );
58       virtual void ClearSeeds( );
59
60       void SetInput( TInputImage* input );
61       TInputImage* GetInput( );
62       const TInputImage* GetInput( ) const;
63
64       TPath* GetOutput( );
65       const TPath* GetOutput( ) const;
66
67     protected:
68       ExtractAxisFilter( );
69       virtual ~ExtractAxisFilter( );
70
71       virtual void GenerateData( ) override;
72
73     private:
74       // Purposely not implemented.
75       ExtractAxisFilter( const Self& other );
76       Self& operator=( const Self& other );
77
78     protected:
79       typename TCenterness::Pointer m_Centerness;
80       typename TDijkstra::Pointer m_Dijkstra;
81     };
82
83   } // ecapseman
84
85 } // ecapseman
86
87 #ifndef ITK_MANUAL_INSTANTIATION
88 #  include <fpa/Image/ExtractAxisFilter.hxx>
89 #endif // ITK_MANUAL_INSTANTIATION
90
91 #endif // __fpa__Image__ExtractAxisFilter__h__
92
93 // eof - $RCSfile$