#ifndef __fpa__Image__SkeletonFilter__h__ #define __fpa__Image__SkeletonFilter__h__ #include #include #include #include #include namespace fpa { namespace Image { /** */ template< class _TDistanceMap, class _TCostMap > class SkeletonFilter : public itk::ProcessObject { public: typedef SkeletonFilter Self; typedef itk::ProcessObject Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; #ifdef ITK_USE_CONCEPT_CHECKING itkConceptMacro( SameDimension, ( itk::Concept::SameDimension< _TDistanceMap::ImageDimension, _TCostMap::ImageDimension > ) ); #endif typedef _TDistanceMap TDistanceMap; typedef _TCostMap TCostMap; typedef typename TCostMap::IndexType TIndex; typedef MinimumSpanningTree< TCostMap::ImageDimension > TMST; typedef cpExtensions::DataStructures::Skeleton< TCostMap::ImageDimension > TSkeleton; typedef itk::Image< unsigned char, _TCostMap::ImageDimension > TMarks; typedef itk::Functor::IndexLexicographicCompare< _TCostMap::ImageDimension > TIndexCompare; typedef std::set< TIndex, TIndexCompare > TIndicesData; typedef itk::SimpleDataObjectDecorator< TIndicesData > TIndices; public: itkNewMacro( Self ); itkTypeMacro( fpa::Image::SkeletonFilter, itk::Object ); public: _TDistanceMap* GetDistanceMap( ); const _TDistanceMap* GetDistanceMap( ) const; void SetDistanceMap( _TDistanceMap* dmap ); _TCostMap* GetCostMap( ); const _TCostMap* GetCostMap( ) const; void SetCostMap( _TCostMap* cmap ); TMST* GetMinimumSpanningTree( ); const TMST* GetMinimumSpanningTree( ) const; void SetMinimumSpanningTree( TMST* mst ); TIndices* GetEndPoints( ); const TIndices* GetEndPoints( ) const; TIndices* GetBifurcations( ); const TIndices* GetBifurcations( ) const; TSkeleton* GetSkeleton( ); const TSkeleton* GetSkeleton( ) const; TMarks* GetMarks( ); const TMarks* GetMarks( ) const; protected: SkeletonFilter( ); virtual ~SkeletonFilter( ); virtual void GenerateData( ) fpa_OVERRIDE; void _EndPoints( const TDistanceMap* dmap, const TCostMap* cmap, const TMST* mst, TIndicesData& end_points ); void _Skeleton( 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 ); }; } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION # include #endif // ITK_MANUAL_INSTANTIATION #endif // __fpa__Image__SkeletonFilter__h__ // eof - $RCSfile$