Mercurial > hg > qm-dsp
comparison maths/MedianFilter.h @ 392:e7010b8eb0c6
Median filter standalone method, and tests
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Mon, 07 Apr 2014 14:04:39 +0100 |
parents | 2e9be0ce4374 |
children | 2ca24037ae22 |
comparison
equal
deleted
inserted
replaced
391:a1c6153d4b49 | 392:e7010b8eb0c6 |
---|---|
18 | 18 |
19 #include <algorithm> | 19 #include <algorithm> |
20 #include <cassert> | 20 #include <cassert> |
21 #include <cmath> | 21 #include <cmath> |
22 #include <iostream> | 22 #include <iostream> |
23 #include <vector> | |
23 | 24 |
24 template <typename T> | 25 template <typename T> |
25 class MedianFilter | 26 class MedianFilter |
26 { | 27 { |
27 public: | 28 public: |
68 void reset() { | 69 void reset() { |
69 for (int i = 0; i < m_size; ++i) m_frame[i] = 0; | 70 for (int i = 0; i < m_size; ++i) m_frame[i] = 0; |
70 for (int i = 0; i < m_size; ++i) m_sorted[i] = 0; | 71 for (int i = 0; i < m_size; ++i) m_sorted[i] = 0; |
71 } | 72 } |
72 | 73 |
74 static std::vector<T> filter(int size, const std::vector<T> &in) { | |
75 std::vector<T> out; | |
76 MedianFilter<T> f(size); | |
77 for (int i = 0; i < int(in.size()); ++i) { | |
78 f.push(in[i]); | |
79 T median = f.get(); | |
80 if (i >= size/2) out.push_back(median); | |
81 } | |
82 while (out.size() < in.size()) { | |
83 f.push(T()); | |
84 out.push_back(f.get()); | |
85 } | |
86 return out; | |
87 } | |
88 | |
73 private: | 89 private: |
74 const int m_size; | 90 const int m_size; |
75 T *const m_frame; | 91 T *const m_frame; |
76 T *const m_sorted; | 92 T *const m_sorted; |
77 T *const m_sortend; | 93 T *const m_sortend; |