Mahotas - 影像開運算



開運算是在影像處理中使用的兩步過程。首先,執行腐蝕操作,然後執行膨脹操作。

腐蝕透過檢查每個畫素及其相鄰畫素來縮小或去除不需要的細節。如果任何相鄰畫素為黑色,則中心畫素也變為黑色。

此步驟有助於消除細小的凸起和內部噪聲。凸起是從表面向外延伸的細長結構。

腐蝕後,執行膨脹以擴充套件或增厚影像。它檢視每個畫素及其鄰居,如果任何相鄰畫素為白色,則中心畫素變為白色。

開運算有效地去除了小的細節和噪聲,同時保留了影像的主要結構。

Mahotas 中的影像開運算

要在 Mahotas 中執行開運算,我們使用 mahotas.open() 函式。此方法允許順序應用腐蝕和膨脹操作。

腐蝕透過考慮每個畫素的鄰域並將其替換為最小值來減少噪聲並消除小的結構。

隨後,膨脹透過用其鄰域中的最大值替換每個畫素來擴充套件剩餘的結構,同時保留其關鍵特徵。

mahotas.open() 函式

Mahotas 中的 open() 函式有兩個主要引數 - 二值影像和結構元素(核心)。該函式首先對輸入二值影像應用腐蝕操作。然後,它對腐蝕後的影像應用膨脹操作。

在執行腐蝕和膨脹操作後,open() 函式返回生成的開運算後的影像。

語法

以下是 mahotas 中 open() 函式的基本語法 -

mahotas.open(f, Bc={3x3 cross}, out={np.empty_like(f)})

其中,

  • f − 它是由 NumPy 陣列表示的輸入二值影像。

  • Bc − 它是在腐蝕和膨脹操作中使用的結構元素。預設為 3x3 十字形結構元素。

  • out − 它是輸出陣列。結果將儲存在一個與輸入影像 f 形狀和資料型別相同的新的陣列中。

示例

在下面的示例中,我們對影像執行開運算 -

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
image = mh.imread('sun.png')
opened_image = mh.open(image)
# 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 opened image
axes[1].imshow(opened_image, cmap='gray')
axes[1].set_title('Opened Image')
axes[1].axis('off')
# Adjust the layout and display the plot
plt.tight_layout()
plt.show()

輸出

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

Opening Process Image

使用隨機二值影像

我們還可以透過建立隨機二值影像來對影像執行開運算。為此,我們首先使用 NumPy 建立一個隨機二值影像,其中畫素要麼為 0(背景),要麼為 1(前景)。

獲得二值影像後,我們可以透過使用結構元素進行形態學開運算。它將定義腐蝕和膨脹操作的鄰域的形狀和大小。

此外,我們建立了一個與輸入影像形狀相同的空陣列來儲存結果。最後,我們得到最終的開運算後的影像。

示例

在這裡,我們嘗試透過建立一個隨機二值影像來對影像執行開運算 -

import mahotas as mh
import numpy as np
from pylab import imshow, show
# Create a random binary image
image = np.random.randint(0, 2, size=(100, 50), dtype=np.bool_)
Bc=np.ones((3,3))
# Perform morphological opening with a 3x3 cross structuring element
result = mh.open(image, Bc, out=np.empty_like(image))
# Show the result
imshow(result)
show()

輸出

生成的輸出如下所示 -

Random Binary Image

使用灰度影像

我們還可以在 mahotas 中對灰度影像執行開運算。為此,我們在讀取影像時只需傳遞 as_grey=True 引數,確保影像以灰度影像載入。接下來,我們將對灰度影像執行形態學開運算。

示例

現在,我們在 mahotas 中對灰度影像執行開運算 -

import mahotas as mh
import numpy as np
from pylab import imshow, show
# Create a grayscale image
image = mh.imread('nature.jpeg', as_grey = True).astype(np.uint8)
Bc=np.ones((20,15))
# Perform morphological opening with a 3x3 cross structuring element
result = mh.open(image, Bc, out=np.empty_like(image))
# Show the result
imshow(result)
show()

輸出

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

Using Grayscale Image
廣告