]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Image/SkeletonFilter.h
0ed3789ae0233df298ac811a10f337680d73bbff
[FrontAlgorithms.git] / lib / fpa / Image / SkeletonFilter.h
1 #ifndef __fpa__Image__SkeletonFilter__h__
2 #define __fpa__Image__SkeletonFilter__h__
3
4 #include <fpa/Image/Dijkstra.h>
5 #include <cpExtensions/DataStructures/Skeleton.h>
6 #include <itkSimpleDataObjectDecorator.h>
7 #include <functional>
8 #include <map>
9 #include <set>
10
11 /* TODO
12    #include <itkProcessObject.h>
13    #include <fpa/Image/MinimumSpanningTree.h>
14 */
15
16 namespace fpa
17 {
18   namespace Image
19   {
20     /**
21      */
22     template< class _TImage >
23     class SkeletonFilter
24       : public Dijkstra< _TImage, _TImage >
25     {
26     public:
27       typedef SkeletonFilter                  Self;
28       typedef Dijkstra< _TImage, _TImage >    Superclass;
29       typedef itk::SmartPointer< Self >       Pointer;
30       typedef itk::SmartPointer< const Self > ConstPointer;
31
32       typedef _TImage TImage;
33       itkStaticConstMacro(
34         Dimension, unsigned int, TImage::ImageDimension
35         );
36
37       typedef typename Superclass::TMST  TMST;
38       typedef typename TImage::IndexType TIndex;
39
40       typedef
41       itk::Functor::IndexLexicographicCompare< Self::Dimension > TIndexCmp;
42       typedef std::set< TIndex, TIndexCmp >                      TIndicesData;
43       typedef itk::SimpleDataObjectDecorator< TIndicesData >     TIndices;
44       typedef itk::Image< unsigned char, Self::Dimension >       TMarks;
45       typedef
46       cpExtensions::DataStructures::Skeleton< Self::Dimension >  TSkeleton;
47
48     protected:
49       typedef typename Superclass::_TQueueNode _TQueueNode;
50       typedef
51       std::multimap< double, TIndex, std::greater< double > >
52       _TSkeletonQueue;
53
54     public:
55       itkNewMacro( Self );
56       itkTypeMacro( fpa::Image::SkeletonFilter, itk::Object );
57
58     public:
59       TIndices* GetEndPoints( );
60       TIndices* GetBifurcations( );
61       TSkeleton* GetSkeleton( );
62       TMarks* GetMarks( );
63
64     protected:
65       SkeletonFilter( );
66       virtual ~SkeletonFilter( );
67
68       virtual void _BeforeGenerateData( ) fpa_OVERRIDE;
69       virtual void _UpdateResult( const _TQueueNode& n ) fpa_OVERRIDE;
70       virtual void _AfterGenerateData( ) fpa_OVERRIDE;
71
72       void _EndPoints( );
73       void _Skeleton( );
74
75       /* TODO
76          virtual void GenerateData( ) fpa_OVERRIDE;
77          const TDistanceMap* dmap,
78          const TCostMap* cmap,
79          const TMST* mst,
80          TIndicesData& end_points
81          );
82          const TDistanceMap* dmap,
83          const TCostMap* cmap,
84          const TMST* mst,
85          const TIndicesData& end_points,
86          TIndicesData& bifurcations,
87          TSkeleton* skeleton
88          );
89       */
90
91     private:
92       // Purposely not defined
93       SkeletonFilter( const Self& other );
94       Self& operator=( const Self& other );
95
96     protected:
97       _TSkeletonQueue m_SkeletonQueue;
98
99       unsigned long m_EndPointsIdx;
100       unsigned long m_BifurcationsIdx;
101       unsigned long m_SkeletonIdx;
102       unsigned long m_MarksIdx;
103     };
104
105   } // ecapseman
106
107 } // ecapseman
108
109 #ifndef ITK_MANUAL_INSTANTIATION
110 #  include <fpa/Image/SkeletonFilter.hxx>
111 #endif // ITK_MANUAL_INSTANTIATION
112
113 #endif // __fpa__Image__SkeletonFilter__h__
114
115 // eof - $RCSfile$