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