使用Python将高斯滤波器应用于图像

2025年1月5日 | 阅读8分钟

高斯滤波器,也称为高斯模糊,是一种图像处理滤波器,用于通过模糊图像来减少噪声并使图像平滑。它就像在蛋糕上轻轻抹上一层糖霜,从而使外观更光滑。该滤波器将加权平均应用于相邻像素,为中心像素分配更高的权重,并逐渐减小周围像素的权重。这项技术广泛应用于图像处理,对于提高视觉美感和优化摄影到科学成像的各种应用中的图像质量至关重要。顶部

高斯滤波器的常见用途

  • 降噪: 在弱光条件下或使用高 ISO 设置拍摄的图像通常包含噪声,表现为小的随机斑点。高斯滤波器可以在不显着影响图像细节的情况下平滑这些噪声。
  • 模糊背景: 在肖像摄影中,高斯滤波器可以模糊主体后面的背景,使主体更加突出。
  • 创造艺术效果: 高斯滤波器可以为图像创造出梦幻、空灵的外观,或者柔化生硬的线条和纹理。

使用 OpenCV

您可以使用 cv2 (OpenCV) 库中的 GaussianBlur 函数在 Python 中将高斯滤波器应用于图像。如果您没有安装 OpenCV,可以使用以下命令进行安装:

GaussianBlur 函数是 OpenCV (Open Source Computer Vision) 库的一部分,用于将高斯模糊应用于图像。高斯模糊是图像处理中用于平滑和减少图像噪声的广泛技术。

将 GaussianBlur 应用于图像的语法。

image_rgb

此输入图像应为 RGB 格式,才能应用高斯模糊。

ksize

“ksize”参数确定高斯核的大小,该核负责模糊图像。它应该是一个指定核的宽度和高度的元组。值应为正奇数。例如,ksize=(3, 3) 是一个有效值。

Sigma

标准差 (sigma) 决定了高斯核的分布范围。较高的 sigma 值会导致更宽、更平滑的模糊。如果 sigma 设置为 0,它将根据核大小进行计算。

示例

让我们看一个通过应用高斯滤波器来模糊图像的示例程序。

程序

输出

Apply a Gauss Filter to an Image with Python

说明

我们首先导入必要的库。“cv2”是一个流行的计算机视觉库,称为 OpenCV,而“matplotlib.pyplot”用于显示图像。我们使用“cv2.imread”方法加载了图像。我们使用“cv2.GaussianBlur”函数应用高斯模糊来平滑图像。“ksize”参数指定了高斯核的大小,当前设置为 (5, 5)。您可以调整此大小来控制所需的平滑量。“sigma”参数表示高斯核的标准差。

使用 PIL 库

Python Imaging Library (PIL) 是一个库,它使用户能够打开、操作和保存许多不同的图像文件格式。PIL 提供了 Image 类,它表示一个图像,以及各种用于处理图像的方法。PIL 内的 ImageFilter 模块包含用户可以应用以增强或修改图像的各种图像滤波器。

语法

要安装 PIL 库,请使用“pip install Pillow”命令。

Image 类是 PIL 的核心,代表一个图像。它为用户提供了执行基本图像操作(如打开、保存、调整大小、裁剪和滤波)的方法。

ImageFilter 模块包含一组预定义的滤波器,用户可以通过 Image 类的 filter 方法将这些滤波器应用于图像。这些滤波器用于模糊、锐化和边缘增强。

语法

以下是高斯模糊函数如何将高斯滤波器应用于图像。

radius 参数通过控制高斯核的大小来确定对图像中每个像素的模糊效果的程度。

示例

这是一个使用 imagefilter.GuassianBlur() 方法将高斯滤波器应用于图像的示例程序。

程序

输出

Apply a Gauss Filter to an Image with Python
Apply a Gauss Filter to an Image with Python

说明

我们导入了所需的库,使用 Image.open() 加载了图像,并通过设置 radius 来应用 ImageFilter.gaussianBlur() 进行高斯滤波。

结果图像已通过 save 方法保存到指定的 output_path。

使用 SciPy

SciPy 库,代表 Scientific Python,是一组强大的工具,专为 Python 中的科学和技术计算而设计。它在 NumPy 库的基础上提供了广泛的附加功能,用于优化、信号和图像处理、统计等任务。在将高斯滤波器应用于图像时,关注 `scipy.ndimage` 模块很重要。

