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