1、什么是膨胀与腐蚀

膨胀与腐蚀属于形态学范围,具体的含义根据字面意思来理解即可。但是更形象的话就是“增肥”与“减肥”。

它们的用途就是用来处理图形问题上。总结性的来说: + 膨胀用来处理缺陷问题; + 腐蚀用来处理毛刺问题。

膨胀就是把缺陷给填补了,腐蚀就是把毛刺给腐蚀掉了。这里其实说的并不严谨,也是为了大家理解方便。下面我们就用实例来进行演示。

2、形态学处理——膨胀

我们先引入一张图片进行分析。 程序实现:

img = cv2.imread('Pic/corrode.png')
def cv_show(img):cv2.imshow('', img)cv2.waitKey(0)cv2.destroyAllWindows()
cv_show(img)

图中我们可以看到,这张图片是一个二值图片(只有黑白),而且还增加了一些毛刺。而且还包含字体中还包含一些小的间隙(缺陷)。

下面我们对这张图片进行膨胀处理。膨胀是如何处理的呢?对于一个像素点,我们需要先指定对每个像素点膨胀的范围。

这里我们指定范围为33的矩阵,kernel(卷积核核)指定为全为1的33矩阵,卷积计算后,该像素点的值等于以该像素点为中心的3*3范围内的最大值。由于我们是二值图像,所以只要包含周围白的部分,就变为白的。

总结: 只要原图片3 * 3范围内有白的,该像素点就是白的。 程序实现:

kernel = np.ones((3, 3), dtype=np.uint8)
dilate = cv2.dilate(img, kernel, 1) # 1:迭代次数,也就是执行几次膨胀操作
cv_show(dilate)

分析: 上图我们可以看出毛刺部分变粗,与此同时字体中的间隙也变小,补了缺陷部分。

2.1 更改卷积核大小

如果我们更改核的大小(4 * 4),也就改变了膨胀的程度。 只要4 * 4范围内有白的就变成白的。

kernel_2 = np.ones((4, 4), dtype=np.uint8) # 卷积核变为4*4
dilate = cv2.dilate(img, kernel_2, 1)
cv_show(dilate)

2.2、更改迭代次数

kernel = np.ones((3, 3), dtype=np.uint8)
dilate = cv2.dilate(img, kernel, 2) # 更改迭代次数为2
ss = np.hstack((img, dilate))
cv_show(ss)

分析: 更改迭代次数将为2,将对图片进行2次的膨胀操作

3、形态学处理——腐蚀操作

腐蚀操作和膨胀操作相反,也就是将毛刺消除,判断方法为:在卷积核大小中对图片进行卷积。取图像中(3 * 3)区域内的最小值。由于我们是二值图像,也就是取0(黑色)。 总结: 只要原图片3 * 3范围内有黑的,该像素点就是黑的。

程序实现:

kernel = np.ones((3, 3), dtype=np.uint8)
erosion = cv2.erode(img, kernel, iterations=1)
ss = np.hstack((img, erosion))
cv_show(ss)

分析: 可以看出来,毛刺部分被清除掉,但与此同时,字体边缘部分也向里凹陷了一部分。

3.1、更改卷积核大小

kernel_2 = np.ones((4, 4), dtype=np.uint8)
erosion = cv2.erode(img, kernel_2, iterations=1)
ss = np.hstack((img, erosion))
cv_show(ss)

分析: 卷积核变大后,我们发现他已经腐蚀的部分有点多了,字体原来的部分也被清除。

3.2、更改迭代次数

kernel = np.ones((3, 3), dtype=np.uint8)
erosion = cv2.erode(img, kernel, iterations=2)
ss = np.hstack((img, erosion))
cv_show(ss)

分析: 增加迭代次数后,腐蚀变得更加厉害,所以应该选择合适的迭代次数。

4、开运算和闭运算

开运算:先腐蚀,在膨胀 闭运算:先膨胀,在腐蚀

我们在上面的膨胀和腐蚀的图片中可以看到,图片大小程度上都受到了损失,字体信息缺失或者变粗等等。如果我们不想更改原有信息,即字体粗细。那么我们可以使用上面的两种运算。例如开运算,先对字体进行变细,在对字体进行变粗,整体上字体粗细不会发生变化。毛刺信息在腐蚀的时候就已经消除了,膨胀也不会膨胀出多余信息。

4.1、开运算

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, 1)
ss = np.hstack((img, opening))
cv_show(ss)

分析: 我们发现大部分毛刺已经消除,而且字体信息也没有发生变化,这也就是我们想要的效果。虽然仍然有一部信息没有被清除,我们只需要调整卷积核的大小就可以实现。

4.2、闭运算

closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)  ## 有缺陷,填补缺陷
ss = np.hstack((img, closing))
cv_show(ss)

分析: 字体不改变的前提下,我们把字体缺陷信息补全。

5、梯度计算

梯度计算主要显示的是边缘信息。计算的方法:

膨胀的图像 - 腐蚀的图像

我们明显的看出,用大一圈的图像减去小一圈的图像正好就是边缘的信息。

gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
cv_show(gradient)

分析: 我们可以看出来,我们形成了一个空心的字体样式

6、高帽和黑帽

高帽计算:原始图像 - 开运算结果 黑帽计算:闭运算结果 - 原始图像

6.1、高帽计算

我们知道开运算的结果就是去除毛刺,我们原始图像减去开运算结果就是我们要消除的毛刺信息。

top_hat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
ss = np.hstack((img, top_hat))
cv_show(ss)

