The
basic principle of the median average filtering algorithm : take a set of data, remove the maximum and minimum values in the data, and average the remaining data
Reprint
/**
* 中位值平均滤波
* @param pData:没有滤波的数据
* @param nSize:数据大小
* @return:滤波数值
*/
unsigned short MedianFilter(unsigned short* pData,int nSize)
{
unsigned short max,min;
int sum;
if(nSize>2)
{
max = pData[0];
min = max;
sum = 0;
for(int i=0;i<nSize;i++)
{
sum += pData[i];
if(pData[i]>max)
{
max = pData[i]; //一个循环之后max就是最大的值
}
if(pData[i]<min)
{
min = pData[i]; //一个循环之后min就是最小的值
}
}
sum = sum-max-min; //去掉最大的值和最小的值
return sum/(nSize-2); //对N-2个数求平均值
}
return 0;
}
The above version is reprinted, the original article, please click here
Improved version:
- The method of not using the return value reduces the assignment action and can improve the response speed
- Use floating-point data, keep two decimal places, improve accuracy
/**
* 中位值平均滤波
* pData:没有滤波的数据
* nSize:数据大小
* average:滤波数据的平均值 (通过形参写入,需提前声明一个变量,存储average)
*/
int MedianFilter(int* pData,int nSize,float *average)
{
int max,min;
float sum=0;
if(nSize>2)
{
max = pData[0];
min = max;
for(int i=0;i<nSize;i++)
{
sum += pData[i];
if(pData[i]>max)
{
max = pData[i]; //一个循环之后max就是最大的值
}
if(pData[i]<min)
{
min = pData[i]; //一个循环之后min就是最小的值
}
}
sum = sum-max-min; //去掉最大的值和最小的值
(*average)=((float)(int)((sum/(nSize-2)+0.005)*100)))/100; //对N-2个数求平均值,保留两位小数
return 1;
}
return 0;
}