// ========================================================================= // @author Leonardo Florez Valencia // @email florez-l@javeriana.edu.co // ========================================================================= #ifndef __fpa__Filters__Image__RandomWalker__h__ #define __fpa__Filters__Image__RandomWalker__h__ #include #include #include #include #include #include namespace fpa { namespace Filters { namespace Image { /** */ template< class _TInputImage, class _TInputLabels, class _TCostsImage > class RandomWalkerTraits : public fpa::Filters::Image::DefaultTraits< _TInputImage, _TCostsImage, typename _TInputLabels::PixelType > { public: typedef _TInputImage TInputImage; typedef _TInputLabels TInputLabels; typedef _TCostsImage TCostsImage; typedef fpa::Filters::Image::DefaultTraits< TInputImage, TCostsImage, typename _TInputLabels::PixelType > Superclass; typedef typename Superclass::TInternalTraits TInternalTraits; typedef typename Superclass::TFilter TFilter; typedef fpa::Filters::MarksInterface< TInternalTraits > TMarksInterface; typedef fpa::Filters::Image::LabelsSeedInterface< TInternalTraits > TSeedsInterface; }; /** */ template< class _TInputImage, class _TInputLabels, class _TCostsImage = itk::Image< float, _TInputImage::ImageDimension >, class _TTraits = fpa::Filters::Image::RandomWalkerTraits< _TInputImage, _TInputLabels, _TCostsImage > > class RandomWalker : public fpa::Filters::Image::Algorithm< fpa::Filters::DijkstraBase< _TTraits > > { public: typedef _TInputImage TInputImage; typedef _TInputLabels TInputLabels; typedef _TCostsImage TCostsImage; typedef _TTraits TTraits; fpaTraitsMacro( typename, TTraits ); typedef fpa::Filters::DijkstraBase< TTraits > TAlgorithm; typedef fpa::Filters::Image::Algorithm< TAlgorithm > Superclass; typedef RandomWalker Self; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef typename Superclass::TMarksImage TOutputLabels; public: itkNewMacro( Self ); itkTypeMacro( fpa::Filters::Image::RandomWalker, fpa::Filters::Image::Algorithm ); fpaFilterInputMacro( InputLabels, TInputLabels ); public: TCostsImage* GetOutputCosts( ); const TCostsImage* GetOutputCosts( ) const; TOutputLabels* GetOutputLabels( ); const TOutputLabels* GetOutputLabels( ) const; TInputImage* GetInputImage( ); const TInputImage* GetInputImage( ) const; void SetInputImage( TInputImage* image ); protected: RandomWalker( ); virtual ~RandomWalker( ); virtual const itk::DataObject* _GetReferenceInput( ) const override; virtual void _PrepareSeeds( const itk::DataObject* input ) override; private: // Purposely not implemented. RandomWalker( const Self& other ); Self& operator=( const Self& other ); protected: unsigned int m_InputLabelsIdx; }; } // ecapseman } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION # include #endif // ITK_MANUAL_INSTANTIATION #endif // __fpa__Filters__Image__RandomWalker__h__ // eof - $RCSfile$