+++ /dev/null
-// =========================================================================
-// @author Leonardo Florez Valencia
-// @email florez-l@javeriana.edu.co
-// =========================================================================
-#ifndef __fpa__Filters__Image__Skeleton__h__
-#define __fpa__Filters__Image__Skeleton__h__
-
-#include <map>
-#include <itkProcessObject.h>
-#include <itkSignedMaurerDistanceMapImageFilter.h>
-#include <fpa/Filters/Image/Dijkstra.h>
-#include <fpa/DataStructures/Image/Skeleton.h>
-
-namespace fpa
-{
- namespace Filters
- {
- namespace Image
- {
- /**
- */
- template< class _TInputImage, class _TDistanceMap = itk::SignedMaurerDistanceMapImageFilter< _TInputImage, itk::Image< double, _TInputImage::ImageDimension > > >
- class Skeleton
- : public itk::ProcessObject
- {
- public:
- typedef Skeleton Self;
- typedef itk::ProcessObject Superclass;
- typedef itk::SmartPointer< Self > Pointer;
- typedef itk::SmartPointer< const Self > ConstPointer;
-
- typedef _TInputImage TInputImage;
- typedef _TDistanceMap TDistanceMap;
- itkStaticConstMacro(
- Dimension,
- unsigned int,
- TInputImage::ImageDimension
- );
-
- typedef typename TDistanceMap::OutputImageType TOutputImage;
- typedef typename TInputImage::IndexType TIndex;
- typedef typename TOutputImage::PixelType TScalar;
-
- typedef fpa::DataStructures::Image::Skeleton< Self::Dimension > TSkeleton;
-
- protected:
- typedef std::multimap< TScalar, TIndex > _TSkeletonQueue;
-
- /**
- */
- class _TDijkstra
- : public fpa::Filters::Image::Dijkstra< TOutputImage, TOutputImage >
- {
- public:
- typedef fpa::Filters::Image::Dijkstra< TOutputImage, TOutputImage > Superclass;
- typedef _TDijkstra Self;
- typedef itk::SmartPointer< Self > Pointer;
- typedef itk::SmartPointer< const Self > ConstPointer;
-
- typedef typename Superclass::TNode TNode;
- typedef typename Superclass::TMST TMST;
-
- public:
- itkNewMacro( Self );
- itkTypeMacro( _TDijkstra, fpa::Image::Dijkstra );
-
- itkGetConstReferenceMacro( SkeletonQueue, _TSkeletonQueue );
-
- protected:
- _TDijkstra( );
- virtual ~_TDijkstra( );
-
- virtual void _BeforeGenerateData( ) override;
- virtual void _UpdateOutputValue( TNode& n ) override;
-
- private:
- // Purposely not implemented
- _TDijkstra( const Self& other );
- Self& operator=( const Self& other );
-
- protected:
- _TSkeletonQueue m_SkeletonQueue;
- };
- typedef typename _TDijkstra::TMST _TMST;
-
- public:
- itkNewMacro( Self );
- itkTypeMacro( fpa::Image::Skeleton, fpa::Image::Dijkstra );
-
- itkBooleanMacro( SeedFromMaximumDistance );
- itkGetConstMacro( SeedFromMaximumDistance, bool );
- itkSetMacro( SeedFromMaximumDistance, bool );
-
- itkGetConstObjectMacro( DistanceMap, TDistanceMap );
- itkGetObjectMacro( DistanceMap, TDistanceMap );
-
- itkGetConstMacro( Seed, TIndex );
- itkSetMacro( Seed, TIndex );
-
- public:
- virtual itk::ModifiedTimeType GetMTime( ) const override;
-
- void SetInput( TInputImage* input );
- TInputImage* GetInput( );
- const TInputImage* GetInput( ) const;
-
- TSkeleton* GetOutput( );
- const TSkeleton* GetOutput( ) const;
-
- protected:
- Skeleton( );
- virtual ~Skeleton( );
-
- virtual void GenerateData( ) override;
-
- template< class _TMarksPointer >
- void _MarkSphere(
- _TMarksPointer& marks,
- const TOutputImage* dmap,
- const TIndex& center
- );
-
- void _EndPoints(
- std::vector< TIndex >& end_points,
- const TOutputImage* dmap,
- const _TMST* mst,
- const _TSkeletonQueue& queue
- );
-
- private:
- // Purposely not implemented.
- Skeleton( const Self& other );
- Self& operator=( const Self& other );
-
- protected:
- typename TDistanceMap::Pointer m_DistanceMap;
- bool m_SeedFromMaximumDistance;
- TIndex m_Seed;
- };
-
- } // ecapseman
-
- } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-# include <fpa/Filters/Image/Skeleton.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __fpa__Filters__Image__Skeleton__h__
-
-// eof - $RCSfile$