// ========================================================================= // @author Leonardo Florez Valencia // @email florez-l@javeriana.edu.co // ========================================================================= #ifndef __fpa__Image__ExtractAxisFilter__h__ #define __fpa__Image__ExtractAxisFilter__h__ #include #include #include #include namespace fpa { namespace Image { /** */ template< class _TInputImage, class _TScalar > class ExtractAxisFilter : public itk::ProcessObject { public: typedef ExtractAxisFilter Self; typedef itk::ProcessObject Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef _TInputImage TInputImage; typedef _TScalar TScalar; typedef typename TInputImage::IndexType TIndex; typedef typename TInputImage::PointType TPoint; itkStaticConstMacro( Dimension, unsigned int, TInputImage::ImageDimension ); typedef itk::Image< TScalar, Self::Dimension > TScalarImage; typedef itk::ImageToImageFilter< TInputImage, TScalarImage > TCenterness; typedef fpa::Image::PolyLineParametricPath< Self::Dimension > TPath; typedef fpa::Image::Dijkstra< TScalarImage, TScalarImage > TDijkstra; public: itkNewMacro( Self ); itkTypeMacro( fpa::Image::ExtractAxisFilter, fpa::Image::Dijkstra ); itkGetConstObjectMacro( Centerness, TCenterness ); itkGetObjectMacro( Centerness, TCenterness ); itkSetObjectMacro( Centerness, TCenterness ); itkGetConstMacro( StartIndex, TIndex ); itkSetMacro( StartIndex, TIndex ); itkGetConstMacro( EndIndex, TIndex ); itkSetMacro( EndIndex, TIndex ); public: virtual itk::ModifiedTimeType GetMTime( ) const override; virtual void AddSeed( const TIndex& seed ); virtual void AddSeed( const TPoint& seed ); virtual void ClearSeeds( ); void SetInput( TInputImage* input ); TInputImage* GetInput( ); const TInputImage* GetInput( ) const; TPath* GetOutput( ); const TPath* GetOutput( ) const; protected: ExtractAxisFilter( ); virtual ~ExtractAxisFilter( ); virtual void GenerateData( ) override; private: // Purposely not implemented. ExtractAxisFilter( const Self& other ); Self& operator=( const Self& other ); protected: typename TCenterness::Pointer m_Centerness; typename TDijkstra::Pointer m_Dijkstra; TIndex m_StartIndex; TIndex m_EndIndex; }; } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION # include #endif // ITK_MANUAL_INSTANTIATION #endif // __fpa__Image__ExtractAxisFilter__h__ // eof - $RCSfile$