滑动均值Moving Average与中值滤波Moving Median
来源:互联网 发布:知乎 怎么死最舒服 编辑:程序博客网 时间:2024/05/01 19:47
1. 滑动均值滤波(MovingAverage)
方法:
把连续取N个采样值看成一个队列,队列的长度固定为N,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)。把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。
#include "iostream"#include "list"using namespace std;int main(){ int sum = 0; double real = 0; int Length = 4; // 四个一组int i[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};size_t sz = sizeof(i)/sizeof(int); list<int> int_list(i, i + Length);cout << "list_size = "<<sz<<endl; list<int>::iterator i0; for( i0 = int_list.begin (); i0 != int_list.end (); i0++) {// cout << *i0 << endl; sum += *i0; } real = sum / (double)Length;cout << "1 averg = "<<real << endl;// sum = sum - *int_list.begin () ;//cout << "Remove begin "<<*int_list.begin ()<<" sum = "<<sum << endl;// int_list.pop_front ();// int_list.push_back (i[Length]); // 5// sum = sum + int_list.back ();// real = sum / (double)Length;//cout << "Add last "<<int_list.back ()<< " sum = "<<sum << endl;//cout << "2 real = "<<real << endl;int total_loop = sz -Length +1; for (int var = Length; var < sz; ++var) // i[4] = 5 { sum = sum - *int_list.begin () ;cout << "Remove begin "<<*int_list.begin ()<<" sum = "<<sum << endl; int_list.pop_front (); int_list.push_back (i[var]); // 5 sum = sum + int_list.back () ;cout << "Add last "<<int_list.back ()<< " sum = "<<sum << endl; real = sum / (double)Length;cout << total_loop + var -sz +1<<" averg = "<<real << endl; }return 0;}
==============================2017.02====================================
有源代码 MovingAverage
http://blog.csdn.net/u014365862/article/details/54380313
2. 加权滑动均值
#include "iostream"#include "deque"#include <algorithm>using namespace std;//const int Length = 4;//int coe[Length] = {2, 4, 8, 6};const int Length = 10;int coe[Length] = {1, 1, 2, 3, 3, 16, 17, 19 ,19, 19};// 100; 7.6 ~ 13.6int sum_coe = 0;int main(){ int sum = 0; double real = 0; for(int i =0; i < Length; ++i) { sum_coe += coe[i]; }cout<<"sum_coe = "<< sum_coe<<endl; // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int i[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};// int i[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 9, 10, 11, 10}; size_t sz = sizeof(i)/sizeof(int); size_t n = sz / Length; deque<int> int_list(i, i + Length); for (int var = 0; var < Length; ++var) { sum += (int_list.at(var) )* coe[var]; } real = sum / (double)sum_coe;cout << "sum1 = "<<sum << endl;cout << "1 real = "<<real << endl;int total_loop = sz -Length +1; for (int var = Length; var < sz; ++var) // i[4] = 5 { sum = 0;cout << "Remove begin "<<*int_list.begin () << endl; int_list.pop_front (); int_list.push_back (i[var]); // 5 for (int i = 0; i < Length; ++i) { sum += (int_list.at(i) )* coe[i]; } real = sum / (double)sum_coe;cout << "Add last "<<int_list.back ()<< " sum = "<<sum << endl;cout << total_loop + var -sz +1<<" averg = "<<real << endl; }return 0;}
3. 中值滤波(Moving Median)
选一个数周围的奇数个临近值,作为一组,排序,用中值替代原来那个数。
/**************************** static number of array.***************************/#include "iostream"#include "deque"#include "list"#include <algorithm>using namespace std;const int Length = 7;const int halfSamplecount = Length /2 + 1; // 4//void outputArray ( int *i)//void outputArray ( int i[])void outputArray ( int (&i)[18]) // if use upper, the sz below compute strangely.//void outputArray ( int (&i)[13]) // if use upper, the sz below compute strangely.{ size_t sz = sizeof(i)/sizeof(int);// cout << sizeof(i)<<" / "<<sizeof(int)<<endl; for (int var = 0; var < sz; ++var) { cout << i[var] <<" "; } cout<< endl;}void output_List( deque<int> & int_deque){ for(deque<int>::iterator i0 = int_deque.begin (); i0 != int_deque.end (); ++i0) { cout << *i0<<" " ; } cout<<endl;}int main(){ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 int i[] = {10, 12, 11, 25, 9, 10, 9, 45, 13, 12, 10, 11, 78, 12, 12, 13, 10, 9}; int j[] = {10, 12, 11, 25, 9, 10, 9, 45, 13, 12, 10, 11, 78, 12, 12, 13, 10, 9};// int i[] = {10, 12, 11, 25, 9, 10, 9, 45, 13, 12, 10, 11, 78};// int j[] = {10, 12, 11, 25, 9, 10, 9, 45, 13, 12, 10, 11, 78};// int i[] = {-10, -12, -11, -25, -9, -10, -9, -45, -13, -12, -10, -11, -78};// int j[] = {-10, -12, -11, -25, -9, -10, -9, -45, -13, -12, -10, -11, -78};outputArray(i); int count = 0; size_t sz = sizeof(i)/sizeof(int); size_t n = sz / Length; deque<int> int_deque(i, i + halfSamplecount);// int_deque.push_front (sz - 1);// int_deque.push_front (sz - 2);// int_deque.push_front (sz - 3); for (int var = 1; var <= halfSamplecount - 1; ++var) { int_deque.push_front (i[sz - var]); }//output_List (int_deque);deque<int> temp_deque(int_deque);output_List (temp_deque); sort(temp_deque.begin (), temp_deque.end ());cout<<"after sort ";output_List (temp_deque); cout<<"mid = "<<temp_deque.at (halfSamplecount -1)<<endl; // 9 10 10 11 12 13 25 i[0] = temp_deque.at (halfSamplecount - 1);outputArray(i);++count;cout<<"----------- 1-----------"<<endl;int total_loop = sz -halfSamplecount; // 18 - 4int var = 0; for ( var = halfSamplecount; var < sz ; ++var) // i[4] = 9 {cout << "Remove begin "<<*int_deque.begin ()<<endl; int_deque.pop_front ();output_List (int_deque); int_deque.push_back (i[var]);//9 halfSamplecountcout << "Add last "<<int_deque.back ()<<endl;output_List (int_deque); temp_deque = int_deque; sort(temp_deque.begin (), temp_deque.end ());cout<<"after sort ";output_List (temp_deque); i[total_loop + var -sz +1] = temp_deque.at (halfSamplecount - 1); //cout<<"after replace ";outputArray(i);cout<<"-- "<<total_loop + var -sz +2<<"--"<<endl; } if (var == sz ) { var = 0; for ( var; var < halfSamplecount -1; ++var) // [0 ~ 3) { cout << "Remove begin "<<*int_deque.begin ()<<endl; int_deque.pop_front ();output_List (int_deque); int_deque.push_back (j[var]);// 10cout << "Add last "<<int_deque.back ()<<endl; output_List (int_deque); temp_deque = int_deque; sort(temp_deque.begin (), temp_deque.end ());cout<<"after sort ";output_List (temp_deque); i[ sz - halfSamplecount + var + 1] = temp_deque.at (halfSamplecount - 1); //cout<<"after replace ";outputArray(i);cout<<"-- "<<total_loop + var +2<<"--"<<endl; } outputArray(j); } return 0;}
。
。
。
0 0
- 滑动均值Moving Average与中值滤波Moving Median
- 两道面试题解答之二 Moving Average, Moving Median
- 移动均值滤波与中值滤波
- tf moving average
- kaufman adaptive moving average
- MOVING
- 均值滤波 中值滤波 对称均值滤波
- Moving Average from Data Stream
- Moving Average from Data Stream
- 中值和均值滤波
- 中值滤波VS.均值滤波
- 均值滤波vs中值滤波
- 中值滤波Median filtering
- 移动平均法又称滑动平均法、滑动平均模型法(Moving average,MA)
- 均值滤波,中值滤波,最大最小值滤波
- 滤波算法(均值、中值、最大均值、最大中值、几何均值)
- 最大值、最小值、中值、均值滤波
- LeetCode 346. Moving Average from Data Stream
- 创建 Entity Framework 链接 MySql
- 【杭电oj2031】进制转换
- poj入门水题整理2
- DOM与DOM4J对XML文件的解析
- 8. String to Integer (atoi)
- 滑动均值Moving Average与中值滤波Moving Median
- STM8 PWM
- 如何从Eclipse导入github上的项目源码
- uva814-The letter Carrier's Rounds
- 2016中国大学生程序设计竞赛 - 网络选拔赛 1004 Danganronpa hdu5835
- java7--(1.7)也可能还早的-----HashMap的实现原理
- 在浏览器中输入网址到网页展现全部过程
- mac下安装maven
- HashMap的工作原理