1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
6 #ifndef __fpa__DataStructures__Image__Skeleton__h__
7 #define __fpa__DataStructures__Image__Skeleton__h__
10 #include <fpa/DataStructures/Graph.h>
11 #include <fpa/DataStructures/Image/PolyLineParametricPath.h>
15 namespace DataStructures
21 template< unsigned int _VDim >
23 : public fpa::DataStructures::Graph< typename fpa::DataStructures::Image::PolyLineParametricPath< _VDim >::TIndex, typename fpa::DataStructures::Image::PolyLineParametricPath< _VDim >::Pointer, typename fpa::DataStructures::Image::PolyLineParametricPath< _VDim >::TIndex, typename fpa::DataStructures::Image::PolyLineParametricPath< _VDim >::TIndex::LexicographicCompare >
26 typedef fpa::DataStructures::Image::PolyLineParametricPath< _VDim > TPath;
27 typedef typename TPath::TIndex TIndex;
28 typedef typename TIndex::LexicographicCompare TIndexCompare;
29 typedef typename TPath::Pointer TPathPointer;
31 itkStaticConstMacro( Dimension, unsigned int, _VDim );
33 typedef fpa::DataStructures::Graph< TIndex, TPathPointer, TIndex, TIndexCompare > Superclass;
34 typedef Skeleton Self;
35 typedef itk::SmartPointer< Self > Pointer;
36 typedef itk::SmartPointer< const Self > ConstPointer;
40 itkTypeMacro( Skeleton, fpa::Image::Graph );
43 void AddBranch( TPath* path );
44 const TPath* GetBranch( const TIndex& a, const TIndex& b ) const;
46 std::vector< TIndex > GetEndPoints( ) const;
47 std::vector< TIndex > GetBifurcations( ) const;
54 // Purposely not implemented
55 Skeleton( const Self& other );
56 Self& operator=( const Self& other );
65 #ifndef ITK_MANUAL_INSTANTIATION
66 # include <fpa/DataStructures/Image/Skeleton.hxx>
67 #endif // ITK_MANUAL_INSTANTIATION
68 #endif // __fpa__DataStructures__Image__Skeleton__h__