当前位置: 首页 > news >正文

OpenCV(二十六):高斯滤波 - 教程

图像平滑是计算机视觉中的重要基础操作,用于降噪、改善图像质量以及为后续算法(如边缘检测、特征提取、图像金字塔处理等)作准备。在所有平滑方法中,高斯滤波(Gaussian Blur) 是最常用、最经典的一种。与均值滤波或方盒滤波相比,高斯滤波能更好地保护边缘,具有更好的数学性质和视觉效果。

高斯分布(正态分布)

高斯分布是什么?

高斯分布是一种以平均值为中心、呈钟形曲线的概率分布,数据在中心附近最多,越远离中心概率越小。自然界中大量随机现象都服从高斯分布,因此图像处理中常用高斯滤波来模拟自然模糊和消除噪声。

如果一个现象由 许多微小随机因素共同影响,例如:

那么它最终通常呈现:

这就是高斯分布。

你可以把它想象成:

“大部分值都在中间附近,极端值很少。”

高斯分布的数学公式

一维高斯分布公式:

在这里插入图片描述

其中:

  • μ(mu):平均值(曲线中心位置)
  • σ(sigma):标准差(决定曲线胖瘦)
    • σ 小 → 峰窄而高
    • σ 大 → 峰宽而低

高斯分布的统计特性

范围含义
μ ± 1σ约 68% 的数据落在这里
μ ± 2σ约 95%
μ ± 3σ约 99.7%

这就是著名的 “3σ 定律”

为什么自然界中很多事物呈高斯分布?

因为自然界中的现象通常受大量“微小随机因素”的共同作用。

例如:

数学上由 中心极限定理 指导:

多个独立随机变量的和趋向于高斯分布。

因此高斯分布几乎无处不在。

图像处理中为什么要使用高斯分布?

图像的噪声常常服从高斯分布,所以高斯滤波是最适合消除噪声的。

高斯滤波使用的权重就是高斯分布:

  • 落在中心的像素影响最大
  • 距离越远权重越小,影响越弱
  • 平滑自然,不破坏结构

而均值滤波会平均所有像素,容易破坏边缘。

因此高斯分布是图像模糊算法中最科学、最合理的选择。

高斯滤波的思想与目的

高斯滤波是一种基于高斯分布(正态分布)权重的平滑方法,它通过给邻域中像素赋予不同权重来实现平滑和降噪。

核心思想:

距离中心越近的像素权重越大,距离越远的权重越小。

相比均值滤波(所有像素权重相同),高斯滤波避免了“丢失边缘特征”问题,因此图像平滑得更自然。

高斯分布服从著名的钟形曲线:

在这里插入图片描述

其中 σ 表示标准差,σ 越大,平滑越强。

高斯滤波数学原理

一维高斯函数

在这里插入图片描述

它表示一个以 0 为中心、宽度由 σ 控制的概率密度函数。

二维高斯函数

图像是二维的,因此需要二维高斯核:

在这里插入图片描述

它是一个二维的高斯“钟面”,中心最高,向四周递减。

为什么高斯滤波比均值滤波好?

权重随距离变化更平滑

均值滤波:

  • 所有像素权重相同
  • 会模糊边缘
  • 易丢失图像纹理细节

高斯滤波:

  • 局部像素按照“距离远近”赋权
  • 更接近真实光学成像的模糊方式
  • 边缘保持更好

符合人眼视觉特性

人眼对中心像素更敏感,因此高斯滤波模糊效果更自然。

高斯核可分离(计算速度快)

二维高斯核可以分解为两个一维核:

在这里插入图片描述

因此复杂度由 O(n²) 降到 O(2n),OpenCV 内部利用该特性加速。

高斯核(Gaussian Kernel)的生成方法

使用窗口大小 k,与标准差 σ,生成核 K:

在这里插入图片描述

示例:生成 5×5 高斯核(σ=1.0),其权重分布类似:

