X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FFilters%2FMori.h;fp=lib%2Ffpa%2FFilters%2FMori.h;h=0bda0ff6537fd79e16abd02a749ca6589770af44;hb=2047276c8f1a02432fbcc7014722d460d6c1e60f;hp=0000000000000000000000000000000000000000;hpb=3c639e5da479c7216a0a302ffa156ac6762caeed;p=FrontAlgorithms.git diff --git a/lib/fpa/Filters/Mori.h b/lib/fpa/Filters/Mori.h new file mode 100644 index 0000000..0bda0ff --- /dev/null +++ b/lib/fpa/Filters/Mori.h @@ -0,0 +1,124 @@ +// ========================================================================= +// @author Leonardo Florez Valencia +// @email florez-l@javeriana.edu.co +// ========================================================================= +#ifndef __fpa__Filters__Mori__h__ +#define __fpa__Filters__Mori__h__ + +#include +#include +#include +#include +#include +#include + +namespace fpa +{ + namespace Filters + { + /** + */ + template< class _TTraits > + class Mori + : public fpa::Filters::Algorithm< _TTraits > + { + public: + typedef _TTraits TTraits; + fpaTraitsMacro( typename, TTraits ); + + typedef fpa::Filters::Algorithm< TTraits > Superclass; + typedef Mori Self; + typedef itk::SmartPointer< Self > Pointer; + typedef itk::SmartPointer< const Self > ConstPointer; + + typedef std::deque< TNode > TQueue; + typedef std::set< TInputValue > TThresholds; + typedef fpa::Common::PeakDetector TPeakDetector; + typedef TPeakDetector::TPeak TPeak; + typedef fpa::Functors::RegionGrow::BinaryThreshold< TInputValue > TPredicate; + + protected: + itkConceptMacro( + Check_TOutputValue, + ( itk::Concept::IsUnsignedInteger< TOutputValue > ) + ); + + public: + itkTypeMacro( fpa::Filters::Image::Mori, fpa::Filters::Algorithm ); + + itkGetConstMacro( InsideValue, TOutputValue ); + itkSetMacro( InsideValue, TOutputValue ); + + itkGetConstMacro( MinimumThreshold, TInputValue ); + itkSetMacro( MinimumThreshold, TInputValue ); + + public: + TOutputValue GetOutsideValue( ) const; + void SetOutsideValue( const TOutputValue& v ); + + unsigned long GetSignalKernelSize( ) const; + void SetSignalKernelSize( unsigned long k ); + + double GetSignalThreshold( ) const; + void SetSignalThreshold( double t ); + + double GetSignalInfluence( ) const; + void SetSignalInfluence( double i ); + + void ClearThresholds( ); + void AddThreshold( const TInputValue& thr ); + void SetThresholds( + const TInputValue& lower, + const TInputValue& upper, + const TInputValue& delta + ); + const TThresholds& GetThresholds( ) const; + unsigned long GetNumberOfEvaluatedThresholds( ) const; + TInputValue GetOptimumThreshold( ) const; + void GetSignalValues( + unsigned long i, double& x, double& y, TPeak& p + ) const; + + protected: + Mori( ); + virtual ~Mori( ); + + virtual void _BeforeGenerateData( ); + virtual void _Reinitialize( ); + virtual void _UpdateOutputValue( TNode& n ) override; + virtual void _QueueClear( ) override; + virtual TNode _QueuePop( ) override; + virtual void _QueuePush( const TNode& n ) override; + virtual unsigned long _QueueSize( ) const override; + virtual void _ComputeOutputValue( TNode& n ) override; + + private: + // Purposely not implemented. + Mori( const Self& other ); + Self& operator=( const Self& other ); + + protected: + typename TPredicate::Pointer m_Predicate; + + TOutputValue m_InsideValue; + TInputValue m_MinimumThreshold; + TThresholds m_Thresholds; + typename TThresholds::const_iterator m_CurrThr; + + TQueue m_Queues[ 2 ]; + unsigned int m_CurrQueue; + double m_CurrCount; + + TPeakDetector m_PeakDetector; + }; + + } // ecapseman + +} // ecapseman + +#ifndef ITK_MANUAL_INSTANTIATION +# include +#endif // ITK_MANUAL_INSTANTIATION + +#endif // __fpa__Filters__Mori__h__ +// eof - $RCSfile$