9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀、膨胀、开启、闭合)
9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀、膨胀、开启、闭合)
文章目录
- 9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀、膨胀、开启、闭合)
- 1 算法原理
- 1.1 腐蚀(erode)
- 1.2 膨胀(dilate)
- 1.3 开启(opening)
- 1.4 闭合(closing)
- 2 代码
- 3 效果
1 算法原理
前提知识点:
结构元(SE,Structure Element)最直接的理解就是卷积操作中的卷积核,或者是空间域滤波中提到的滤波器。虽然形态学操作中结构元的形状可以是任意的,但是由于在图像操作中,为了方便计算,通常要求结构元是矩形的阵列,对于任意形状的结构元,如果不满足矩形的要求,则用0将其填充为矩形即可。
另外,结构元内部的有效元素不像滤波器那样有权值,通常结构元中只分为两种元素,就是0和1,不会出现其他数值的系数。(当然对有些算法来说也有例外)。结构元对图像进行的操作也和卷积非常类似,就是由结构元的中心依次滑过图像,然后进行设计好的操作即可。接下来就开始介绍图像处理中常见的形态学操作。
1.1 腐蚀(erode)
公式:
其中,A c是图像A的补集,即1-A。上式表达的意思就是,在z的移动下,如果结构元B能够完全包含在图像A中(完全包含意味着结构元B中的有效元素对应于图像A中的位置全都是前景像素。z的移动就是针对于图像A的所有像素范围的移动。
上图中,左边实线围住的9x9方格就是结构元B,红色代表其有效区域,白色代表其无效区域(0填充)。右侧实现代表图像A,浅蓝色部分代表A的前景像素,白色代表背景像素。
当结构元滑动到1区域时,所有有效区域对应的像素都是前景像素(紫色区域,红+蓝),因此称此时B ⊆ A,此时,1号位置在结果图像中应该置1。反之,如果只有部分区域重合,如结构元处于2号位置,那么说明此时的2号点不满足腐蚀条件,应该在结果图像中置0。
1.2 膨胀(dilate)
其中,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TaQ0B0gG-1629076834164)(file:///C:\Users\mgboy\AppData\Local\Temp\ksohtml11668\wps4.jpg)]称为结构元B的反射,指的是,结构元B绕结构元的中心(通常设置在SE矩阵中心)旋转180°后的新结构元。对于对称的结构元,就有B = [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-58lrFRrv-1629076834166)(file:///C:\Users\mgboy\AppData\Local\Temp\ksohtml11668\wps5.jpg)] 。
膨胀的集合含义就是,SE和图像的前景像素至少有一个交点,那么当前移动到的像素就置1,否则置0。在膨胀的条件下,之前图示中的1,2号区域均会被置1。(腐蚀时,2号区域是被置0的)。
1.3 开启(opening)
开操作就是先用SE腐蚀图像A,再对腐蚀后的结果进行膨胀。
第一反应或许会觉得,这操作不是很多余吗?其实细想后发现,其中自有妙处。假设图像中存在很多细小琐碎的颗粒或噪声,那么经过第一步腐蚀后,这些细小的噪声就会被腐蚀而消失,尽管紧接着进行了膨胀操作,但是由于细小颗粒已经完全消失,因此即使膨胀也无法恢复。相反,那些图像中的主体,经过腐蚀后仍然存在,再经过膨胀就可以恢复原样。
1.4 闭合(closing)
闭操作和开操作正好相反,是先膨胀再腐蚀。
如果图像中存在细小的孔洞或者缝隙,通过膨胀后就可以填充细小孔洞和缝隙,使其和主体连接起来,而再腐蚀的时候,只会腐蚀图像主体,而不会再恢复缝隙等瑕疵。因此,闭操作很适合拿来修补图像瑕疵的。
2 代码
运行代码说明
1.要改变代码中的图片地址(地址不能有中文)
更改
put(path)
函数中的路径put(r'../image/image1.jpg')
2.注意最后的
plt.savefig('1.new.jpg')
是保存plt图像,如果不使用可以注释掉代码依赖包:
matplotlib 3.4.2 numpy 1.20.3 opencv-python 4.1.2.30
# pip安装 pip install matplotlib numpy opencv-python
import numpy as np
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falsedef put(path):# 读取图片img = cv2.imread(path)# 由于cv2.imread 读取图像格式为b,g,r但是 plt显示按照 rgb次序!因此要转换一下。b, g, r = cv2.split(img)img2 = cv2.merge([r, g, b])rows, cols = img.shape[:2]src = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 通过单阈值获得二值图像ret, src = cv2.threshold(src, 102, 255, cv2.THRESH_BINARY)# 反过来,大于阈值是0,小于阈值是255# ret, src = cv2.threshold(src, 102, 255, cv2.THRESH_BINARY_INV)# 设置卷积核kernel = np.ones((10, 10), np.uint8) # 0是黑色,255是白色# 图像腐蚀处理res1 = cv2.erode(src, kernel) # 注意膨胀和腐蚀都是对白色255来说的,# 图像膨胀处理res2 = cv2.dilate(src, kernel)# 图像开运算res3 = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)# 图像闭运算res4 = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)# 图像显示plt.subplot(231), plt.imshow(img2, plt.cm.gray), plt.title('原始图像'), plt.axis('off')plt.subplot(232), plt.imshow(src, plt.cm.gray), plt.title('二值图像'), plt.axis('off')plt.subplot(233), plt.imshow(res1, plt.cm.gray), plt.title('腐蚀'), plt.axis('off')plt.subplot(234), plt.imshow(res2, plt.cm.gray), plt.title('膨胀'), plt.axis('off')plt.subplot(235), plt.imshow(res3, plt.cm.gray), plt.title('开运算'), plt.axis('off')plt.subplot(236), plt.imshow(res4, plt.cm.gray), plt.title('闭运算'), plt.axis('off')# plt.savefig('1.new-img.jpg')plt.show()# 图像处理函数,要传入路径
put(r'../image/img5.jpg')
注意膨胀和腐蚀都是对白色255来说的,。如果获得的二值图像中的图案是黑色的,要用第二条转换函数。这样得到的图案比较美观。
3 效果
9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀、膨胀、开启、闭合)相关推荐
- 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除
9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 文章目录 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 1 算法原理 2 代码 3 效果 1 ...
- 9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充
9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充 文章目录 9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充 1 算法原理 2 代码 3 效果 1 ...
- 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测
9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 文章目录 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 1 算 ...
- 9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度、形态平滑、高帽变换、低帽变换)
9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度.形态平滑.高帽变换.低帽变换) 文章目录 9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度.形 ...
- 9.3 Python图像处理之图像数学形态学-灰度形态学
9.3 Python图像处理之图像数学形态学-灰度形态学 文章目录 9.3 Python图像处理之图像数学形态学-灰度形态学 1 算法原理 2 代码 3 效果 1 算法原理 灰度图像与二值图像的区别在 ...
- python 简单图像处理(13) 二值图腐蚀和膨胀,开运算、闭运算
原文:http://www.cnblogs.com/xianglan/archive/2010/12/29/1921211.html python 简单图像处理(13) 二值图腐蚀和膨胀,开运算.闭运 ...
- 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))
目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...
- 利用python opencv实现图像自适应二值化
对灰度图像利用阈值得到一个二值化的图像,是常最常用的图像处理技术之一.例如,灰度大于127的图像设置为1.小于127的设置为0,这种处理便是固定阈值127的二值化处理. 自适应的二值化处理不同于固定阈 ...
- 图像处理——灰度化、二值化、膨胀算法、腐蚀算法以及开运算和闭运算
一.RGB RGB色彩模式使用RGB模型为图像中每个像素的RGB分量分配一个0~255范围内的强度值.RGB图像仅仅使用三种颜色,R(red).G(green).B(blue),就能够使它们依照不同的 ...
最新文章
- 公开致铁道部 高效运营从细节入手
- 在wsl中运行开源项目tinyhttpd遇到的问题
- 在实际项目中使用LiteDB NoSQL数据库
- 设置SGA的原则以及修改它的大小
- 钉钉自带浏览器版本过低,导致Object.assign不兼容...
- Android项目实战(二十):浅谈ListView悬浮头部展现效果
- poj 2378 树型dp
- 基于词典和弱标注信息的电影评论情感分析系统
- 好用不贵的蓝牙耳机有哪些?三百以内好用的蓝牙耳机推荐
- 程序员涨工资大多数靠跳槽吗?
- 新版标准日本语高级_第12课
- 双非计算机研究生要不要读,“双非”大学研究生,到底值不值得读?
- 微波射频网将举办“微带传输线无源交调测试可重复性”在线技术讲座
- Web认证如何对接第三方认证平台?
- R语言数据分析笔记——Cohort 存留分析
- 二值神经网络(Binary Neural Network,BNN)
- 解决微信图片反防盗链的方法(此图片来自微信公众平台,未经允许不可引用)
- springboot异步和切面_Spring异步编程 | 你的@Async就真的异步吗 ☞ 异步历险奇遇记...
- 大一计算机专业学期计划范文,大一学期的个人学习计划范文(精选5篇)
- 电子器件系列26:el 375n光耦 电气特性参数