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)
以下是类参数的详细信息 −
-
size − 表示内核大小,指定为 (width, height)。在当前版本中,有效大小为 (3,3) 或 (5,5)。
-
kernel − 包含内核权重的序列。在将内核应用到图像之前,会将内核垂直翻转。
-
scale − 表示比例因子。如果提供,则每个像素的结果都将除以该值。默认值为内核权重的和。
-
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()
卷积核滤波器的输出 −
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()
大小为 5X5 的卷积核滤波器的输出 −