形态学滤波
形态学滤波包括腐蚀、膨胀、开运算、闭运算、形态学梯度、礼帽、黑帽
下面针对这四种形态学操作,说明一下其原理。
腐蚀操作
顾名思义,腐蚀操作会一定程度上对图像前景物体的边界进行腐蚀,减少图像的高亮部分。腐蚀也是一种与图像之间的卷积操作,与卷积核对应的源图像像素为1时保留,否则置零。
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
可以看出腐蚀操作令图像的边界缩小,高亮部分减少,有助于消除噪声。因此,在对图像进行预处理时,通常会先进行腐蚀操作,消除噪声干扰。
膨胀
与腐蚀操作相反的是膨胀操作,膨胀操作会使得图像的高亮部分增大,突出前景目标,也可以用于连接两个分开的物体。
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
开运算
开运算就是对图像先进行腐蚀,再进行膨胀
import cv2
import numpy as np
img = cv2.imread("erode.jpg",0)
kernel = np.ones((5,5),np.uint8)
#开运算接口函数
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
image.png
闭运算
闭运算就是与开运算相反的操作,先膨胀后腐蚀,用来填充前景物体的小洞,或者前景物体的小黑点。
#闭运算接口函数
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
形态学梯度
一副图像膨胀和腐蚀的差
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
image.png
礼帽
原图像和开运算之后图像的差
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
黑帽
源图像和闭运算之后图像的差
blackhat = cv2.morphologyEx(img, cv2.MORPHBLACKHAT, kernel)