分析: 可以看出来,所有的毛刺信息我们全部提取了出来。

6.2、黑帽操作

高帽操作显示毛刺,那么黑帽就是显示缺陷

black_hat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
ss = np.hstack((img, black_hat))
cv_show(ss)

分析: 这里我们看的不是很明显,我们只需要只要黑帽所处理的问题是什么。针对不同的场景应用不用的方法。

最后

更多精彩内容,大家可以转到我的主页:

首页 | 曲怪曲怪​quguai.net:8090

halcon区域腐蚀膨胀算子_OpenCV 图像处理之膨胀与腐蚀相关推荐

  1. python腐蚀膨胀代码_OpenCV+python实现膨胀和腐蚀的示例

    1,概念及原理: 膨胀(Dilating) (或) (1)将图像 A 与任意形状的内核 (B),通常为正方形或圆形,进行卷积. (2)内核 B 有一个可定义的 锚点, 通常定义为内核中心点. (3)进 ...

  2. sobel算子_OpenCV图像处理专栏十八 | 手动构造Sobel算子完成边缘检测

    1. 前言 众所周知,在传统的图像边缘检测算法中,最常用的一种算法是利用Sobel算子完成的.Sobel算子一共有 个,一个是检测水平边缘的算子,另一个是检测垂直边缘的算子. 2. Sobel算子优缺 ...

  3. halcon区域腐蚀膨胀算子_Halcon算子

    Halcon部分算子功能:*读取一张图像 read_image(Image,'C:/Users/Desktop/无标题.png') *画一个矩形生成区域 draw_rectangle1(3600, R ...

  4. halcon区域腐蚀膨胀算子_Halcon 形态学膨胀腐蚀应用举例

    上图中有一个硬币和一把钥匙,要求:计算出硬币的面积和中心坐标 第一步用灰度直方图选出硬币的区域:threshold (GrayImage, Regions, 110, 250) 第二步用开运算去掉图像 ...

  5. matlab图像的腐蚀和膨胀_OpenCV图像处理系列八 --- 腐蚀与膨胀

    今天,我们一起来学习图像形态学操作中两种最基本的形态学操作,即腐蚀与膨胀. 一.理论 数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,是数 ...

  6. Emgu CV4图像处理之膨胀和腐蚀、梯度计算、开闭运算14(C#)

    本文测试环境: win10  64位 vistual studio 2019 Emgu CV 4.6.0 环境配置准备: 1 新增控制台项目,.net framework为4.7.2 2  把win- ...

  7. 数字图像处理(十)腐蚀和膨胀

    文章目录 前言 一.腐蚀 1.概念 2.算法的具体步骤 3.举例 4.python代码 二.膨胀 1.概念 2.算法步骤 3.举例 4.C++代码 5. 结果展示 参考资料 前言   二值图像中一类主 ...

  8. python图像腐蚀处理_Python图像处理之膨胀与腐蚀的操作

    引言 膨胀与腐蚀是图像处理中两种最基本的形态学操作,膨胀将目标点融合到背景中,向外部扩展,腐蚀与膨胀意义相反,消除连通的边界,使边界向内收缩.在本文中我们将了解使用内核的图像膨胀与腐蚀的基本原理. 让 ...

  9. python腐蚀膨胀代码_Python图像处理--膨胀与腐蚀

    欢迎关注 "小白玩转Python",发现更多 "有趣" 引言 膨胀与腐蚀是图像处理中两种最基本的形态学操作,膨胀将目标点融合到背景中,向外部扩展,腐蚀与膨胀意义 ...

最新文章

  1. unity水管工_我是如何从30岁的管道工转变为32岁的Web开发人员的
  2. 地球系统科学简史:理解地球复杂性的多学科探索历程
  3. Linux中和文件相关的操作
  4. MyBatis mapper文件中使用常量
  5. 如何在PySide中使用qrc资源文件
  6. Zookeeper源码用ant进行编译为eclipse工程--转载
  7. java string封装类_java中八种基本数据类型以及它们的封装类,String类型的一些理解...
  8. Working with FBX SDK (2)
  9. mysql 性能状态_MySQL获取系统性能和状态_MySQL
  10. 处理器不同模式下寄存器
  11. docker pull理解误区
  12. android edge 去广告,edge浏览器怎么去广告? edge浏览器去广告插件adsafe的使用方法...
  13. oracle数据库自动修复,【案例】Oracle数据库由于存在坏块导致无法启动的恢复过程...
  14. Elasticsearch 7.1API 文档翻译
  15. https://download.csdn.net/download/dsj27/7105355
  16. 批量梯度下降法(BGD)、随机梯度下降法(SGD)和小批量梯度下降法(MBGD)
  17. WPS表格转换成office用什么软件
  18. Python笔记:利用pygame模块实现三原色颜色滚动条效果
  19. GSoC: GitHub Checks API 项目第一阶段总结
  20. Java识别验证码和图像处理

热门文章

  1. javascript 的面向对象特性参考
  2. 最爱莫乎生命,其次是“你”
  3. 百度竞价用户免费拥有百度指数?
  4. linux shell read 从键盘或标准输入中读取文本
  5. 检查 linux guest vm 使用的什么 虚拟化技术
  6. linux c http下载 带确认 进度条
  7. python3 asyncio 协程模块
  8. 群晖系统挂载NTFS硬盘
  9. iptables规则的查看、添加、删除和修改
  10. 驱动中获取PsActiveProcessHead变量地址的五种方法