Mahotas - 二維拉普拉斯濾波器



拉普拉斯濾波器用於檢測影像中的邊緣和強度變化。在數學上,拉普拉斯濾波器定義為影像在x和y方向上二階導數的和。

二階導數提供關於每個畫素強度變化率的資訊。

拉普拉斯濾波器強調影像中強度快速變化的區域,例如邊緣和角點。它的工作原理是從中心畫素中減去周圍畫素的平均值,這給出了強度二階導數的度量。

在二維情況下,拉普拉斯濾波器通常由一個方形矩陣表示,通常為3×3或5×5。這是一個3×3拉普拉斯濾波器的示例:

0  1  0
1 -4  1
0  1  0

Mahotas中的二維拉普拉斯濾波器

為了在Mahotas中應用二維拉普拉斯濾波器,我們可以使用`mahotas.laplacian_2D()`函式。以下是Mahotas中二維拉普拉斯濾波器工作原理概述:

輸入影像

  • 該濾波器採用灰度輸入影像。

卷積

  • 拉普拉斯濾波器使用卷積核對輸入影像進行卷積運算。卷積核決定了卷積過程中應用於相鄰畫素的權重。

  • 卷積運算包括在整個影像上滑動卷積核。在每個畫素位置,拉普拉斯濾波器將對應的卷積核權重與鄰域中的畫素值相乘並計算總和。

拉普拉斯響應

  • 拉普拉斯響應是透過將拉普拉斯運算元應用於影像獲得的。

    它表示影像中的強度變化或不連續性,這些與邊緣相關。

`mahotas.laplacian_2D()`函式

`mahotas.laplacian_2D()`函式以灰度影像作為輸入,並對其執行二維拉普拉斯運算。結果影像突出顯示強度快速變化的區域,例如邊緣。

語法

以下是Mahotas中`laplacian_2D()`函式的基本語法:

mahotas.laplacian_2D(array, alpha=0.2)

其中:

  • array - 輸入影像。

  • alpha (可選) - 介於0和1之間的標量值,控制拉普拉斯濾波器的形狀。較大的alpha值會增加拉普拉斯濾波器對邊緣的靈敏度。預設值為0.2。

示例

以下是使用`laplacian_2D()`函式檢測影像邊緣的基本示例:

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
image = mh.imread('picture.jpg', as_grey = True)
# Applying a laplacian filter
filtered_image = mh.laplacian_2D(image)
# Displaying the original image
fig, axes = mtplt.subplots(1, 2, figsize=(9, 4))
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].axis('off')
# Displaying the laplacian filtered featured image
axes[1].imshow(filtered_image, cmap='gray')
axes[1].set_title('Laplacian Filtered')
axes[1].axis('off')
mtplt.show()
輸出

執行上述程式碼後,我們將得到以下輸出:

2D Laplacian Filter

縮放拉普拉斯響應

透過改變alpha引數,我們可以控制拉普拉斯響應的尺度。較小的alpha值,例如0.2,會產生相對細微的響應,突出顯示更精細的細節和邊緣。

另一方面,較大的alpha值,例如0.8,會放大響應,使其更加明顯,並強調更突出的邊緣和結構。

因此,我們可以在拉普拉斯濾波器中使用不同的alpha值來反映邊緣檢測的變化。

示例

在這裡,我們使用拉普拉斯濾波器中的不同alpha值來反映邊緣檢測的變化:

import mahotas as mh
import matplotlib.pyplot as plt
# Load an example image
image = mh.imread('pic.jpg', as_grey=True)
# Apply the Laplacian filter with different alpha values
filtered_image_1 = mh.laplacian_2D(image, alpha=0)
filtered_image_2 = mh.laplacian_2D(image, alpha=0.5)
filtered_image_3 = mh.laplacian_2D(image, alpha=1)
# Display the original and filtered images with different scales
fig, axes = plt.subplots(1, 4, figsize=(12, 3))
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].axis('off')
axes[1].imshow(filtered_image_1, cmap='gray')
axes[1].set_title('Filtered Image (alpha=0)')
axes[1].axis('off')
axes[2].imshow(filtered_image_2, cmap='gray')
axes[2].set_title('Filtered Image (alpha=0.5)')
axes[2].axis('off')
axes[3].imshow(filtered_image_3, cmap='gray')
axes[3].set_title('Filtered Image (alpha=1)')
axes[3].axis('off')
plt.show()

輸出

上述程式碼的輸出如下:

2D Laplacian Filter1

使用隨機生成的陣列

我們也可以對隨機生成的陣列應用拉普拉斯濾波器。為此,我們首先需要建立一個隨機的二維陣列。我們可以使用NumPy庫的`np.random.rand()`函式建立陣列。

此函式生成0到1之間的值,表示陣列的畫素強度。

接下來,我們將隨機生成的陣列傳遞給`mahotas.laplacian_2D()`函式。此函式將拉普拉斯濾波器應用於輸入陣列並返回已濾波的陣列。

示例

現在,我們嘗試將拉普拉斯濾波器應用於隨機生成的陣列:

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
# Generate a random 2D array
array = np.random.rand(100, 100)
# Apply the Laplacian filter
filtered_array = mh.laplacian_2D(array)
# Display the original and filtered arrays
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(array, cmap='gray')
plt.title('Original Array')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(filtered_array, cmap='gray')
plt.title('Filtered Array')
plt.axis('off')
plt.show()

輸出

上述程式碼的輸出如下:

Randomly Generated Array
廣告
© . All rights reserved.