0%

图像开运算与闭运算

腐蚀和膨胀是对像素值大的部分而言的,即高亮白部分而不是黑色部分;以下图片前景物体为高亮像素,背景为低亮像素。

膨胀(dilated) 是图像中的高亮部分进行膨胀,领域扩张,效果图拥有比原图更大的高亮区域;操作的时候表现为相邻区域用极大值代替,高亮区域增加。

腐蚀(eroded) 是图像中的高亮部分被腐蚀掉,领域缩减,效果图拥有比原图更小的高亮区域;操作的时候表现为相邻区域用极小值代替,高亮区域减少。

开运算
先腐蚀再膨胀
① 开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不便。
② 开运算是一个基于几何运算的滤波器。
③ 结构元素大小的不同将导致滤波效果的不同。
④ 不同的结构元素的选择导致了不同的分割,即提取出不同的特征。

开运算的效果图如下图所示:清除噪点,把一些太小的物体过滤。
image.png

闭运算
先膨胀再腐蚀
① 闭运算能够填平前景物体内的小裂缝,而总的位置和形状不变。
② 闭运算是通过填充图像的凹角来滤波图像的。
③ 结构元素大小的不同将导致滤波效果的不同。
④ 不同结构元素的选择导致了不同的分割。

闭运算的效果图如下图所示:融合细微连接的图块,如果图像中存在断连物体,可以用此方法修复连接。
image.png

Python Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import cv2
# 读取图片
img = cv2.imread('./image.png',0)
# 定义核结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3))
# 腐蚀图像
eroded = cv2.erode(img,kernel)
# 显示腐蚀后的图像
cv2.imshow("Eroded Image",eroded)
#膨胀图像
dilated = cv2.dilate(img,kernel)
#显示膨胀后的图像
cv2.imshow("Dilated Image",dilated);
# 开运算
opened = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
# 显示开运算后的图像
cv2.imshow("Open", opened)
#闭运算
closed = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
#显示闭运算后的图像
cv2.imshow("Close",closed);
删除图像中小物体的Python API
1
2
3
4
5
skimage.morphology.remove_small_objects(ar, min_size=64, connectivity=1, in_place=False)
# ar: 待操作的bool型数组。
# min_size: 最小连通区域尺寸,小于该尺寸的都将被删除。默认为64.
# connectivity: 邻接模式,1表示4邻接(up,down,left,right),2表示8邻接(up_left,up_right,down_left,down_right)
# in_place: bool型值,如果为True,表示直接在输入图像中删除小块区域,否则进行复制后再删除。默认为False.

参考链接
https://blog.csdn.net/hanshanbuleng/article/details/80657148

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道