图像形态学morphological

腐蚀

[1] - 腐蚀是一种消除边界点,使边界向内部收缩的过程
可以用来消除小且无意义的物体.

腐蚀算法:
用 3x3 的 kernel,扫描图像的每一个像素;
用 kernel 与其覆盖的二值图像做 “与” 操作;
如果都为1,结果图像的该像素为1;否则为0.
结果:使二值图像减小一圈.

膨胀

[2] - 膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程
可以用来填补物体中的空洞.

膨胀算法:
用 3x3 的 kernel,扫描图像的每一个像素;
用 kernel 与其覆盖的二值图像做 “与” 操作;
如果都为0,结果图像的该像素为0;否则为1.
结果:使二值图像扩大一圈.

0- 先腐蚀后膨胀的过程称为开运算
用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积.

[4] - 先膨胀后腐蚀的过程称为闭运算
用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积

2.1. 定义 kernel 矩阵

首先定义 kernel 矩阵 - 两种方式:

[1] - 利用 cv2.getStructuringElement 函数

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) # 椭圆结构
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3)) #十字结构 
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) # 矩形结构

# 图像腐蚀 eroded = cv2.erode(png, kernel)

plt.subplot(1, 3, 2)

plt.imshow(eroded) #

Eroded Image plt.axis('off')

# 图像膨胀 dilated = cv2.dilate(png, kernel)

plt.subplot(1, 3, 3) plt.imshow(dilated) # Dilated Image

plt.axis('off')

plt.show()

猜你喜欢

转载自blog.csdn.net/qq_51609636/article/details/119151890