尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

OpenCV(二十七):中值滤波 - 详解

OpenCV(二十七):中值滤波 - 详解
📅 发布时间:2026/6/19 16:47:12

OpenCV(二十七):中值滤波 - 详解

2025-12-18 17:35  tlnshuju  阅读(0)  评论(0)    收藏  举报

中值滤波(Median Filter)是一种在图像处理系统中被广泛采用的非线性滤波算法,主要用于去除脉冲噪声(Salt & Pepper Noise)和消除图像中的孤立噪点。相比均值滤波,中值滤波在保留边缘方面具有明显优势,因此在图像预处理阶段非常常用,如去噪、边缘检测前的降噪等。

椒盐噪声

椒盐噪声是一种典型的 脉冲噪声(Impulse Noise),表现为:

  • 随机出现的 极亮点(255,salt)
  • 或 极暗点(0,pepper)
  • 像素值与周围真实像素差异极大

例如:

正常像素值可能在 100~150 之间
但噪声可能突变为 0 或 255

特点:噪声像素是“异常值(Outlier)”,比周围像素跳跃巨大。

这些极端值对线性滤波器(均值、高斯)影响很大,但对中值滤波影响很小。

基本原理

中值滤波属于典型的 基于排序统计(Order Statistics) 的非线性滤波方法。它的基本思想可以概括为:

取当前像素邻域内的所有像素值,排序后取中间的那个值作为输出像素。

假设我们使用一个 3×3 的滤波窗口,以图像中的一个像素 P 为中心,取其周围共 9 个像素,按灰度值从小到大排序:

例:周围像素为:

23, 25, 90, 110, 120, 150, 155, 200, 255

排序后为:

23, 25, 90, 110, 120, 150, 155, 200, 255

中间的那个值是第 5 个:120。

因此,原中心像素 P 被替换为 120。

数学表达

设邻域为 Ω,邻域中的像素集合为:

在这里插入图片描述

排序后得到:

在这里插入图片描述

中值滤波输出为:

在这里插入图片描述

该公式说明中值滤波器利用排序统计特性,而不是线性加权求和,因此具有显著的抗噪声能力。

主要特点

优点

  • 对椒盐噪声(黑白强干扰点)尤其有效
    中值滤波几乎是去除椒盐噪声的最佳选择,能在不明显模糊图像的情况下有效抑制异常值。
  • 比均值滤波更好地保留边缘
    因为不进行像素平均,因此边缘不会被模糊。
  • 简单稳定、计算量适中,适合实时处理

缺点

  • 对高斯噪声等连续噪声不如均值滤波有效;
  • 大窗口中值滤波会丢失细节;
  • 排序操作在大窗口下计算较耗时,但现代 CPU/GPU 差距不明显。

适用场景

  1. 处理含椒盐噪声的监控视频或拍照图像
  2. 图像边缘检测前的预降噪
  3. 医学影像预处理(如 MRI、CT 图像)
  4. 道路识别、车牌识别等需要保护边缘的场景
  5. 去除图像孤立亮点或黑点

OpenCV中的中值滤波函数

OpenCV 提供的函数为:

cv2.medianBlur(src, ksize)

参数说明:

  • src:原始图像;
  • ksize:核大小,只能是 奇数,例如 3、5、7…;
  • 输出图像与输入图像大小相同。

注意:ksize 必须是奇数且 ≥ 3

原因在于:

  • 奇数才有唯一的中间值;
  • 核大小越大,滤波越强,但可能损失更多细节。

示例

去除椒盐噪声

import cv2
import numpy as np
img = cv2.imread('input.jpg', 0)  # 灰度图
noise = img.copy()
# 添加椒盐噪声
salt_pepper_prob = 0.02
for i in range(img.shape[0]):
for j in range(img.shape[1]):
r = np.random.rand()
if r < salt_pepper_prob:
noise[i][j] = 0       # 黑点
elif r > 1 - salt_pepper_prob:
noise[i][j] = 255     # 白点
# 中值滤波处理
denoised = cv2.medianBlur(noise, 5)
cv2.imshow("Salt&Pepper Noise", noise)
cv2.imshow("Denoised by Median", denoised)
cv2.waitKey(0)

执行效果:

在这里插入图片描述

与均值滤波、高斯滤波对比

import cv2
img = cv2.imread('test.jpg')
# 均值滤波
mean = cv2.blur(img, (5,5))
# 高斯滤波
gaussian = cv2.GaussianBlur(img, (5,5), 1)
# 中值滤波
median = cv2.medianBlur(img, 5)
cv2.imshow('Original', img)
cv2.imshow('Mean Blur', mean)
cv2.imshow('Gaussian Blur', gaussian)
cv2.imshow('Median Blur', median)
cv2.waitKey(0)

效果对比:

  • 均值滤波:图像变模糊,边缘损伤严重;
  • 高斯滤波:去噪柔和,但仍会模糊边缘;
  • 中值滤波:保边效果最明显。

相关新闻

  • 【题解】Luogu P10289 [GESP样题 八级] 小杨的旅游
  • 2025年获客系统品牌排行榜,有了它商机线索不用愁 - 品牌策略主理人
  • KOReader完整指南:如何在Kindle等设备上打造完美的电子书阅读体验

最新新闻

  • 2026深圳龙岗宝安龙华黄金回收实测 多轮对比实测优选 - 逸程
  • 2026上海钻石回收7家机构对比测评 本土标杆机构推荐 - 薛定谔的梨花猫
  • Flutter PullToRefresh与NestedScrollView集成深度解析:解决复杂滚动场景的终极指南
  • 宁波各区黄金回收测评 鄞州/海曙/江北变现哪家不压价 - 逸程
  • 2026深圳三大商圈黄金回收实测,逸程验金标准统一靠谱 - 逸程
  • K2.5技术解析:动态稀疏注意力与原生多模态架构

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号