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;