形态学运算
有时,在对图像进行阈值处理后,二进制图像中会出现不必要的噪点。形态学操作可以帮助去除图像中的噪点。
核心
核心是简单的形状,其中原点叠加在二进制图像值1的每个像素上。 OpenCV将内核限制为NxN矩阵,其中N为奇数。内核的起源是中心。一个常见的内核是
\[\begin{split}kernel= \ begin {pmatrix}
1&1&1 \\
1&1&1 \\
1&1&1
\ end {pmatrix}\end{split}\]
不同的核心可以对图像产生不同的影响,例如仅侵蚀或垂直扩展。
作为参考,这是我们创建的二进制映像:
侵蚀
计算机视觉中的侵蚀类似于土壤上的侵蚀。它消除了前景对象的边界。此过程可以消除背景噪音。
kernel = np.ones((3, 3), np.uint8)
binary_img = cv2.erode(binary_img, kernel, iterations = 1)
在腐蚀过程中,如果二进制图像的像素没有完全包含叠加的内核像素,则将其叠加的像素删除。
扩张
扩张与侵蚀相反。它没有远离边界,反而增加了边界。此过程可以去除较大区域内的小孔。
kernel = np.ones((3, 3), np.uint8)
binary_img = cv2.dilate(binary_img, kernel, iterations = 1)
在扩张过程中,每个叠加核的每个像素都包含在扩张中。
开放
开放是侵蚀,然后是扩张。此过程可消除噪声,而不会影响较大特征的形状。
kernel = np.ones((3, 3), np.uint8)
binary_img = cv2.morphologyEx(binary_img, cv2.MORPH_OPEN, kernel)
备注
在这种特定情况下,为了消除右上角的像素,应该进行更多次开放迭代。
关闭
关闭是扩张,然后是侵蚀。此过程可去除小孔或裂口,而不会影响较大特征的形状。
kernel = np.ones((3, 3), np.uint8)
binary_img = cv2.morphologyEx(binary_img, cv2.MORPH_CLOSE, kernel)