1 膨胀和腐蚀介绍
腐蚀和膨胀是形态学最基本的操作,都是针对白色部分(高亮部分)而言的。
膨胀就是使图像中高亮部分扩张,得到比原图更大的高亮区域;腐蚀是原图像中的高亮区域被蚕食,得到比原图更小的高亮区域。
膨胀是求结构元素下像素最大值,腐蚀是求结构元素下像素最小值。
1.1 膨胀
具体操作:用一个结构元素扫描图像中的每一个像素,看结构元素覆盖下的原图的像素(二值图像只有0和1)的最大值是多少,若最大值是1,则该点像素为1;若最大值是0,则该点像素是0。
例子如下:
原图
结构元素
以第三行第二个像素点为例,将结构元素的中心点放置在该像素点上,结构元素覆盖的区域像素点的最大值为1,因此第三行第二个像素点的值为1。
膨胀后的结果:
![](https://i-blog.csdnimg.cn/blog_migrate/e057a642d729b051f57596a846a38890.png)
膨胀的作用是将与物体接触的所有背景点合并到物体中,使目标增大,可填补目标中的孔洞。
1.2 腐蚀
具体操作:用一个结构元素扫描图像中的每一个像素,用结构元素的中心对准当前正在扫描的像素,看结构元素覆盖下的原图对应的像素(二值图像只有0和1)的最小值是多少,若最小值是0,则该点像素为0;若是1,则该点像素是1。
例子如下:
原图
结构元素
![](https://img-blog.csdnimg.cn/20210407111052581.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NhZ2FjaXR5XzExMjU=,size_16,color_FFFFFF,t_70#pic_center)
以第二行第三个像素点为例,将结构元素的中心点放置在该像素点上,用结构元素的中心对准当前正在扫描的像素,结构元素覆盖的区域像素点的最小值为0,因此第二行第三个像素点的值变成0。
腐蚀后的结果:
![](https://i-blog.csdnimg.cn/blog_migrate/6a1e73c8c7419430f9ec3fdd36755de3.png)
腐蚀的作用是消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点。
2 opencv 实现
2.1 膨胀
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread('./image/letter.png')
# 创建核结构
kernel = np.ones((5,5),np.uint8)
#膨胀
img1 = cv.dilate(img,kernel)
plt.imshow(img1)
2.2 腐蚀
# 腐蚀
img2 = cv.erode(img,kernel)
plt.imshow(img2)