信号处理之中值滤波

中值滤波的实现步骤

首先,选择一个窗口大小(通常为奇数),然后将这个窗口在信号或图像上逐个滑动。对于每个窗口,取其中的所有数值,按大小排序,并选择排序后的中间值(即中值)来替代窗口中心的值。窗口滑动后重复此过程,直到处理完所有数据点或像素。这样可以有效去除尖峰噪声,同时保留数据的主要趋势和边缘特征。

举例:

假设我们有一个包含噪声的信号序列,长度为 9,噪声是一个极端值(如 100):

复制代码
原始信号: [1, 2, 3, 100, 5, 6, 7, 8, 9]

现在我们使用一个窗口大小为 3 的中值滤波器来处理这个信号。也就是说,我们每次取当前值及其前后各一个值,共 3 个值,取其中的中值来替代当前值。

中值滤波的过程

  1. 处理第一个数 1

    • 窗口内的数字:[1, 2](因为前面没有更多的数字)
    • 排序后:[1, 2]
    • 中值:1
    • 替换后的值:1
  2. 处理第二个数 2

    • 窗口内的数字:[1, 2, 3]
    • 排序后:[1, 2, 3]
    • 中值:2
    • 替换后的值:2
  3. 处理第三个数 3

    • 窗口内的数字:[2, 3, 100]
    • 排序后:[2, 3, 100]
    • 中值:3
    • 替换后的值:3
  4. 处理第四个数 100(这是个噪声点):

    • 窗口内的数字:[3, 100, 5]
    • 排序后:[3, 5, 100]
    • 中值:5
    • 替换后的值:5
  5. 处理第五个数 5

    • 窗口内的数字:[100, 5, 6]
    • 排序后:[5, 6, 100]
    • 中值:6
    • 替换后的值:6
  6. 处理第六个数 6

    • 窗口内的数字:[5, 6, 7]
    • 排序后:[5, 6, 7]
    • 中值:6
    • 替换后的值:6
  7. 处理第七个数 7

    • 窗口内的数字:[6, 7, 8]
    • 排序后:[6, 7, 8]
    • 中值:7
    • 替换后的值:7
  8. 处理第八个数 8

    • 窗口内的数字:[7, 8, 9]
    • 排序后:[7, 8, 9]
    • 中值:8
    • 替换后的值:8
  9. 处理第九个数 9

    • 窗口内的数字:[8, 9](因为后面没有更多的数字)
    • 排序后:[8, 9]
    • 中值:9
    • 替换后的值:9

滤波后的信号

将所有的替换值组合起来,得到滤波后的信号:

复制代码
滤波后的信号: [1, 2, 3, 5, 6, 6, 7, 8, 9]

结果分析

可以看到,原始信号中的噪声点 100 被替换成了 5,有效地去除了噪声。除此之外,信号的其他部分保持了很好的平滑,信号的主要趋势没有被破坏。

这就是中值滤波的基本原理和应用,它可以有效去除尖峰噪声,同时保留信号的主要特征。

相关推荐
Geeys3 分钟前
淘宝电商运营新手入门完整教程|零基础开店引流
大数据·网络·人工智能
Try_again_18 分钟前
WorkBuddy 卸载重装+数据迁移全记录:用 Junction 解决工作空间路径锁定问题
人工智能·ai·腾讯云
Vodka~8 分钟前
WSL2 + RViz GPU渲染机械臂
人工智能·python
Mister Leon10 分钟前
模型端侧部署之 Nvidia Orin 异构硬件调度
人工智能
Python私教12 分钟前
DocsGPT 开源二开第一步:如意知识库工厂怎么换脸?
人工智能
林中青木15 分钟前
OpenCV 5.0 使用方法及注意事项
人工智能·opencv·计算机视觉
硅谷秋水16 分钟前
FATE:面向物理落地机器人课程学习具备主动修复功能且考虑可行性-觉察的闭环任务生成方法
人工智能·深度学习·语言模型·机器人
8Qi817 分钟前
hello-agents学习笔记--Memory让Agent拥有记忆
人工智能·python·llm·agent·ai编程·vibecoding
IT·陈寒17 分钟前
Gemini 3 Flash Preview 深度评测:速度、智能与成本的综合博弈
人工智能
梦想的初衷~19 分钟前
《双 Agent 工作台 + 全栈 GIS 项目搭建:前端地图/空间数据库/后端/云部署指南》
人工智能·echarts·leaflet·webgis·ai 辅助编程