Mahotas - 影像腐蝕



在影像處理中,腐蝕影像指的是縮小影像的畫素。

腐蝕過程會去除影像邊緣周圍的畫素。此操作掃描影像並檢查特定畫素鄰域內的所有畫素是否為前景畫素。如果是,則畫素會被腐蝕或移除。

在Mahotas中腐蝕影像

在Mahotas中腐蝕影像指的是去除影像中物件或區域邊界處的畫素數量。此操作通常用於修改影像中的形狀和結構。

我們可以使用erode()函式在mahotas中腐蝕影像。它用於使用結構元素B縮小元素A。

結構元素是一個小的矩陣或形狀,定義了每個畫素周圍的鄰域。它用於確定在腐蝕過程中應考慮哪些畫素。

mahotas.erode()函式

mahotas.erode()函式以輸入影像和結構元素作為引數,並返回一個新的NumPy陣列。

輸出畫素的值由鄰域中所有畫素的最小值確定。如果任何鄰域畫素的值為0,則將畫素設定為0。

erode()函式逐畫素掃描影像,並檢查由結構元素定義的鄰域。

如果任何相鄰畫素是物件的一部分,則腐蝕操作會將這些畫素移除到物件的邊界,使其變小。

語法

以下是mahotas中erode()函式的基本語法:

mahotas.erode(A, Bc={3x3 cross}, out={np.empty_as(A)})

其中,

  • A - 它是要執行腐蝕的輸入影像。它應該是一個NumPy陣列,表示灰度影像。

  • Bc(可選) - 它用於腐蝕的結構元素。預設情況下,它設定為一個3x3十字形結構元素。

  • out(可選) - 它指定用於儲存結果的輸出陣列。

示例

以下是使用erode()函式在mahotas中腐蝕影像的基本示例:

import mahotas as mh
import matplotlib.pyplot as plt
import numpy as np
image = mh.imread('nature.jpeg', as_grey=True).astype(np.uint8)
# Performing erosion with a square kernel of size 3x3
eroded_image = mh.erode(image, Bc=mh.disk(3))
# Create a figure with subplots
fig, axes = plt.subplots(1, 2, figsize=(7,5 ))
# Display the original image
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].axis('off')
# Display the eroded image
axes[1].imshow(eroded_image, cmap='gray')
axes[1].set_title('Eroded Image')
axes[1].axis('off')
# Adjust the layout and display the plot
plt.tight_layout()
plt.show()

輸出

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

Eroding Image

使用不同結構元素大小進行腐蝕

我們還可以使用不同的結構元素大小腐蝕影像以修改影像的不同方面。這些元素使用Mahotas disk()函式建立了不同的尺寸。

透過為結構元素選擇不同的半徑或大小,我們可以實現不同的效果。首先,我們使用最大的結構元素執行腐蝕。然後,我們繼續使用較小的結構元素進行額外的膨脹。

每次腐蝕操作都會透過從其邊界去除畫素來進一步縮小影像中的物件。

示例

在這裡,我們嘗試使用不同結構元素大小腐蝕影像:

import mahotas as mh
import numpy as np
from pylab import imshow, show
image = mh.imread('nature.jpeg', as_grey=True).astype(np.uint8)
# Performing erosion with the largest structuring element
largest_se = mh.disk(8)
eroded_image = mh.erode(image, Bc=largest_se)
# Performing additional erosions with smaller structuring elements
smaller_se_1 = mh.disk(2)
smaller_se_2 = mh.disk(5)
eroded_image = mh.erode(eroded_image, Bc=smaller_se_1)
eroded_image = mh.erode(eroded_image, Bc=smaller_se_2)
# Displaying the eroded image
imshow(eroded_image)
show()

輸出

獲得的輸出如下所示:

Erosion Structuring Element

使用圓形核心進行腐蝕

要建立圓形核心,我們可以使用Mahotas的disk()函式。透過指定所需的半徑,此函式會生成一個表示圓形核心的NumPy陣列。

準備好影像和圓形核心後,我們可以繼續執行腐蝕。此操作將圓形核心應用於影像的每個畫素,從而相應地縮小前景畫素。

簡單來說,它根據圓形核心定義的連通性縮小區域。

示例

現在,我們正在使用圓形核心膨脹影像:

import mahotas as mh
import numpy as np
from pylab import imshow, show
# Load image
image = mh.imread('sun.png', as_grey=True).astype(np.uint8)
# Circular kernel with radius 10
radius = 10
kernel = mh.disk(radius)
eroded_image = mh.erode(image, kernel)
# Display the eroded image
imshow(eroded_image)
show()

輸出

以下是上述程式碼的輸出:

Erosion circular-shaped kernel
廣告