中值滤波算法
中值滤波可以过滤尖峰脉冲。目的在于我们对于滤波后的数据更感兴趣。滤波后的数据保留的原图像的变化趋势,同时去除了尖峰脉冲对分析造成的影响。
中值滤波是用中值取代了原来要处理的数据,采样长度越长,滤波效果越好,但是也会造成原始数据中过多信息的丢失。需要根据实际应用确定。
按照项目要求定义函数类型即可。
输入参数说明
- int* Array为整数指针。传入存储数据的数组地址
- FilterLen 滤波器长度 ,传入数组元素个数
int Median_filter(int* Array, unsigned char FilterLen)
{
unsigned char i,j;
int temp;
// 用冒泡法对数组进行排序 ,从小到大排序
for (j = 0; j < FilterLen - 1; j++)
{
for(i = 0; i < FilterLen - 1 - j; i++)
{
if(Array[i] > Array[i+1])
{
//数据位置互换
temp = Array[i];
Array[i] = Array[i+1];
Array[i+1] = temp;
}
}
}
//判断奇偶,返回中值
if((FilterLen & 1) > 0)
{
//数组有奇数个元素,返回中间一个元素
temp = Array[(FilterLen + 1) / 2];
}
else
{
//数组有偶数个元素,返回中间两个元素的平均值
temp = ( Array[FilterLen / 2] + Array[FilterLen / 2 - 1] ) / 2;
}
return temp;
}