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图像处理之图像数学形态学-二值形态学(腐蚀、膨胀、开启、闭合)相关推荐

  1. 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除

    9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 文章目录 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 1 算法原理 2 代码 3 效果 1 ...

  2. 9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充

    9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充 文章目录 9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充 1 算法原理 2 代码 3 效果 1 ...

  3. 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测

    9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 文章目录 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 1 算 ...

  4. 9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度、形态平滑、高帽变换、低帽变换)

    9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度.形态平滑.高帽变换.低帽变换) 文章目录 9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度.形 ...

  5. 9.3 Python图像处理之图像数学形态学-灰度形态学

    9.3 Python图像处理之图像数学形态学-灰度形态学 文章目录 9.3 Python图像处理之图像数学形态学-灰度形态学 1 算法原理 2 代码 3 效果 1 算法原理 灰度图像与二值图像的区别在 ...

  6. python 简单图像处理(13) 二值图腐蚀和膨胀,开运算、闭运算

    原文:http://www.cnblogs.com/xianglan/archive/2010/12/29/1921211.html python 简单图像处理(13) 二值图腐蚀和膨胀,开运算.闭运 ...

  7. 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))

    目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...

  8. 利用python opencv实现图像自适应二值化

    对灰度图像利用阈值得到一个二值化的图像,是常最常用的图像处理技术之一.例如,灰度大于127的图像设置为1.小于127的设置为0,这种处理便是固定阈值127的二值化处理. 自适应的二值化处理不同于固定阈 ...

  9. 图像处理——灰度化、二值化、膨胀算法、腐蚀算法以及开运算和闭运算

    一.RGB RGB色彩模式使用RGB模型为图像中每个像素的RGB分量分配一个0~255范围内的强度值.RGB图像仅仅使用三种颜色,R(red).G(green).B(blue),就能够使它们依照不同的 ...

最新文章

  1. 公开致铁道部 高效运营从细节入手
  2. 在wsl中运行开源项目tinyhttpd遇到的问题
  3. 在实际项目中使用LiteDB NoSQL数据库
  4. 设置SGA的原则以及修改它的大小
  5. 钉钉自带浏览器版本过低,导致Object.assign不兼容...
  6. Android项目实战(二十):浅谈ListView悬浮头部展现效果
  7. poj 2378 树型dp
  8. 基于词典和弱标注信息的电影评论情感分析系统
  9. 好用不贵的蓝牙耳机有哪些?三百以内好用的蓝牙耳机推荐
  10. 程序员涨工资大多数靠跳槽吗?
  11. 新版标准日本语高级_第12课
  12. 双非计算机研究生要不要读,“双非”大学研究生,到底值不值得读?
  13. 微波射频网将举办“微带传输线无源交调测试可重复性”在线技术讲座
  14. Web认证如何对接第三方认证平台?
  15. R语言数据分析笔记——Cohort 存留分析
  16. 二值神经网络(Binary Neural Network,BNN)
  17. 解决微信图片反防盗链的方法(此图片来自微信公众平台,未经允许不可引用)
  18. springboot异步和切面_Spring异步编程 | 你的@Async就真的异步吗 ☞ 异步历险奇遇记...
  19. 大一计算机专业学期计划范文,大一学期的个人学习计划范文(精选5篇)
  20. 电子器件系列26:el 375n光耦 电气特性参数

热门文章

  1. POJ1789-Truck History
  2. 卸载亚信科技安全助手
  3. 计算机系保研专家推荐信,保研攻略——文书材料:导师推荐信(内附模板)
  4. 什么是计算机主板芯片组,什么是Intel 4系列芯片组ICH7主板,支持哪些CPU?
  5. 结构计算之多目视觉(三)
  6. Python爬取微博的评论人的微博网址
  7. Ubuntu10.04如何设置特效3D桌面
  8. scim 跨域身份管理介绍(一)
  9. MATLAB中果蝇味道浓度判定函数,果蝇优化算法MATLAB实现
  10. Spring 注解面面通 之 @CrossOrigin 注册处理方法源码解析