信号处理之中值滤波

中值滤波的实现步骤

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

举例:

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

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

相关推荐
劲夫学编程41 分钟前
leetcode:杨辉三角
算法·leetcode·职场和发展
毕竟秋山澪44 分钟前
孤岛的总面积(Dfs C#
算法·深度优先
深度学习实战训练营1 小时前
基于CNN-RNN的影像报告生成
人工智能·深度学习
昨日之日20063 小时前
Moonshine - 新型开源ASR(语音识别)模型,体积小,速度快,比OpenAI Whisper快五倍 本地一键整合包下载
人工智能·whisper·语音识别
浮生如梦_3 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
深度学习lover3 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
热爱跑步的恒川4 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
励志成为嵌入式工程师5 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉5 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer5 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法