SciPy 库中的 `ndimage` 模块提供了用于多维图像处理的全面函数集。 “ndimage”名称代表“N 维图像”,反映了它处理任何维度图像的能力,而不仅仅是计算机视觉中常用的二维图像。

“ndimage”主要旨在提供图像滤波和处理的函数。这包括一系列滤波器、卷积、形态学运算以及图像分析和计算机视觉中使用的其他技术。

语法

输入: 要滤波的输入数组。它可以是任何类数组对象,如列表、元组或 NumPy 数组,代表图像或多维数据。

sigma: 高斯核的标准差(s)。如果为标量,则所有轴应用相同的标准差。如果为标量序列,则分别指定每个轴的标准差。

Order: 每个轴上滤波器的阶数。它代表了计算的高斯导数的数量。例如,order=0 对应于高斯平滑,而 order=1 计算一阶导数。

输出: 用于存储滤波器输出的数组。如果未提供,则创建新数组。

示例 1

以下是使用 ndimage.gaussian_filter() 方法将高斯滤波器应用于图像的示例程序。

程序

输出

Apply a Gauss Filter to an Image with Python

说明

SciPy 的 ndimage.gaussian_filter 函数应用于输入图像 (img)。sigma 参数,它决定了高斯核的标准差,被设置为 4。sigma 值越高,模糊效果越强。

Matplotlib 的 plt.subplot 函数在一个行中创建两个子图,一个在左列,另一个在同一行的右列。左子图显示带有“原始图像”标题的原始图像,而右子图显示带有“模糊图像”标题的模糊图像。最后,调用 plt.show() 函数来显示绘图。

使用 skimage

skimage 库,或 scikit-image,是一个用于图像处理的 Python 库。它提供了许多执行各种任务的函数,例如图像滤波、分割和特征提取。

安装 scikit-image 库的语法

主要函数之一是高斯滤波器,可以使用 skimage.filters.gaussian 函数将其应用于图像。

语法

image: 输入图像是一个 NumPy 数组。

sigma: 高斯滤波器的标准差(浮点数),控制模糊程度

sigma 值越大,模糊效果越强,边缘越平滑。

sigma 值越小,保留的细节越多,但可能无法去除太多噪声。

multichannel: 如果为 True,则独立地将滤波器应用于每个通道(用于 RGB 等多通道图像)。默认值为 False。

mode: 如何处理图像边界之外的值:“reflect”(默认)、“constant”、“nearest”、“mirror”或“wrap”。

cval: “constant”模式使用的常量值,通常为 0.0。

Truncate: 在此标准差(默认 4.0)处截断滤波器。

示例 1

让我们看一个使用 skimage 高斯滤波器的示例程序。以下是使用 skimage.filters 模块中的高斯滤波器的示例

程序

输出

Apply a Gauss Filter to an Image with Python

说明

在此示例中,使用 scikit-image 的 io.imread 函数读取图像。然后将 filters.gaussian 函数应用于图像,通过指定的 sigma 值对其进行模糊。sigma 值越大,模糊效果越明显。最后,使用 Matplotlib 并排显示原始图像和模糊图像。

示例 2

这是一个使用高斯滤波器的示例程序。

程序

输出

Apply a Gauss Filter to an Image with Python

说明

filters.gaussian 函数应用于加载的图像 (image)。此函数对输入图像执行高斯平滑(模糊)。

sigma 参数设置为 2,表示高斯核的标准差。sigma 值越大,平滑效果越强。

结论

将高斯滤波器应用于图像是一种广泛使用且有效的图像处理技术。该滤波器有助于减少噪声、平滑过渡并模糊图像中的细节。通过将图像与高斯核进行卷积,滤波器为中心像素分配更高的权重,并逐渐降低周围像素的权重,从而产生平滑效果。平滑量可以通过标准差 (sigma) 参数控制,其中较大的 sigma 值会产生更明显的效果。 Pillow、OpenCV、scikit-image 和 SciPy 等几个库提供了在各种编程环境中应用高斯滤波器的便捷函数。高斯滤波器的应用在计算机视觉、医学成像和数码摄影等领域很有价值,在这些领域,降噪和图像增强对于改进分析和视觉感知至关重要。