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
廣告