1  4  7  4  1
4 16 26 16  4
7 26 41 26  7
4 16 26 16  4
1  4  7  4  1

然后进行归一化,使核权重和为 1。

高斯滤波的参数与意义(OpenCV)

OpenCV 中高斯滤波函数:

cv2.GaussianBlur(src, ksize, sigmaX, sigmaY=None, borderType)

参数解释:

参数含义
src输入图像
ksize核大小,例如 (5,5),必须为奇数
sigmaXX 方向标准差 σ
sigmaYY 方向标准差(不填时自动 = sigmaX)
borderType边界填充方式

核大小 ksize 必须是奇数的原因

确保存在“唯一中心点”,便于左右对称权重分布。

σ(标准差)的作用

σ 决定模糊程度:

若设置为 0,OpenCV 会根据核大小自动计算最优 σ。

例如:

ksize = 5 → σ ≈ 0.8 ~ 1.0
ksize = 9 → σ ≈ 1.5 ~ 2.0

实际经验:一般使用 σ = 1.0(轻度模糊)。

OpenCV 高斯滤波内部实现机制

OpenCV 高斯滤波主要步骤:

  1. 根据 ksize 与 σ 生成一维高斯核 G
  2. 使用 separable filter(可分离卷积)
    • 先进行 X 方向卷积(行卷积)
    • 再进行 Y 方向卷积(列卷积)
  3. 使用 SSE/AVX 指令集加速数值运算

可分离卷积使得高斯滤波运行速度比同尺寸的均值滤波更快。

与方盒滤波(boxFilter)对比

过滤类型权重分布边缘保留效果自然度
方盒滤波全 1较差一般
均值滤波全 1/窗口大小较差一般
高斯滤波随距离变化较好最佳

方盒滤波会产生明显模糊,而高斯模糊更柔和。

高斯滤波应用场景

降噪前处理

例如 Canny 边缘检测必须先高斯平滑,以抑制噪声。

图像金字塔

高斯金字塔使用多次高斯滤波 + 下采样构成。

卷积神经网络前处理

改善图像平滑度,提高模型鲁棒性。

模糊效果

用于背景虚化、相机景深模拟。

示例

基本高斯滤波

