#ifndef __fpa__Image__SkeletonFilter__h__ #define __fpa__Image__SkeletonFilter__h__ #include #include #include #include #include #include /* TODO #include #include */ namespace fpa { namespace Image { /** */ template< class _TImage > class SkeletonFilter : public Dijkstra< _TImage, _TImage > { public: typedef SkeletonFilter Self; typedef Dijkstra< _TImage, _TImage > Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef _TImage TImage; itkStaticConstMacro( Dimension, unsigned int, TImage::ImageDimension ); typedef typename Superclass::TMST TMST; typedef typename TImage::IndexType TIndex; typedef itk::Functor::IndexLexicographicCompare< Self::Dimension > TIndexCmp; typedef std::set< TIndex, TIndexCmp > TIndicesData; typedef itk::SimpleDataObjectDecorator< TIndicesData > TIndices; typedef itk::Image< unsigned char, Self::Dimension > TMarks; typedef cpExtensions::DataStructures::Skeleton< Self::Dimension > TSkeleton; protected: typedef typename Superclass::_TQueueNode _TQueueNode; typedef std::multimap< double, TIndex, std::greater< double > > _TSkeletonQueue; public: itkNewMacro( Self ); itkTypeMacro( fpa::Image::SkeletonFilter, itk::Object ); public: TIndices* GetEndPoints( ); TIndices* GetBifurcations( ); TSkeleton* GetSkeleton( ); TMarks* GetMarks( ); protected: SkeletonFilter( ); virtual ~SkeletonFilter( ); virtual void _BeforeGenerateData( ) fpa_OVERRIDE; virtual void _UpdateResult( const _TQueueNode& n ) fpa_OVERRIDE; virtual void _AfterGenerateData( ) fpa_OVERRIDE; void _EndPoints( ); void _Skeleton( ); /* TODO virtual void GenerateData( ) fpa_OVERRIDE; const TDistanceMap* dmap, const TCostMap* cmap, const TMST* mst, TIndicesData& end_points ); const TDistanceMap* dmap, const TCostMap* cmap, const TMST* mst, const TIndicesData& end_points, TIndicesData& bifurcations, TSkeleton* skeleton ); */ private: // Purposely not defined SkeletonFilter( const Self& other ); Self& operator=( const Self& other ); protected: _TSkeletonQueue m_SkeletonQueue; unsigned long m_EndPointsIdx; unsigned long m_BifurcationsIdx; unsigned long m_SkeletonIdx; unsigned long m_MarksIdx; }; } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION # include #endif // ITK_MANUAL_INSTANTIATION #endif // __fpa__Image__SkeletonFilter__h__ // eof - $RCSfile$