[Python从零到壹] 四十七.图像增强及运算篇之腐蚀和膨胀详解
欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上开心快乐、共同成长。
该系列文章主要讲解Python OpenCV图像处理和图像识别知识,前期主要讲解图像处理基础知识、OpenCV基础用法、常用图像绘制方法、图像几何变换等,中期讲解图像处理的各种运算,包括图像点运算、形态学处理、图像锐化、图像增强、图像平滑等,后期研究图像识别、图像分割、图像分类、图像特效处理以及图像处理相关应用。
第二部分将讲解图像运算和图像增强,上一篇文章介绍图像阈值化处理,涉及阈值化处理、固定阈值化处理和自适应阈值化处理,这是图像边缘检测或图像增强等处理的基础。这篇文章将详细讲解开始图像形态学知识,主要介绍图像腐蚀处理和膨胀处理。数学形态学(Mathematical Morphology)是一种应用于图像处理和模式识别领域的新方法。数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具,其基本思想是用具有一定形态的结构元素去量度和提取图像中对应形状以达到对图像分析和识别的目的。希望文章对您有所帮助,如果有不足之处,还请海涵。
下载地址:
前文赏析:
第一部分 基础语法
第二部分 网络爬虫
第三部分 数据分析和机器学习
- [Python从零到壹] 十九.可视化分析之热力图和箱图绘制及应用详解
- [Python从零到壹] 二十.可视化分析之Seaborn绘图万字详解
- [Python从零到壹] 二十一.可视化分析之Pyechart绘图万字详解
- [Python从零到壹] 二十二.可视化分析之OpenGL绘图万字详解
- [Python从零到壹] 二十三.十大机器学习算法之决策树分类分析详解(1)
- [Python从零到壹] 二十四.十大机器学习算法之KMeans聚类分析详解(2)
- [Python从零到壹] 二十五.十大机器学习算法之KNN算法及图像分类详解(3)
- [Python从零到壹] 二十六.十大机器学习算法之朴素贝叶斯算法及文本分类详解(4)
- [Python从零到壹] 二十七.十大机器学习算法之线性回归算法分析详解(5)
- [Python从零到壹] 二十八.十大机器学习算法之SVM算法分析详解(6)
- [Python从零到壹] 二十九.十大机器学习算法之随机森林算法分析详解(7)
- [Python从零到壹] 三十.十大机器学习算法之逻辑回归算法及恶意请求检测应用详解(8)
- [Python从零到壹] 三十一.十大机器学习算法之Boosting和AdaBoost应用详解(9)
- [Python从零到壹] 三十二.十大机器学习算法之层次聚类和树状图聚类应用详解(10)
第四部分 Python图像处理基础
- [Python从零到壹] 三十三.图像处理基础篇之什么是图像处理和OpenCV配置
- [Python从零到壹] 三十四.OpenCV入门详解——显示读取修改及保存图像
- [Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形
- [Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解
- [Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制
- [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)
- [Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)
- [Python从零到壹] 四十.图像处理基础篇之图像量化处理
- [Python从零到壹] 四十一.图像处理基础篇之图像采样处理
- [Python从零到壹] 四十二.图像处理基础篇之图像金字塔向上取样和向下取样
第五部分 Python图像运算和图像增强
- [Python从零到壹] 四十三.图像增强及运算篇之图像点运算和图像灰度化处理
- [Python从零到壹] 四十四.图像增强及运算篇之图像灰度线性变换详解
- [Python从零到壹] 四十五.图像增强及运算篇之图像灰度非线性变换详解
- [Python从零到壹] 四十六.图像增强及运算篇之图像阈值化处理
- [Python从零到壹] 四十七.图像增强及运算篇之腐蚀和膨胀详解
第六部分 Python图像识别和图像高阶案例
第七部分 NLP与文本挖掘
第八部分 人工智能入门知识
第九部分 网络攻防与AI安全
第十部分 知识图谱构建实战
扩展部分 人工智能高级案例
一.形态学理论知识
数学形态学的应用可以简化图像数据,保持它们基本的形状特征,并出去不相干的结构。数学形态学的算法有天然的并行实现的结构,主要针对的是二值图像(0或1)。在图像处理方面,二值形态学经常应用到对图像进行分割、细化、抽取骨架、边缘提取、形状分析、角点检测,分水岭算法等。由于其算法简单,算法能够并行运算所以经常应用到硬件中[1-2]。
常见的图像形态学运算包括:
- 腐蚀
- 膨胀
- 开运算
- 闭运算
- 梯度运算
- 顶帽运算
- 底帽运算
这些运算在OpenCV中主要通过MorphologyEx()函数实现,它能利用基本的膨胀和腐蚀技术,来执行更加高级形态学变换,如开闭运算、形态学梯度、顶帽、黑帽等,也可以实现最基本的图像膨胀和腐蚀。其函数原型如下:
- dst = cv2.morphologyEx(src, model, kernel)
– src表示原始图像
– model表示图像进行形态学处理,包括:
(1)cv2.MORPH_OPEN:开运算(Opening Operation)
(2)cv2.MORPH_CLOSE:闭运算(Closing Operation)
(3)cv2.MORPH_GRADIENT:形态学梯度(Morphological Gradient)
(4)cv2.MORPH_TOPHAT:顶帽运算(Top Hat)
(5)cv2.MORPH_BLACKHAT:黑帽运算(Black Hat) - kernel表示卷积核,可以用numpy.ones()函数构建
图像的腐蚀(Erosion)和膨胀(Dilation)是两种基本的形态学运算,主要用来寻找图像中的极小区域和极大区域。图像腐蚀类似于“领域被蚕食”,它将图像中的高亮区域或白色部分进行缩减细化,其运行结果比原图的高亮区域更小。
设A,B为集合,A被B的腐蚀,记为A-B,其定义为:
该公式表示图像A用卷积模板B来进行腐蚀处理,通过模板B与图像A进行卷积计算,得出B覆盖区域的像素点最小值,并用这个最小值来替代参考点的像素值。如图1所示,将左边的原始图像A腐蚀处理为右边的效果图A-B。
图像腐蚀主要包括二值图像和卷积核两个输入对象,卷积核是腐蚀中的关键数组,采用Numpy库可以生成。卷积核的中心点逐个像素扫描原始图像,被扫描到的原始图像中的像素点,只有当卷积核对应的元素值均为1时,其值才为1,否则将其像素值修改为0。在Python中,主要调用OpenCV的erode()函数实现图像腐蚀。
其函数原型如下:
- dst = cv2.erode(src, kernel, iterations)
– src表示原始图像
– kernel表示卷积核
– iterations表示迭代次数,默认值为1,表示进行一次腐蚀操作
可以采用函数numpy.ones((5,5), numpy.uint8)创建5×5的卷积核,如下:
图像腐蚀操作的代码如下所示:
# -*- coding: utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
#读取图片
src = cv2.imread('test01.jpg', cv2.IMREAD_UNCHANGED)
#设置卷积核
kernel = np.ones((5,5), np.uint8)
#图像腐蚀处理
erosion = cv2.erode(src, kernel)
#显示图像
cv2.imshow("src", src)
cv2.imshow("result", erosion)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果如图2所示,左边表示原图,右边是腐蚀处理后的图像,可以发现图像中的干扰细线(噪声)被清洗干净。
如果腐蚀之后的图像仍然存在噪声,可以设置迭代次数进行多次腐蚀操作。比如进行9次腐蚀操作的核心代码如下:
- erosion = cv2.erode(src, kernel,iterations=9)
最终经过9次腐蚀处理的输出图像如图3所示。
图像膨胀是腐蚀操作的逆操作,类似于“领域扩张”,它将图像中的高亮区域或白色部分进行扩张,其运行结果比原图的高亮区域更大。
设A,B为集合,∅为空集,A被B的膨胀,记为A⊕B,其中⊕为膨胀算子,膨胀定义为:
该公式表示用B来对图像A进行膨胀处理,其中B是一个卷积模板,其形状可以为正方形或圆形,通过模板B与图像A进行卷积计算,扫描图像中的每一个像素点,用模板元素与二值图像元素做“与”运算,如果都为0,那么目标像素点为0,否则为1。从而计算B覆盖区域的像素点最大值,并用该值替换参考点的像素值实现图像膨胀。图4是将左边的原始图像A膨胀处理为右边的效果图A⊕B。
图像被腐蚀处理后,它将去除噪声,但同时会压缩图像,而图像膨胀操作可以去除噪声并保持原有形状,如图5所示。
在Python中,主要调用OpenCV的dilate()函数实现图像腐蚀。函数原型如下:
- dst = cv2.dilate(src, kernel, iterations)
– src表示原始图像
– kernel表示卷积核,可以用numpy.ones()函数构建
– iterations表示迭代次数,默认值为1,表示进行一次膨胀操作
图像膨胀操作的代码如下所示:
# -*- coding: utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
#读取图片
src = cv2.imread('zhiwen.png', cv2.IMREAD_UNCHANGED)
#设置卷积核
kernel = np.ones((5,5), np.uint8)
#图像膨胀处理
erosion = cv2.dilate(src, kernel)
#显示图像
cv2.imshow("src", src)
cv2.imshow("result", erosion)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果如图6所示:
本文主要介绍图像形态学处理,详细讲解了图像腐蚀处理和膨胀处理。数学形态学是一种应用于图像处理和模式识别领域的新方法,其基本思想是用具有一定形态的结构元素去量度和提取图像中对应形状以达到对图像分析和识别目的。
感谢在求学路上的同行者,不负遇见,勿忘初心。作者在华为云社区开放了Python图像处理系列书籍,图像处理系列主要包括三部分,分别是:
感恩能与大家在华为云遇见!
希望能与大家一起在华为云社区共同成长,原文地址:https://blog.csdn.net/Eastmount/article/details/124527782
(By:Eastmount 2022-08-11 夜于武汉)
参考文献:
- [1]冈萨雷斯著,阮秋琦译. 数字图像处理(第3版)[M]. 北京:电子工业出版社,2013.
- [2]阮秋琦. 数字图像处理学(第3版)[M]. 北京:电子工业出版社,2008.
- [3]毛星云,冷雪飞. OpenCV3编程入门[M]. 北京:电子工业出版社,2015.
- [4]Eastmount. [Python图像处理] 八.图像腐蚀与图像膨胀[EB/OL]. (2018-10-31). https://blog.csdn.net/Eastmount/article/details/83581277.
- 点赞
- 收藏
- 关注作者
评论(0)