理論
形態變換是一些基於圖像形狀的簡單操作。它通常在二進製圖像上執行。它需要兩個輸入,一個是我們的原始圖像,第二個稱為結構元素或內核,它決定了操作的性質。兩個基本的形態學算子是侵蝕和膨脹。然後它的變體形式如開、閉、梯度等也開始發揮作用。我們將在下圖的幫助下一一看到它們:
侵蝕cv2.erode
侵蝕的基本思想就像土壤侵蝕一樣,它侵蝕掉前景物體的邊界(總是盡量讓前景保持白色)。那它有什麼作用呢?內核在圖像中滑動(如在 2D 卷積中)。只有當內核下的所有像素都為 1 時,原始圖像中的像素(1 或 0)才會被認為是 1,否則它會被腐蝕(變為零)。
所以發生的事情是,根據內核的大小,邊界附近的所有像素都將被丟棄。因此,前景對象的厚度或大小會減少,或者圖像中的白色區域會減少。它對於去除小的白噪聲(正如我們在色彩空間章節中看到的)、分離兩個連接的對像等很有用。
在這裡,作為一個例子,我會使用一個 5×5 的內核。讓我們看看它是如何工作的:
import cv2 as cv import numpy as np img = cv2.imread('j.png',0) kernel = np.ones((5,5),np.uint8) erosion = cv2.erode(img,kernel,iterations = 1)
膨脹Dilation
它與侵蝕正好相反。這裡,如果內核下的至少一個像素為“1”,則像素元素為“1”。因此它增加了圖像中的白色區域或前景對象的大小增加。通常,在去除噪聲等情況下,腐蝕之後是膨脹。因為,腐蝕去除了白噪聲,但它也縮小了我們的對象。所以我們擴大它。由於噪音消失了,它們不會回來,但我們的對象區域增加了。它還可用於連接對象的損壞部分。
dilation = cv2.dilate(img,kernel,iterations = 1)
去噪cv2.MORPH_OPEN
在去除噪聲方面很有用。這裡我們使用函數cv2.morphologyEx()
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
關閉線條
對關閉前景對象內的小孔或對像上的小黑點很有用。這個我也有使用來把canny所找到的邊緣關起來
closing = cv2.morphologyEx (img, cv2.MORPH_CLOSE, kernel)
形態梯度
這是圖像膨脹和腐蝕之間的區別。結果將看起來像對象的輪廓。
gradient = cv2.morphologyEx (img, cv2.MORPH_GRADIENT, kernel)
Top Hat
使用cv2.MORPH_TOPHAT
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
Black Hat
使用cv2.MORPH_GRADIENT
gradient = cv2.morphologyEx (img, cv2.MORPH_GRADIENT, kernel)