Gaussian Blur
高斯模糊是一种图像平滑滤波器,通过对像素进行加权平均来降低噪声并减少细节,常用于计算机视觉和预处理。
高斯模糊是一种图像平滑技术,它将每个像素替换为附近像素的加权平均值,并赋予距离较近的像素更大的权重。权重遵循钟形高斯分布,产生柔和的模糊效果,从而降低噪声并减少细节。高斯模糊也称为高斯平滑,广泛用于计算机视觉和数据预处理,以便为图像分析做好准备。
高斯模糊的工作原理#
滤波器会将一个称为卷积核的小型权重网格在图像上移动。在每个位置,它都会将相邻像素值乘以对应权重,再将结果相加。这个操作称为卷积。权重之和为 1,因此当卷积核采样到的所有像素亮度相同时,像素值保持不变。高斯模糊是一种低通滤波器:它会抑制像素之间的快速变化,包括噪声、纹理和锐利边界。
两个设置决定最终效果。Sigma(高斯分布的标准差)控制权重的扩散范围;Sigma 越大,平滑效果越强。卷积核大小决定纳入计算的周围图像区域有多大。较大的卷积核可以容纳更宽的高斯分布,而尺寸过小的卷积核会截断分布尾部。卷积核半径表示从中心到卷积核边缘的距离:半径为 3 个像素时,卷积核宽度为 7 个像素。
在图像边缘,卷积核的一部分会落在可用像素范围之外。通过镜像扩展图像可以延续附近内容;用零填充缺失区域则会引入较暗的值,导致边缘变暗。因此,边界处理方式会改变图像边缘附近的滤波结果。
在计算机视觉和机器学习中的应用#
高斯平滑通过控制分析图像结构时使用的空间尺度,来支持特征提取。它在多尺度上的应用可追溯到饭岛泰藏于 1959–1962 年开展的高斯尺度空间研究,该研究为以不同模糊程度表示图像奠定了基础。
在 scikit-image 的 Canny 边缘检测实现中,高斯平滑会在使用Sobel 算子估算梯度之前降低噪声。未经平滑处理时,噪声会产生额外的强度变化,与物体边界相互干扰。增大平滑尺度也会去除细小边缘,从而改变检测后保留下来的轮廓。
对于文档图像分割,基于高斯加权局部平均值的方法可用于自适应阈值处理。每个像素的阈值根据其邻域的加权平均值减去一个偏移量计算得出。这种方法可以将文本与光照不均匀的背景分离,例如对扫描页面进行局部阈值处理。
作为一种数据增强方法,高斯模糊可以生成柔化后的训练图像,同时保留边界框和关键点的坐标。Ultralytics YOLO 通过自定义 Albumentations 变换支持 A.GaussianBlur,因此训练YOLO26时可以加入可控的模糊变化。
高斯模糊与其他滤波器的比较#
选择不同的平滑方法,会影响图像中哪些信息得以保留:
- 均值模糊也称为方框模糊,它对窗口内的每个像素赋予相同权重。高斯模糊则更重视邻近像素,从而产生权重渐变更平滑的平均值。
- 中值模糊将像素替换为其邻域的中值。它尤其适合处理椒盐噪声,也就是孤立的亮像素和暗像素。
- 双边滤波同时利用空间距离和强度相似度来降低噪声,同时保留锐利边界。高斯模糊仅根据像素位置分配权重,因此也会使边缘变得模糊。
在 Python 中应用高斯模糊#
OpenCV提供了用于高斯平滑的cv2.GaussianBlur。使用 pip install opencv-python 安装其 Python 包,然后保存并排对比图:
from urllib.request import urlopen
import cv2
import numpy as np
with urlopen("https://ultralytics.com/images/bus.jpg") as response:
image_bytes = np.frombuffer(response.read(), dtype=np.uint8)
image = cv2.imdecode(image_bytes, cv2.IMREAD_COLOR)
blurred = cv2.GaussianBlur(image, (15, 15), sigmaX=3)
comparison = cv2.hconcat([image, blurred])
cv2.imwrite("gaussian_blur_comparison.jpg", comparison)保存的图像将原图放在左侧,平滑后的结果放在右侧。15 x 15 的卷积核在两个方向上都使用 3 个像素的 sigma,因为省略的 sigmaY 会取 sigmaX 的值。
高斯卷积核具有可分离性:水平和垂直的一维滤波器可以生成对应的二维模糊效果。对于 7 x 7 的卷积核,这种做法会将每个像素的卷积核权重计算次数从 49 次降至 14 次。










