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__
9 #include <itkProcessObject.h>
10 #include <itkSignedMaurerDistanceMapImageFilter.h>
11 #include <fpa/Image/Dijkstra.h>
12 #include <fpa/Image/Skeleton.h>
19 #include <fpa/Image/MinimumSpanningTree.h>
21 #include <itkMinimumMaximumImageCalculator.h>
22 #include <fpa/Image/Functors/Dijkstra/Invert.h>
31 template< class _TInputImage, class _TDistanceMap = itk::SignedMaurerDistanceMapImageFilter< _TInputImage, itk::Image< double, _TInputImage::ImageDimension > > >
33 : public itk::ProcessObject
36 typedef SkeletonFilter Self;
37 typedef itk::ProcessObject Superclass;
38 typedef itk::SmartPointer< Self > Pointer;
39 typedef itk::SmartPointer< const Self > ConstPointer;
41 typedef _TInputImage TInputImage;
42 typedef _TDistanceMap TDistanceMap;
46 TInputImage::ImageDimension
49 typedef typename TDistanceMap::OutputImageType TOutputImage;
50 typedef typename TInputImage::IndexType TIndex;
51 typedef typename TOutputImage::PixelType TScalar;
53 typedef fpa::Image::Skeleton< Self::Dimension > TSkeleton;
56 typedef std::multimap< TScalar, TIndex > _TSkeletonQueue;
61 : public fpa::Image::Dijkstra< TOutputImage, TOutputImage >
64 typedef _TDijkstra Self;
65 typedef fpa::Image::Dijkstra< TOutputImage, TOutputImage > Superclass;
66 typedef itk::SmartPointer< Self > Pointer;
67 typedef itk::SmartPointer< const Self > ConstPointer;
69 typedef typename Superclass::TNode TNode;
70 typedef typename Superclass::TMST TMST;
74 itkTypeMacro( _TDijkstra, fpa::Image::Dijkstra );
76 itkGetConstReferenceMacro( SkeletonQueue, _TSkeletonQueue );
80 virtual ~_TDijkstra( );
82 virtual void _BeforeGenerateData( ) override;
83 virtual void _UpdateOutputValue( const TNode& n ) override;
86 // Purposely not implemented
87 _TDijkstra( const Self& other );
88 Self& operator=( const Self& other );
91 _TSkeletonQueue m_SkeletonQueue;
93 typedef typename _TDijkstra::TMST _TMST;
97 itkTypeMacro( fpa::Image::SkeletonFilter, fpa::Image::Dijkstra );
99 itkBooleanMacro( SeedFromMaximumDistance );
100 itkGetConstMacro( SeedFromMaximumDistance, bool );
101 itkSetMacro( SeedFromMaximumDistance, bool );
103 itkGetConstObjectMacro( DistanceMap, TDistanceMap );
104 itkGetObjectMacro( DistanceMap, TDistanceMap );
106 itkGetConstMacro( Seed, TIndex );
107 itkSetMacro( Seed, TIndex );
110 virtual itk::ModifiedTimeType GetMTime( ) const override;
112 void SetInput( TInputImage* input );
113 TInputImage* GetInput( );
114 const TInputImage* GetInput( ) const;
116 TSkeleton* GetOutput( );
117 const TSkeleton* GetOutput( ) const;
121 virtual ~SkeletonFilter( );
123 virtual void GenerateData( ) override;
125 template< class _TMarksPointer >
127 _TMarksPointer& marks,
128 const TOutputImage* dmap,
133 std::vector< TIndex >& end_points,
134 const TOutputImage* dmap,
136 const _TSkeletonQueue& queue
140 // Purposely not implemented.
141 SkeletonFilter( const Self& other );
142 Self& operator=( const Self& other );
145 typename TDistanceMap::Pointer m_DistanceMap;
146 bool m_SeedFromMaximumDistance;
154 #ifndef ITK_MANUAL_INSTANTIATION
155 # include <fpa/Image/SkeletonFilter.hxx>
156 #endif // ITK_MANUAL_INSTANTIATION
158 #endif // __fpa__Image__SkeletonFilter__h__