Mahotas - 形態學運算子



形態學運算子是一組影像處理技術,有助於修改影像中物體的形狀、大小和空間關係。它們就像用於重塑或操縱影像中物體的工具。

想象一下,您有一張包含各種物體(如圓形、正方形和線條)的圖片。形態學運算子允許您以不同的方式更改這些物體的外觀。

例如,您可以使它們更大或更小、平滑其邊緣、去除微小細節或填充間隙。

為了實現這些轉換,形態學運算子使用數學運算,這些運算涉及使用稱為結構元素的特殊模式掃描影像。此結構元素定義了在操作期間將考慮的每個畫素周圍鄰域的形狀和大小。

Mahotas 和形態學運算子

Mahotas 提供了一套全面的形態學運算子,可應用於二值、灰度或多通道影像。這些運算子使用最佳化的演算法高效地實現,使其適用於具有大規模資料集的實際應用。

讓我們看看在 mahotas 中可以執行的一些形態學操作:

膨脹

膨脹是一種形態學運算,它擴充套件影像中物體邊界上的畫素。它涉及使用結構元素掃描影像,並用結構元素定義的相應鄰域內的最大值替換每個畫素。

讓我們看看下面原始影像以及膨脹後的影像:

Dilation Image

腐蝕

腐蝕是一種基本的形態學運算子,它會收縮或腐蝕影像中物體邊界上的畫素。

以下是腐蝕後的影像及其原始影像:

Erosion Image

開運算

開運算是先腐蝕後膨脹的組合。它去除小物體並填充前景中的小孔,同時保留較大物體的整體形狀和連通性。

讓我們看看在 mahotas 中的開運算後的影像:

Opening Image

閉運算

閉運算是開運算的反向操作,包括先膨脹後腐蝕。它填充前景中的小間隙和孔洞,確保物體的連通性。

現在,讓我們看看在 mahotas 中的閉運算後的影像:

Closing Image

條件腐蝕

條件腐蝕是一種形態學運算,它根據使用者定義的條件保留影像中的結構。它根據稱為標記影像的第二幅影像指定的條件選擇性地腐蝕影像區域。

該運算僅在標記影像具有非零值的地方腐蝕影像。

下圖顯示了條件腐蝕:

Conditional Erosion Image

條件膨脹

條件膨脹類似於條件腐蝕,但操作方式相反。它根據標記影像指定的條件選擇性地膨脹影像區域。

該運算僅在標記影像具有非零值的地方膨脹影像。

下圖顯示了條件膨脹:

Conditional Dilation Image

區域最大值

區域最大值是影像中在其鄰域內具有最高強度的點。它們代表影像中的區域性峰值或顯著特徵。

Mahotas 中的區域最大值運算子識別這些區域性最大值,並將它們標記為前景畫素。

下圖表示區域最大值:

Regional Maxima Image

區域最小值

區域最小值是影像中在其鄰域內具有最低強度的點。它們代表影像中的區域性盆地或凹陷。

Mahotas 中的區域最小值運算子識別這些區域性最小值,並將它們標記為背景畫素。

下圖表示區域最小值:

Regional Minima Image

示例

在以下示例中,我們嘗試執行所有上述解釋的形態學運算:

import mahotas as mh
import matplotlib.pyplot as plt
import numpy as np
image = mh.imread('nature.jpeg', as_grey=True).astype(np.uint8)
# Dilation
dilated_image = mh.dilate(image, Bc=mh.disk(8))
plt.title("Dilated Image")
plt.imshow(dilated_image)
plt.show()
# Erosion
plt.title("Eroded Image")
eroded_image = mh.erode(image, Bc=mh.disk(8))
plt.imshow(eroded_image)
plt.show()
# Opening
plt.title("Opened Image")
opened_image = mh.open(image)
plt.imshow(opened_image)
plt.show()
# Closing
plt.title("Closed Image")
closed_image = mh.close(image)
plt.imshow(closed_image)
plt.show()
# Conditional Dilation
plt.title("Conditional Dilation")
g = image * 6
cdilated_image = mh.cdilate(image, g)
plt.imshow(cdilated_image)
plt.show()
# Conditional Erosion
plt.title("Conditional Erosion")
scaled_image = image * 0.5
scaled_image = scaled_image.astype(np.uint8)
ceroded_image = mh.cerode(image, scaled_image)
plt.imshow(ceroded_image)
plt.show()
# Regional Maxima
plt.title("Regional Maxima")
regional_maxima = mh.regmax(image)
plt.imshow(regional_maxima)
plt.show()
# Regional Minima
plt.title("Regional Minima")
regional_minima = mh.regmin(image)
plt.imshow(regional_minima)
plt.show()

輸出

獲得的輸出如下所示:

膨脹

Dilation Image1

腐蝕

Erosion Image1

開運算後的影像

Opened Image

閉運算後的影像

Closed Image

條件膨脹

Conditional Dilation Image1

條件腐蝕

Conditional Erosion Image1

區域最大值

Regional Maxima Image1

區域最小值

Regional Minima Image1

我們將在本節的其餘章節中詳細討論所有形態學運算子。

廣告