1 #ifndef __fpa__Image__SkeletonFilter__h__
2 #define __fpa__Image__SkeletonFilter__h__
6 #include <fpa/Image/Dijkstra.h>
7 #include <cpExtensions/DataStructures/Skeleton.h>
8 #include <itkSimpleDataObjectDecorator.h>
16 template< class _TImage >
18 : public Dijkstra< _TImage, _TImage >
21 typedef SkeletonFilter Self;
22 typedef Dijkstra< _TImage, _TImage > Superclass;
23 typedef itk::SmartPointer< Self > Pointer;
24 typedef itk::SmartPointer< const Self > ConstPointer;
26 typedef _TImage TImage;
28 Dimension, unsigned int, TImage::ImageDimension
31 typedef typename Superclass::TMST TMST;
32 typedef typename TImage::IndexType TIndex;
33 typedef itk::Image< unsigned char, Self::Dimension > TMarks;
34 typedef cpExtensions::DataStructures::Skeleton< Self::Dimension > TSkeleton;
37 typedef typename Superclass::_TQueueNode _TQueueNode;
38 typedef std::multimap< double, TIndex, std::greater< double > > _TSkeletonQueue;
39 typedef std::map< TIndex, TIndex, typename TIndex::LexicographicCompare > _TAdjacencies;
43 itkTypeMacro( fpa::Image::SkeletonFilter, itk::Object );
46 TSkeleton* GetSkeleton( );
51 virtual ~SkeletonFilter( );
53 virtual void _BeforeGenerateData( ) override;
54 virtual void _UpdateResult( const _TQueueNode& n ) override;
55 virtual void _AfterGenerateData( ) override;
57 void _EndPoints( std::vector< TIndex >& end_points, _TAdjacencies& A );
58 void _Skeleton( const std::vector< TIndex >& end_points, _TAdjacencies& A );
59 void _MarkSphere( const TIndex& idx );
62 // Purposely not defined
63 SkeletonFilter( const Self& other );
64 Self& operator=( const Self& other );
67 _TSkeletonQueue m_SkeletonQueue;
69 unsigned long m_SkeletonIdx;
70 unsigned long m_MarksIdx;
77 #ifndef ITK_MANUAL_INSTANTIATION
78 # include <fpa/Image/SkeletonFilter.hxx>
79 #endif // ITK_MANUAL_INSTANTIATION
81 #endif // __fpa__Image__SkeletonFilter__h__