2015-07-10 06:01:56 -07:00
|
|
|
package com.irnems;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Andrey Belomutskiy
|
|
|
|
* 8/5/13
|
|
|
|
*/
|
2018-09-02 15:59:02 -07:00
|
|
|
public class MedianFilter {
|
2015-07-10 06:01:56 -07:00
|
|
|
private List<Double> values;
|
|
|
|
private int size;
|
|
|
|
|
2018-09-02 15:59:02 -07:00
|
|
|
public MedianFilter(List<Double> values, int size) {
|
2015-07-10 06:01:56 -07:00
|
|
|
this.values = values;
|
|
|
|
this.size = size;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static List<Double> filter(List<Double> values, int size) {
|
2018-09-02 15:59:02 -07:00
|
|
|
return new MedianFilter(values, size).filter();
|
2015-07-10 06:01:56 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
private List<Double> filter() {
|
|
|
|
|
2018-09-02 15:59:02 -07:00
|
|
|
List<Double> result = new ArrayList<>();
|
2015-07-10 06:01:56 -07:00
|
|
|
|
|
|
|
for(int i=0;i<values.size();i++) {
|
|
|
|
|
|
|
|
int fromIndex = Math.max(0, i - size);
|
|
|
|
|
2018-09-02 15:59:02 -07:00
|
|
|
List<Double> copy = new ArrayList<>(values.subList(fromIndex, i + 1));
|
2015-07-10 06:01:56 -07:00
|
|
|
|
|
|
|
Collections.sort(copy);
|
|
|
|
|
|
|
|
result.add(copy.get(copy.size() / 2));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|