]> Creatis software - clitk.git/blob - common/clitkSignal.h
fc57b78de7d649b92d5bc7e3ba7e222dc7529776
[clitk.git] / common / clitkSignal.h
1 #ifndef CLITKSIGNAL_H
2 #define CLITKSIGNAL_H
3
4 //Adapted from Signal.hh in ilr (Simon)
5
6 #include "clitkCommon.h"
7 #include "clitkIO.h"
8
9 //include external library
10 //#include <fftw3.h>
11 //#include <complex>
12
13 //itk include
14 #include "itkImage.h"
15 #include "itkImageRegionConstIterator.h"
16 #include "itkPointSet.h"
17 // #include "itkBSplineScatteredDataPointSetToImageFilter.h"
18
19 using namespace std;
20
21 namespace clitk{
22
23 class Signal{
24   public:
25
26   //=====================================================================================
27   //Typedefs
28   typedef double SignalValueType;
29   typedef vector< SignalValueType > SignalType;
30   typedef SignalType::iterator iterator;
31   typedef SignalType::const_iterator const_iterator;
32   //typedef vector< complex<double> > SIGNAL_FFT_TYPE;
33   
34   typedef itk::Image<double,1> ImageType;
35   typedef itk::Vector<double,1> VectorType;
36   typedef itk::Image<VectorType,1> VectorImageType;
37  
38   //=====================================================================================
39   //Constructors - Destructors
40   Signal(){SetSamplingPeriod(1.);}
41   Signal(double sp):m_SamplingPeriod(sp){;}
42   Signal(const string fileName){Read(fileName);}
43   Signal(unsigned int size, SignalValueType voidValue=0.)
44   {
45     m_Data.resize(size,voidValue);
46     SetSamplingPeriod(1);
47   };
48   
49   ~Signal(){}
50
51   //=====================================================================================  
52   //IO
53   void Read(string fileName);
54   void Read(string fileName, int col);
55   void ReadXDR(string fileName);
56   void Write(const string fileName);
57   
58   //=====================================================================================
59   //Common vector properties for signals
60   unsigned int size() const {return m_Data.size();}
61   iterator begin(){return m_Data.begin();}
62   iterator end() {return m_Data.end();}
63   const_iterator begin() const {return m_Data.begin();}
64   const_iterator end() const {return m_Data.end();}
65   SignalValueType front() {return m_Data.front();}
66   SignalValueType back() {return m_Data.back();}
67   void push_back(SignalValueType value){return m_Data.push_back(value);}    
68   void resize(unsigned int newSize){return m_Data.resize(newSize);}
69   void clear(){m_Data.clear();}
70   
71   void print(ostream & os = cout, const int level = 0) const;
72     
73   //=====================================================================================
74   //Operators
75   SignalValueType& operator[](int index){return m_Data[index];}
76   const SignalValueType& operator[](int index) const {return m_Data[index];}
77   Signal & operator/=(Signal & d);
78   Signal & operator*=(Signal & d);
79   
80   //Functions
81   Signal Normalize(double newMin=0.,double newMax=1.);
82   vector<double> GetGlobalMinMax() const;
83   double GetGlobalMean() const;
84   Signal MovingAverageFilter ( unsigned int length);
85   Signal GaussLikeFilter ();
86   Signal NormalizeMeanStdDev(double newMean=0.5,double newStdDev=0.5);
87   //Signal HighPassFilter (double sampPeriod, double cutOffFrequency );
88   //Signal LowPassFilter (double sampPeriod, double cutOffFrequency );
89   //double MaxFreq(const Signal &sig,SIGNAL_FFT_TYPE & fft);
90   //void OneDForwardFourier(const Signal& input,SIGNAL_FFT_TYPE & fft);
91   //void OneDBackwardFourier(SIGNAL_FFT_TYPE & fft, Signal &output);
92   Signal DetectLocalExtrema(unsigned int width);
93   Signal LimPhase();
94   Signal MonPhase();
95   Signal MonPhaseDE(double ee, double ei);
96   double SSD(const Signal &sig2) const;
97   Signal LinearlyInterpolateScatteredValues();
98   //   Signal ApproximateScatteredValuesWithBSplines (unsigned int splineOrder, unsigned int numberOfControlPoints); 
99   Signal LimitSignalRange();  
100   
101   void AddValue(double v);
102   void ComputeAugmentedSpace(Signal & outputX, Signal & outputY, unsigned int delay) const;
103
104   //     double Compare(Signal & sigRef);
105   //     int DerivateSigne( const_iterator & it) const;
106   //     void CenteredFiniteDifferences(Signal & result,int order,int* weights);
107   //     void FirstDerivate(Signal & result,int order);
108   //     void SecondDerivate(Signal & result,int order);
109   
110   //     void Crop(unsigned int posmin, unsigned int posmax);
111   //     void LinearResample(const unsigned int newSize);
112
113  
114   //=====================================================================================
115   // Get and Set function
116   double GetSamplingPeriod() const {return m_SamplingPeriod;}
117   void SetSamplingPeriod(double sp){m_SamplingPeriod=sp;}
118
119   //=====================================================================================
120   //Conversion for using itk filters
121   Signal ConvertImageToSignal(ImageType::Pointer image);
122   ImageType::Pointer ConvertSignalToImage( Signal);
123   Signal ConvertVectorImageToSignal (VectorImageType::Pointer m);   
124   
125 protected:  
126   SignalType m_Data;
127   double m_SamplingPeriod;
128 };
129 }
130 #endif