均值滤波器原理简单,小白最近完成了固定滤波序列长度和变长度的两种C++实现,对于数组变长度的技术实现,使用了
二.滤波原理
均值滤波的原理顾名思义,取一段长度的平均值作为当前值。
三.技术实现1. 定长数组
class Filter{ public: Filter(void); ~Filter(void); double Mean(double signal, int impact); private: int cycles, mean_num; double array[5]; double Mean_o; } double Filter::Mean(double signal, int impact){ mean = impact; //注意:此处impact值与数组长度相等情况最佳,应等于5。 if (cycles > mean_num){ for(int i=2; i < mean_num; i++){ array2[mean_num+2-i] = array2[mean_num+1-i]; } array[1] = signal; double temp = 0; for(int i=0; i < Mean_num; i++){ temp = temp + array[i]; } Mean_o = temp / Mean_num; } else{ for(int i=2; i < Mean_num2; i++){ array[Mean_num2+2-i] = array2[Mean_num2+1-i]; } array[i] = signal; } cycles++; return mean_o; }
2.变长数组
class Filter{ public: Filter(void); ~Filter(void); double Mean(double signal, int impact); private: int cycles, mean_num; vector array; double Mean_o; } double Filter::Mean(double signal, int impact){ if (cycles > impact){ array.push_back(signal); array.erase(array.begin()); double temp = 0; for(int i=0; i < impact; i++){ temp = temp + array[i]; } Mean_o = temp / impact; } else{ array.push_back(signa); Mean_o = array[cycles-1]; } cycles++; return mean_o; }



