Python Pillow - 卷积滤镜



在图像处理的上下文中,卷积涉及将一个小矩阵(称为卷积核)的值应用于图像。此过程会产生各种滤镜效果,例如模糊、锐化、浮雕和边缘检测。内核中的每个值代表一个权重或系数。此内核应用于图像中相应像素的邻域,以产生输出图像中相应位置的输出像素值。

Python 的 Pillow 库在其 ImageFilter 模块中提供了一个名为“kernel”的特定类。此类用于创建大小超出传统 5x5 矩阵的卷积核。

创建卷积核

要创建卷积核,您可以使用 ImageFilter 模块中的 Kernel() 类。

需要注意的是,当前版本的 Pillow 支持 3×3 和 5×5 整数和浮点内核。这些内核仅适用于“L”和“RGB”模式的图像。

以下是此 ImageFilter.Kernel() 类的语法:

class PIL.ImageFilter.Kernel(size, kernel, scale=None, offset=0)

以下是类参数的详细信息:

  • size - 表示内核大小,指定为 (宽度,高度)。在当前版本中,有效大小为 (3,3) 或 (5,5)。

  • kernel - 包含内核权重的序列。内核在应用于图像之前会垂直翻转。

  • scale - 表示比例因子。如果提供,则每个像素的结果将除以该值。默认值为内核权重的总和。

  • offset - 表示偏移值。如果提供,则在除以比例因子后将此值添加到结果中。

示例

此示例演示如何使用 Image.filter() 方法将卷积核滤镜应用于图像。

from PIL import Image, ImageFilter

# Create an image object
original_image = Image.open('Images/Car_2.jpg')

# Apply the Kernel filter
filtered_image = original_image.filter(ImageFilter.Kernel((3, 3), (0, -1, 0, -1, 5, -1, 0, -1, 0)))

# Display the original image 
original_image.show()

# Display the filtered image
filtered_image.show()

输入图像

yellow car

输出

卷积核滤镜的输出:

convolution kernel filter

示例

这是一个将 5x5 浮雕卷积核滤镜应用于图像的示例。

from PIL import Image, ImageFilter

# Create an image object
original_image = Image.open('Images/Car_2.jpg')

# Define a 5x5 convolution kernel
kernel_5x5 = [-2,  0, -1,  0,  0,
   0, -2, -1,  0,  0,
   -1, -1,  1,  1,  1,
   0,  0,  1,  2,  0,
   0,  0,  1,  0,  2]

# Apply the 5x5 convolution kernel filter
filtered_image = original_image.filter(ImageFilter.Kernel((5, 5), kernel_5x5, 1, 0))

# Display the original image 
original_image.show()

# Display the filtered image
filtered_image.show()

输入图像

yellow car

输出图像

大小为 5X5 的卷积核滤镜的输出:

imagefilter kernel
广告