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.
filter.h@0:9bd415456089, 2014-01-31 (annotated)
- 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?
User | Revision | Line number | New 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 |