信号处理之中值滤波

中值滤波的实现步骤

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

举例:

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

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

相关推荐
非著名架构师9 分钟前
智慧气象护航:构建陆海空立体交通气象安全保障体系
大数据·人工智能·安全·疾风气象大模型4.0·疾风气象大模型·风光功率预测
tech-share22 分钟前
基于pytorch 自建AI大模型
人工智能·深度学习·机器学习·gpu算力
夏洛克信徒1 小时前
从 “工具” 到 “代理”:Gemini 3.0 重构 AI 能力边界,开启智能协作新纪元
大数据·人工智能·神经网络
AI浩1 小时前
回归基础:让去噪生成模型真正去噪
人工智能·数据挖掘·回归
小年糕是糕手1 小时前
【C++】C++入门 -- 输入&输出、缺省参数
c语言·开发语言·数据结构·c++·算法·leetcode·排序算法
ekprada1 小时前
DAY 16 数组的常见操作和形状
人工智能·python·机器学习
用户5191495848451 小时前
C#扩展成员全面解析:从方法到属性的演进
人工智能·aigc
柳鲲鹏1 小时前
OpenCV: 光流法python代码
人工智能·python·opencv
情怀姑娘2 小时前
面试题---------------场景+算法
java·算法·mybatis
金融小师妹2 小时前
基于LSTM-GARCH模型:三轮黄金周期特征提取与多因子定价机制解构
人工智能·深度学习·1024程序员节