1 #ifndef __fpa__Image__SkeletonFilter__h__
2 #define __fpa__Image__SkeletonFilter__h__
5 #include <fpa/Image/Dijkstra.h>
6 #include <cpExtensions/DataStructures/Skeleton.h>
7 #include <itkSimpleDataObjectDecorator.h>
15 template< class _TImage >
17 : public Dijkstra< _TImage, _TImage >
20 typedef SkeletonFilter Self;
21 typedef Dijkstra< _TImage, _TImage > Superclass;
22 typedef itk::SmartPointer< Self > Pointer;
23 typedef itk::SmartPointer< const Self > ConstPointer;
25 typedef _TImage TImage;
27 Dimension, unsigned int, TImage::ImageDimension
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;
36 typedef typename Superclass::_TQueueNode _TQueueNode;
37 typedef std::multimap< double, TIndex, std::greater< double > > _TSkeletonQueue;
41 itkTypeMacro( fpa::Image::SkeletonFilter, itk::Object );
44 TSkeleton* GetSkeleton( );
49 virtual ~SkeletonFilter( );
51 virtual void _BeforeGenerateData( ) fpa_OVERRIDE;
52 virtual void _UpdateResult( const _TQueueNode& n ) fpa_OVERRIDE;
53 virtual void _AfterGenerateData( ) fpa_OVERRIDE;
55 void _EndPoints( std::vector< TIndex >& end_points );
56 void _Skeleton( const std::vector< TIndex >& end_points );
59 // Purposely not defined
60 SkeletonFilter( const Self& other );
61 Self& operator=( const Self& other );
64 _TSkeletonQueue m_SkeletonQueue;
66 unsigned long m_SkeletonIdx;
67 unsigned long m_MarksIdx;
74 #ifndef ITK_MANUAL_INSTANTIATION
75 # include <fpa/Image/SkeletonFilter.hxx>
76 #endif // ITK_MANUAL_INSTANTIATION
78 #endif // __fpa__Image__SkeletonFilter__h__