import cv2
import numpy as np
# -------------------------------------------------
# 1. 生成一张典型测试图(包含渐变、几何形状、噪声)
# -------------------------------------------------
h, w = 400, 400
# 梯度背景
gradient = np.tile(np.linspace(0, 255, w, dtype=np.uint8), (h, 1))
# 转为 3 通道
img = cv2.merge([gradient, gradient, gradient])
# 画一些形状(增强调试效果)
cv2.rectangle(img, (50, 50), (150, 150), (255, 0, 0), -1)
cv2.circle(img, (300, 100), 50, (0, 255, 0), -1)
cv2.line(img, (200, 200), (350, 350), (0, 0, 255), 5)
# 添加随机噪声
noise = np.random.randint(0, 50, (h, w, 3), dtype=np.uint8)
noisy_img = cv2.add(img, noise)
# -------------------------------------------------
# 2. 高斯滤波
# -------------------------------------------------
sigma = 2.0
gaussian_blur = cv2.GaussianBlur(noisy_img, (0, 0), sigmaX=sigma)
# -------------------------------------------------
# 3. 显示结果
# -------------------------------------------------
cv2.imshow("Original (with noise)", noisy_img)
cv2.imshow(f"Gaussian Blur (sigma={sigma})", gaussian_blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果显示:

在这里插入图片描述

指定 σ 的高斯滤波

import cv2
img = cv2.imread("test.jpg")
sigma = 2.0  # 指定标准差
# ksize = (0,0) 表示让 OpenCV 根据 sigma 自动计算合适的高斯核大小
blur = cv2.GaussianBlur(img, (0, 0), sigmaX=sigma)
cv2.imshow("Original", img)
cv2.imshow("blur", blur)
cv2.waitKey(0)

对比均值滤波与高斯滤波

import cv2
import numpy as np
# 读取图像
img = cv2.imread("test.jpg")
# 均值滤波(方框滤波)
mean_blur = cv2.blur(img, (7, 7))      # 或 cv2.boxFilter
# 高斯滤波
gaussian_blur = cv2.GaussianBlur(img, (7, 7), sigmaX=1.5)
# 显示对比
cv2.imshow("Original", img)
cv2.imshow("Mean Blur (7x7)", mean_blur)
cv2.imshow("Gaussian Blur (7x7, sigma=1.5)", gaussian_blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

优点

  1. 降噪效果好:比均值滤波更能消除噪声。
  2. 边缘保留能力强:权值递减,不破坏结构。
  3. 效果自然,不产生块状感
  4. 可分离卷积,运算效率高
  5. 数学性质好,符合物理模型(光学模糊)

总结

http://www.jsqmd.com/news/326897/

相关文章:

  • 书匠策AI:教育论文的“数据炼金实验室”,让数字开口说黄金故事
  • 【学习笔记】图上和三元环有关的一类问题
  • 【学习笔记】强制在线 O(1) 逆元
  • 【学习笔记】Chirp-Z Transform
  • Vue 笔记2
  • 深圳腾讯外包项目组面试题记录
  • 基于留出法和k折交叉验证的多种神经网络分类预测MATLAB程序:代码中共包含人工神经网络(AN...
  • 系统软件领域中的BSS段
  • ue 模拟说话
  • 蚌埠本地生活代运营实测推荐:这4家专业服务商助力商家高效引流
  • 2026年真石漆厂家推荐:外墙漆真石漆、保温真石漆、白色真石漆、外墙仿石漆厂家推荐,赋能建筑外墙美观与防护
  • 【毕业设计】基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 过程性编程和面向对象编程
  • Java毕设项目推荐-基于Hadoop的大学多媒体教学管理系统基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现【附源码+文档,调试定制服务】
  • 2026年输送机厂家推荐:污泥破碎机、皮带输送机、螺旋输送机、刮板输送机、链板输送机厂家推荐,从定制到运维的全流程方案
  • Java毕设选题推荐:基于Hadoop平台的大学多媒体教学管理系统基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2026年外墙翻新厂家推荐:别墅外墙翻新、厂房外墙翻新、高端外墙装饰厂家选择指南,老旧墙面改造实用方案
  • 2026 中小民企管理咨询公司推荐榜:战略目标/组织职责/薪酬职级/绩效考核/职业规划/绩效增长/ 人才招聘/销售管理/6S管理/商业模式咨询辅导,山东手把手领衔优选
  • 【课程设计/毕业设计】基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现多媒体教学资源管理系统、数字化教学管理平台、智慧教室管理系统 【附源码、数据库、万字文档】
  • 计算机Java毕设实战-基于springboot+Hadoop平台的大学多媒体教学管理系统多媒体教学资源管理系统、数字化教学管理平台、智慧教室管【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 从理论到实战:MIMO-OFDM 无线通信全套 MATLAB 源码,助你打通技术任督二脉
  • React Native for OpenHarmony:ScrollView 事件流、布局行为与性能优化深度剖析
  • Java毕设项目:基于springboot的宠物领养及健康管理系统(源码+文档,讲解、调试运行,定制等)
  • Java毕设项目:基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • Java计算机毕设之基于springboot+Hadoop平台的大学多媒体教学管理系统基于Hadoop平台的大学多媒体教学管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 【计算机毕业设计案例】基于SpringBoot的大学多媒体教学管理系统的设计与实现基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现(程序+文档+讲解+定制)
  • 亳州本地生活团购代运营精选|三十六行网络科技领衔 4 家实力服务商
  • JuiceSSH让手机秒控 Linux 服务器,cpolar让你告别工位束缚!
  • Redis快速实现布隆过滤器:缓存去重的“智能门卫”
  • 三十六行网络科技铜陵分公司:本地生活全域运营标杆,四大平台综合实力领跑者