X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FBase%2FMori.h;h=d1774d708dcc3da8aca409fd4018666d691b6fbf;hb=5c78aecb0f5a207ff020e24f99d1e9bd8c388ad1;hp=ef8d7cc475d7e286e2392b394bbd6c7dcb494f76;hpb=89393f2267e42e921571c0184320d6c6382f34ab;p=FrontAlgorithms.git diff --git a/lib/fpa/Base/Mori.h b/lib/fpa/Base/Mori.h index ef8d7cc..d1774d7 100644 --- a/lib/fpa/Base/Mori.h +++ b/lib/fpa/Base/Mori.h @@ -3,14 +3,19 @@ // @email florez-l@javeriana.edu.co // ========================================================================= +// https://stackoverflow.com/questions/22583391/peak-signal-detection-in-realtime-timeseries-data + + #ifndef __fpa__Base__Mori__h__ #define __fpa__Base__Mori__h__ #include #include -#include +#include #include #include + +#include #include namespace fpa @@ -39,7 +44,9 @@ namespace fpa typedef std::deque< TNode > TQueue; typedef std::set< TInputValue > TThresholds; typedef std::pair< TInputValue, unsigned long > TSignalData; - typedef std::map< TFrontId, TSignalData > TSignal; + typedef std::vector< TSignalData > TSignal; + + typedef fpa::Generic::PeakDetector TPeakDetector; typedef fpa::Base::Functors::RegionGrow::BinaryThreshold< TInputValue > TPredicate; public: @@ -49,7 +56,19 @@ namespace fpa ); itkGetConstMacro( InsideValue, TOutputValue ); + itkGetConstMacro( MinimumThreshold, TInputValue ); + itkSetMacro( InsideValue, TOutputValue ); + itkSetMacro( MinimumThreshold, TInputValue ); + + itkGetConstReferenceMacro( Signal, TSignal ); + itkGetConstMacro( SignalLag, unsigned long ); + itkGetConstMacro( SignalThreshold, double ); + itkGetConstMacro( SignalInfluence, double ); + + itkSetMacro( SignalLag, unsigned long ); + itkSetMacro( SignalThreshold, double ); + itkSetMacro( SignalInfluence, double ); public: virtual itk::ModifiedTimeType GetMTime( ) const override; @@ -64,13 +83,14 @@ namespace fpa const TInputValue& end, const TInputValue& delta ); + unsigned long GetNumberOfEvaluatedThresholds( ) const; + TInputValue GetOptimumThreshold( ) const; protected: Mori( ); virtual ~Mori( ); virtual void _BeforeGenerateData( ) override; - virtual void _AfterGenerateData( ) override; virtual void _FinishOneLoop( ) override; virtual void _ComputeOutputValue( TNode& n ) override; virtual void _UpdateOutputValue( TNode& n ) override; @@ -92,8 +112,21 @@ namespace fpa TQueue m_Queues[ 2 ]; unsigned int m_CurrentQueue; unsigned long m_Count; - TSignal m_Signal; + TPeakDetector m_PeakDetector; + + TSignal m_Signal; + unsigned long m_SignalLag; + double m_SignalThreshold; + double m_SignalInfluence; + std::vector< double > m_FilteredSignal; + std::vector< double > m_SignalAverages; + std::vector< double > m_SignalDeviations; + std::vector< short > m_SignalPeaks; + double m_CurrentAverage; + double m_CurrentVariance; + + TInputValue m_MinimumThreshold; TOutputValue m_InsideValue; };