形態(tài)學(xué)濾波
形態(tài)學(xué)濾波包括腐蝕、膨脹、開運(yùn)算、閉運(yùn)算、形態(tài)學(xué)梯度、禮帽、黑帽
下面針對(duì)這四種形態(tài)學(xué)操作,說明一下其原理。
腐蝕操作
顧名思義,腐蝕操作會(huì)一定程度上對(duì)圖像前景物體的邊界進(jìn)行腐蝕,減少圖像的高亮部分。腐蝕也是一種與圖像之間的卷積操作,與卷積核對(duì)應(yīng)的源圖像像素為1時(shí)保留,否則置零。
import cv2
import numpy as np
img = cv2.imread("erode.jpg",0)
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iterations=1)

image.png

image.png
可以看出腐蝕操作令圖像的邊界縮小,高亮部分減少,有助于消除噪聲。因此,在對(duì)圖像進(jìn)行預(yù)處理時(shí),通常會(huì)先進(jìn)行腐蝕操作,消除噪聲干擾。
膨脹
與腐蝕操作相反的是膨脹操作,膨脹操作會(huì)使得圖像的高亮部分增大,突出前景目標(biāo),也可以用于連接兩個(gè)分開的物體。
import cv2
import numpy as np
img = cv2.imread("erode.jpg",0)
kernel = np.ones((5,5),np.uint8)
dilate = cv2.dilate(img,kernel,iterations=1)

image.png
開運(yùn)算
開運(yùn)算就是對(duì)圖像先進(jìn)行腐蝕,再進(jìn)行膨脹
import cv2
import numpy as np
img = cv2.imread("erode.jpg",0)
kernel = np.ones((5,5),np.uint8)
#開運(yùn)算接口函數(shù)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

image.png
閉運(yùn)算
閉運(yùn)算就是與開運(yùn)算相反的操作,先膨脹后腐蝕,用來填充前景物體的小洞,或者前景物體的小黑點(diǎn)。
#閉運(yùn)算接口函數(shù)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
形態(tài)學(xué)梯度
一副圖像膨脹和腐蝕的差
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

image.png
禮帽
原圖像和開運(yùn)算之后圖像的差
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
黑帽
源圖像和閉運(yùn)算之后圖像的差
blackhat = cv2.morphologyEx(img, cv2.MORPHBLACKHAT, kernel)