信号处理之中值滤波

中值滤波的实现步骤

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

举例:

假设我们有一个包含噪声的信号序列,长度为 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,有效地去除了噪声。除此之外,信号的其他部分保持了很好的平滑,信号的主要趋势没有被破坏。

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

相关推荐
深邃-7 小时前
【数据结构与算法】-二叉树(2):实现顺序结构二叉树(堆的实现),向上调整算法,向下调整算法,堆排序,TOP-K问题
数据结构·算法·二叉树·排序算法·堆排序··top-k
We་ct10 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
一点一木12 小时前
🚀 2026 年 4 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
淡海水14 小时前
【AI模型】常见问题与解决方案
人工智能·深度学习·机器学习
HIT_Weston14 小时前
65、【Agent】【OpenCode】用户对话提示词(费米估算)
人工智能·agent·opencode
njsgcs14 小时前
我的知识是以图片保存的,我的任务状态可能也与图片有关,我把100张知识图片丢给vlm实时分析吗
人工智能
星爷AG I14 小时前
20-4 长时工作记忆(AGI基础理论)
人工智能·agi
王老师青少年编程14 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
#卢松松#14 小时前
用秒悟(meoo)制作了一个GEO查询小工具。
人工智能·创业创新
zandy101114 小时前
Agentic BI 架构实战:当AI Agent接管数据建模、指标计算与可视化全链路
人工智能·架构