1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
6 #ifndef __fpa__Image__SkeletonFilter__h__
7 #define __fpa__Image__SkeletonFilter__h__
11 #include <itkProcessObject.h>
12 #include <itkSignedMaurerDistanceMapImageFilter.h>
14 #include <fpa/Image/Dijkstra.h>
15 #include <fpa/Image/Skeleton.h>
23 template< class _TInputImage, class _TDistanceMap = itk::SignedMaurerDistanceMapImageFilter< _TInputImage, itk::Image< double, _TInputImage::ImageDimension > > >
25 : public itk::ProcessObject
28 typedef SkeletonFilter Self;
29 typedef itk::ProcessObject Superclass;
30 typedef itk::SmartPointer< Self > Pointer;
31 typedef itk::SmartPointer< const Self > ConstPointer;
33 typedef _TInputImage TInputImage;
34 typedef _TDistanceMap TDistanceMap;
38 TInputImage::ImageDimension
41 typedef typename TDistanceMap::OutputImageType TOutputImage;
42 typedef typename TInputImage::IndexType TIndex;
43 typedef typename TOutputImage::PixelType TScalar;
45 typedef fpa::Image::Skeleton< Self::Dimension > TSkeleton;
48 typedef std::multimap< TScalar, TIndex > _TSkeletonQueue;
53 : public fpa::Image::Dijkstra< TOutputImage, TOutputImage >
56 typedef _TDijkstra Self;
57 typedef fpa::Image::Dijkstra< TOutputImage, TOutputImage > Superclass;
58 typedef itk::SmartPointer< Self > Pointer;
59 typedef itk::SmartPointer< const Self > ConstPointer;
61 typedef typename Superclass::TNode TNode;
62 typedef typename Superclass::TMST TMST;
66 itkTypeMacro( _TDijkstra, fpa::Image::Dijkstra );
68 itkGetConstReferenceMacro( SkeletonQueue, _TSkeletonQueue );
72 virtual ~_TDijkstra( );
74 virtual void _BeforeGenerateData( ) override;
75 virtual void _UpdateOutputValue( const TNode& n ) override;
78 // Purposely not implemented
79 _TDijkstra( const Self& other );
80 Self& operator=( const Self& other );
83 _TSkeletonQueue m_SkeletonQueue;
85 typedef typename _TDijkstra::TMST _TMST;
89 itkTypeMacro( fpa::Image::SkeletonFilter, fpa::Image::Dijkstra );
91 itkBooleanMacro( SeedFromMaximumDistance );
92 itkGetConstMacro( SeedFromMaximumDistance, bool );
93 itkSetMacro( SeedFromMaximumDistance, bool );
95 itkGetConstObjectMacro( DistanceMap, TDistanceMap );
96 itkGetObjectMacro( DistanceMap, TDistanceMap );
98 itkGetConstMacro( Seed, TIndex );
99 itkSetMacro( Seed, TIndex );
102 virtual itk::ModifiedTimeType GetMTime( ) const override;
104 void SetInput( TInputImage* input );
105 TInputImage* GetInput( );
106 const TInputImage* GetInput( ) const;
108 TSkeleton* GetOutput( );
109 const TSkeleton* GetOutput( ) const;
113 virtual ~SkeletonFilter( );
115 virtual void GenerateData( ) override;
117 template< class _TMarksPointer >
119 _TMarksPointer& marks,
120 const TOutputImage* dmap,
125 std::vector< TIndex >& end_points,
126 const TOutputImage* dmap,
128 const _TSkeletonQueue& queue
132 // Purposely not implemented.
133 SkeletonFilter( const Self& other );
134 Self& operator=( const Self& other );
137 typename TDistanceMap::Pointer m_DistanceMap;
138 bool m_SeedFromMaximumDistance;
146 #ifndef ITK_MANUAL_INSTANTIATION
147 # include <fpa/Image/SkeletonFilter.hxx>
148 #endif // ITK_MANUAL_INSTANTIATION
150 #endif // __fpa__Image__SkeletonFilter__h__