]> 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 <vector>
5 #include <fpa/Image/Dijkstra.h>
6 #include <cpExtensions/DataStructures/Skeleton.h>
7 #include <itkSimpleDataObjectDecorator.h>
8
9 namespace fpa
10 {
11   namespace Image
12   {
13     /**
14      */
15     template< class _TImage >
16     class SkeletonFilter
17       : public Dijkstra< _TImage, _TImage >
18     {
19     public:
20       typedef SkeletonFilter                  Self;
21       typedef Dijkstra< _TImage, _TImage >    Superclass;
22       typedef itk::SmartPointer< Self >       Pointer;
23       typedef itk::SmartPointer< const Self > ConstPointer;
24
25       typedef _TImage TImage;
26       itkStaticConstMacro(
27         Dimension, unsigned int, TImage::ImageDimension
28         );
29
30       typedef typename Superclass::TMST  TMST;
31       typedef typename TImage::IndexType TIndex;
32       typedef itk::Image< unsigned char, Self::Dimension > TMarks;
33       typedef cpExtensions::DataStructures::Skeleton< Self::Dimension > TSkeleton;
34
35     protected:
36       typedef typename Superclass::_TQueueNode _TQueueNode;
37       typedef std::multimap< double, TIndex, std::greater< double > > _TSkeletonQueue;
38
39     public:
40       itkNewMacro( Self );
41       itkTypeMacro( fpa::Image::SkeletonFilter, itk::Object );
42
43     public:
44       TSkeleton* GetSkeleton( );
45       TMarks* GetMarks( );
46
47     protected:
48       SkeletonFilter( );
49       virtual ~SkeletonFilter( );
50
51       virtual void _BeforeGenerateData( ) fpa_OVERRIDE;
52       virtual void _UpdateResult( const _TQueueNode& n ) fpa_OVERRIDE;
53       virtual void _AfterGenerateData( ) fpa_OVERRIDE;
54
55       void _EndPoints( std::vector< TIndex >& end_points );
56       void _Skeleton( const std::vector< TIndex >& end_points );
57
58     private:
59       // Purposely not defined
60       SkeletonFilter( const Self& other );
61       Self& operator=( const Self& other );
62
63     protected:
64       _TSkeletonQueue m_SkeletonQueue;
65
66       unsigned long m_SkeletonIdx;
67       unsigned long m_MarksIdx;
68     };
69
70   } // ecapseman
71
72 } // ecapseman
73
74 #ifndef ITK_MANUAL_INSTANTIATION
75 #  include <fpa/Image/SkeletonFilter.hxx>
76 #endif // ITK_MANUAL_INSTANTIATION
77
78 #endif // __fpa__Image__SkeletonFilter__h__
79
80 // eof - $RCSfile$