1.腐蚀与膨胀
膨胀用来处理缺陷问题,把缺陷填补掉,提高亮区面积; 腐蚀用来处理毛刺问题,把毛刺腐蚀掉,降低亮区面积。
腐蚀操作可以消除噪点,同时消除部分边界值,导致目标图像整体缩小。
膨胀操作可以使目标特征值增大,导致目标图像整体放大。
腐蚀的规则就是:kernel覆盖img的区域如果有白色,则把核的中心那个点标注为白色,如果该区域没有白色,则不用处理,这里相当于“&&”且运算
膨胀其实非常类似,只不过它关注的是核形状区域有没有黑色B,如果有,就把锚点涂成黑色
用1代表黑色0代表白色 对A图进行核为 3 * 3 的腐蚀操作后,中间的0会变成1 同理 对B图进行核为3 * 3的膨胀操作后,中间的1会变成0
Opencv API:
cv2.erode(src, kernel, iterations) # 腐蚀
cv2.dilate(src, kernel, iterations) # 膨胀
输入:1.src:要进行操作的图像;2.kernel:核结构;3.iterations:要进行腐蚀或者膨胀的次数,默认为1
输出:操作后得到的图像
卷积核核结构构造
kernel = np.ones((5, 5), np.uint8) #创建一个大小为 5x5 的全为 1 的矩阵,数据类型为 unsigned int 8。它通常被用作图像处理中的卷积核。
2.开运算和闭运算
开运算是先腐蚀后膨胀(有利于把亮刺腐蚀掉);闭运算是先膨胀后腐蚀(有利于把黑洞膨胀掉)图像比较亮的地方是图像的主体部分
开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不便。开运算一般能平滑图像的轮廓,削弱狭窄部分,去掉较细的突出。
闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变。闭运算也是平滑图像的轮廓,与开运算相反,它一般熔合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。
开运算用于去毛刺 闭运算用于去孔洞
Opencv API:
cv2.morphologyEx(src, op, kernel)
输入:1.src:要进行运算的图像;2.op:进行的操作类型;3.kernel:使用的卷积核类型
输出:开闭运算后得到的图像
3.礼帽与黑帽(顶帽与底帽)
(1)礼帽:取出亮度高的地方
顶帽运算 = 原图像 - 开运算
开运算可以消除暗背景下的高亮区域,那么如果用原图减去开运算结果就可以得到原图中灰度较亮的区域,所以又称白顶帽变换。
在二值图像中取出亮度较高的部分
(2)黑帽:取出亮度低的地方
底帽运算 = 原图像 - 闭运算
闭运算可以删除亮背景下的暗区域,那么用原图减去闭运算结果就可以得到原图像中灰度较暗的区域,所以又称黑底帽变换。
在二值图像中取出亮度较低的部分
Opencv API:
cv2.morphologyEx(src, op, kernel)
参数同上
参数 | 功能 |
---|---|
cv2.MORPH_OPEN | 开运算 |
cv2.MORPH_CLOSE | 闭运算 |
cv2.MORPH_TOPHAT | 礼帽运算 |
cv2.MORPH_BLACKHAT | 黑帽运算 |