At each sample the oldest value in the window is replaced with the new value and it is checked if the new value affects the median, if so a new value for the median is selected.

Committer:
networker
Date:
Fri Jan 31 10:36:45 2014 +0000
Revision:
0:9bd415456089
An efficient implementation of a sliding window median filter

Who changed what in which revision?

UserRevisionLine numberNew contents of line
networker 0:9bd415456089 1 #ifndef FILTER_H
networker 0:9bd415456089 2 #define FILTER_H
networker 0:9bd415456089 3
networker 0:9bd415456089 4 class filter {
networker 0:9bd415456089 5 public:
networker 0:9bd415456089 6 virtual float process(float in) {
networker 0:9bd415456089 7 return in;
networker 0:9bd415456089 8 }
networker 0:9bd415456089 9 };
networker 0:9bd415456089 10
networker 0:9bd415456089 11 class medianFilter: public filter {
networker 0:9bd415456089 12 int N;
networker 0:9bd415456089 13 float *val;
networker 0:9bd415456089 14 bool *big;
networker 0:9bd415456089 15 int med, i;
networker 0:9bd415456089 16 float median;
networker 0:9bd415456089 17 int findmax();
networker 0:9bd415456089 18 int findmin();
networker 0:9bd415456089 19 public:
networker 0:9bd415456089 20 medianFilter(int window = 3); //every window >= 1 is allowed but the behaviour for even window sizes is not well defined
networker 0:9bd415456089 21 virtual float process(float);
networker 0:9bd415456089 22 };
networker 0:9bd415456089 23
networker 0:9bd415456089 24 #endif