OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
腐蝕和膨脹

上一篇教程: 影像平滑
下一篇教程: 更多形態學變換

原始作者Ana Huamán
相容性OpenCV >= 3.0

目標

在本教程中,您將學習如何

  • 應用兩種非常常見的形態學運算子:腐蝕和膨脹。為此,你將使用以下OpenCV函式:
注意
以下解釋摘自 Bradski 和 Kaehler 的著作 **Learning OpenCV**。

形態學操作

  • 簡而言之:一組基於形狀處理影像的操作。形態學操作將一個*結構元素*應用於輸入影像並生成輸出影像。
  • 最基本的形態學操作是:腐蝕和膨脹。它們有廣泛的用途,例如:
    • 移除噪聲
    • 影像中單個元素的隔離和不同元素的連線。
    • 影像中強度峰值或孔洞的查詢
  • 我們將簡要解釋膨脹和腐蝕,並以下圖為例。

膨脹

  • 此操作包括將影像 \(A\) 與某個核(\(B\))進行卷積,該核可以是任何形狀或大小,通常是正方形或圓形。
  • 核 \(B\) 有一個定義的*錨點*,通常是核的中心。
  • 當核 \(B\) 在影像上掃描時,我們計算被 \(B\) 覆蓋的最大畫素值,並用該最大值替換錨點位置的影像畫素。正如你所推斷的,這種最大化操作會導致影像中的亮區域“增長”(因此得名*膨脹*)。
  • 膨脹操作為: \(\texttt{dst} (x,y) = \max _{(x',y'): \, \texttt{element} (x',y') \ne0 } \texttt{src} (x+x',y+y')\)
  • 以上圖為例。應用膨脹我們可以得到:
  • 字母的亮區圍繞背景的黑區膨脹。

腐蝕

  • 此操作是膨脹的姐妹操作。它計算給定核區域內的區域性最小值。
  • 當核 \(B\) 在影像上掃描時,我們計算被 \(B\) 覆蓋的最小畫素值,並用該最小值替換錨點下的影像畫素。
  • 腐蝕操作為: \(\texttt{dst} (x,y) = \min _{(x',y'): \, \texttt{element} (x',y') \ne0 } \texttt{src} (x+x',y+y')\)
  • 類似於膨脹的例子,我們可以將腐蝕運算子應用於原始影像(如上所示)。您可以在下面的結果中看到,影像的亮區域變得更細,而暗區域變得更大。

程式碼

解釋

注意
此外,還有其他引數允許您一次執行多次腐蝕/膨脹(迭代),並設定邊界型別和值。然而,我們在這個簡單的教程中沒有使用這些。您可以檢視參考資料以獲取更多詳細資訊。

結果

編譯並執行上面的程式碼(如果使用 Python 則執行指令碼),將影像作為引數。如果你不提供影像作為引數,將使用預設示例影像(LinuxLogo.jpg)。

例如,使用此影像:

我們得到以下結果。改變滑動條中的索引自然會得到不同的輸出影像。嘗試一下吧!你甚至可以嘗試新增第三個滑動條來控制迭代次數。

(根據程式語言的不同,輸出可能會略有不同或只有 1 個視窗)