在图像中,最小的单位是像素,每个像素周围有8个邻接像素,常见的邻接关系有3种:4邻接、8邻接和D邻接
分别如下图所示:
连通性是描述区域和边界的重要概念,两个像素连通的两个必要条件是:
1.两个像素的位置是否相邻
2.两个像素的灰度值是否满足特定的相似性准则(或者是否相等
根据连通性的定义,有4联通、8联通和m联通三种。
·4联通:对于具有值V的像素p和q,如果q在集合N4(p )中,则称这两个像素是4连通。
·8联通:对于具有值V的像素p和q,如果q在集合N8(p )中,则称这两个像素是8连通。
对于具有值V’的像素p和q,如果:
1.q在集合N4(p )中或q在集合ND(p )中,并且N4(p )与N₄(q)的交集为空(没有值V的像素)
则称这两个像素是m连通的,即4连通和D连通的混合连通。
腐蚀和膨胀是最基本的形态学操作,腐蚀和膨胀都是针对白色部分(高亮部分)而言的;
膨胀就是使图像中高亮部分扩张,效果图拥有比原图更大的高亮区域;
腐蚀是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域;
膨胀是求局部最大值的操作,腐蚀是求局部最小值的操作。
腐蚀的作用是消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点。
API:
cv.erode(img, kernel, iterations )
参数:
作用是将与物体接触的所有背景点合并到物体中,使目标增大,可添补目标中的孔洞。
API:
cv.dilate(img,kernel, iterations)
参数:
示例:
我们使用一个5*5的卷积核实现腐蚀和膨胀的运算:
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1读取图像
img = cv.imread("./images/b.jpg")
# 2创建核结构
kernel = np.ones((5, 5), np.uint8)
# 3图像腐蚀和膨胀
erosion = cv.erode(img, kernel)# 腐蚀
dilate = cv.dilate(img, kernel)# 膨胀
# 4图像展示
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 8), dpi=100)
axes[0].imshow(img)
axes[0].set_title("原图")
axes[1].imshow(erosion)
axes[1].set_title("腐蚀后结果")
axes[2].imshow(dilate)
axes[2].set_title("膨胀后结果")
plt.show()