Python Pillow 简明教程

Python Pillow - Convolution Filters

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

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

Creating the Convolution kernel

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

值得注意的是,当前版本的 Pillow 支持 3x3 和 5x5 整数和浮点数内核。这些内核专门应用到 “L” 和 “RGB” 模式的图像中。

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

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

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

  1. size − 表示内核大小,指定为 (width, height)。在当前版本中,有效大小为 (3,3) 或 (5,5)。

  2. kernel − 包含内核权重的序列。在将内核应用到图像之前,会将内核垂直翻转。

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

  4. offset − 表示偏移值。如果提供,则此值在被比例因子除后添加到结果中。

Example

此示例演示如何使用 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

Example

以下是将 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