欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 拟合与滤波算法:(四)中值滤波

拟合与滤波算法:(四)中值滤波

2025/11/27 6:44:55 来源:https://blog.csdn.net/qq_51409113/article/details/144472686  浏览:    关键词:拟合与滤波算法:(四)中值滤波

中值滤波

1)算法说明

  • 把测量值放在一个数组里,设置一个长度为 m m m 的小窗,令它在数组上滑动,对窗口内的值进行排序,用中间值替换原来的数据(窗口中间的原数据);
  • 每次滑动一格,采样到一个新数据就将其放入窗尾,并扔掉原来队首的一次测量值(先进先出原则)。

图解(以窗口长度 m = 3 m=3 m=3 为例):

在这里插入图片描述

【Tips】 :重复元素并不影响中值的计算,只需要按照大小顺序排列后取中间位置的数即可。

2)边界处理

因为中值滤波的原理,原测量数组的前 ( m − 1 ) / 2 (m-1)/2 (m1)/2 个元素,以及后 ( m − 1 ) / 2 (m-1)/2 (m1)/2 个元素是得不到更新的。

  • 可以先在原数组前填充 m − 1 m-1 m1 个元素,那么所有的值都可得到更新。所填充的元素可以是原数组的第 2 2 2 至 第 m m m 个元素的镜像。
  • 也可以是原数组前填充 ( m − 1 ) / 2 (m-1)/2 (m1)/2 个元素,原数组后填充 ( m − 1 ) / 2 (m-1)/2 (m1)/2 个元素,所填元素均是原数组头部和尾部的镜像(但不包括第一个和最后一个元素)。

3)代码

def median_filter(data, window_size):"""中位值滤波,使用镜像边缘填充:param data: 输入数据列表:param window_size: 滑动窗口大小(应为奇数):return: 滤波后的数据列表"""# 镜像开始部分,将data的第 2 至 window_size 个元素反方向排序,并填充进data的前面data_first = data[1 : window_size-1][::-1]  # 1. 取data的第2个至第N+1个元素,赋予新数组data_newdata_new = data_first + data# 进行中值滤波filtered_data = []for i in range(len(data)):window = data_new[i:i + window_size]median = sorted(window)[window_size // 2]filtered_data.append(median)return filtered_data# 测试
if __name__ == "__main__":data = [1, 3, 2, 9, 4, 7, 6, 9, 8, 10, 12, 15, 10]window_size = 5result = median_filter(data, window_size)print(result)------------------------------------------------------------------------------------------------------------------
# 运行结果:
[3, 2, 3, 3, 4, 6, 7, 7, 8, 9, 10, 10, 12]

上一篇下一篇
消抖滤波待发布

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词