机器学习人工智能/模式识别/机器学习精华专题深度学习-推荐系统-CV-NLP

形态学开运算闭运算

2019-07-03  本文已影响0人  9933fdf22087
作者: 泛音/Fain
网站: https://www.fainke.com
微信公众号: 知识交点

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

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

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

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

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


image.png

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

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


image.png

Python Code

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

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://fainke.com

上一篇 下一篇

猜你喜欢

热点阅读