形态学操作
- 1 连通性
- 1.1 邻接关系
- 1.2 连通性
- 2 形态学操作
- 2.1 腐蚀和膨胀
- 2.2 开、闭运算
- 2.3 礼帽和黑帽
目标:
理解图像的邻域,连通性
了解不同的形态学操作:腐蚀、膨胀、开闭运算,礼帽和黑帽等,以及不同操作之间的关系。
1 连通性
1.1 邻接关系
在图像中,最小的单位是像素,每个像素周围有8个临接相思树,常见的邻接关系有3种:4邻域、8邻域、D邻域。
1.2 连通性
定义: 是描述区域和边界的重要概念,两个像素连通的两个必要条件是:1)两个像素位置是否相邻;2)两个像素的灰度值是否满足特定的相似性准则。
连通分类:
有4联通、8联通和m连通三种
(1)4连通:对于具有值V的像素p和q,如果q在集合N4(p)中,则称这两个像素是四连通的。
(2)8连通:对于具有值V的像素p和q,如果q在集合N8(p)中,则称这两个像素是8连通的。
(3)m连通:对于具有值V的像素p和q,如果1)q在集合N4§中,或q在集合ND(p)中;2)且N4(p)与N4(q)的交集为空,则称两个像素是m连通的,既4连通和D连通的混合连通。
2 形态学操作
定义: 形态学转换是基于图像形状的一些简单操作,它通常在二进制图像(二值图像,值为0或者1)上执行。
腐蚀和膨胀是两个基本的形态学运算符。然后它的变体形式,如开运算,闭运算,礼帽黑帽等
2.1 腐蚀和膨胀
腐蚀和膨胀是最基本的形态学操作,腐蚀和膨胀都是针对白色部分(高亮部分)而言的。
(1)膨胀:
是使图像中高亮部分扩张,效果图拥有比原图更大的高亮区域;是求局部最大值的操作.
具体操作: 用一个结构元素扫描图像中的每个像素,用结构元素中的每个像素与其覆盖的像素做‘与’操作,如果都为0,则该像素为0,否则为1。
作用: 将与物体接触的所有背景点合并到物体中,使目标增大,可填补目标中的孔洞
API: cv2.dilate(img,kernel,iterations)
参数:
img:要处理的图像
kernel:核结构
iterations:膨胀的次数,默认是1 (2)腐蚀:
是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域;是求局部最小值的操作。
具体操作: 用一个结构元素扫描图像中的每个像素,用结构元素中的每个像素与其覆盖的像素做‘与’操作,如果都为1,则该像素为1,否则为0。
作用: 消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点。
API: cv2.erode(img,kernel,iterations)
参数:
img:要处理的图像
kernel:核结构
iterations:腐蚀的次数,默认是1
import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img=cv2.imread('erode.png')
#2. 腐蚀和膨胀
# 2.1 创建核结构
kenel=np.ones((5,5),np.uint8)
# 2.2 腐蚀和膨胀
erode_img=cv2.erode(img,kenel,1)
dilate_img=cv2.dilate(img,kenel,1)
#3.显示图像
cv2.imshow('origin',img)
cv2.imshow('erode',erode_img)
cv2.imshow('dilate',dilate_img)
cv2.waitKey(0)
2.2 开、闭运算
(1)开运算:
定义: 先腐蚀后膨胀,其作用是:分离物体,消除小区域。
特点: 消除噪点,去除小干扰,而不影响原来的图像
(2)闭运算
定义: 先膨胀后腐蚀,其作用是:消除闭合物体里面的孔洞
特点: 可以填充闭合区域
(3)API:
cv2.morphologyEx(img,op,kernel)
参数:
img:要处理的图像
op:处理方式,若进行开运算,则设为cv2.MORPH_OPEN;若进行闭运算,则设为cv2.MORPH_CLOSE
kernel:核结构
import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img=cv2.imread('open_close.png')
#2. 开运算和闭运算
# 2.1 创建核结构
kenel=np.ones((10,10),np.uint8)
# 2.2 开运算和闭运算
open_img=cv2.morphologyEx(img,cv2.MORPH_OPEN,kenel)#开运算
close_img=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kenel)#闭运算
#3.显示图像
cv2.imshow('origin',img)
cv2.imshow('open',open_img)
cv2.imshow('close',close_img)
cv2.waitKey(0)
2.3 礼帽和黑帽
(1)礼帽运算:
原图像与开运算之差
(2)黑帽运算:
闭运算与原图像之差
API:
cv2.morphlogyEx(img,op,kernel)
参数:
img:要处理的图像
op:处理方式