[Python从零到壹] 四十八.图像增强及运算篇之形态学开运算、闭运算和梯度运算

举报
eastmount 发表于 2022/08/11 23:33:30 2022/08/11
【摘要】 欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。第二部分将讲解图像运算和图像增强,上一篇文章介绍图像腐蚀处理和膨胀处理。这篇文章将继续介绍开运算、闭运算和梯度运算。希望对您有所帮助~

欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上开心快乐、共同成长。

该系列文章主要讲解Python OpenCV图像处理和图像识别知识,前期主要讲解图像处理基础知识、OpenCV基础用法、常用图像绘制方法、图像几何变换等,中期讲解图像处理的各种运算,包括图像点运算、形态学处理、图像锐化、图像增强、图像平滑等,后期研究图像识别、图像分割、图像分类、图像特效处理以及图像处理相关应用。

第二部分将讲解图像运算和图像增强,上一篇文章介绍图像腐蚀处理和膨胀处理。这篇文章将继续介绍开运算、闭运算和梯度运算。数学形态学(Mathematical Morphology)是一种应用于图像处理和模式识别领域的新方法。数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具,其基本思想是用具有一定形态的结构元素去量度和提取图像中对应形状以达到对图像分析和识别的目的。希望文章对您有所帮助,如果有不足之处,还请海涵。


下载地址:记得点赞喔 O(∩_∩)O

前文赏析:

第一部分 基础语法

第二部分 网络爬虫

第三部分 数据分析和机器学习

  • [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图像运算和图像增强

第六部分 Python图像识别和图像高阶案例

第七部分 NLP与文本挖掘

第八部分 人工智能入门知识

第九部分 网络攻防与AI安全

第十部分 知识图谱构建实战

扩展部分 人工智能高级案例


一.图像开运算

开运算一般能平滑图像的轮廓,削弱狭窄部分,去掉较细的突出。闭运算也是平滑图像的轮廓,与开运算相反,它一般熔合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。图像开运算是图像依次经过腐蚀、膨胀处理的过程,图像被腐蚀后将去除噪声,但同时也压缩了图像,接着对腐蚀过的图像进行膨胀处理,可以在保留原有图像的基础上去除噪声。其原理如图1所示。

在这里插入图片描述

设A是原始图像,B是结构元素图像,则集合A被结构元素B做开运算,记为A◦B,其定义为:

在这里插入图片描述

换句话说,A被B开运算就是A被B腐蚀后的结果再被B膨胀。图像开运算在OpenCV中主要使用函数morphologyEx(),它是形态学扩展的一组函数,其函数原型如下:

dst = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

  • src表示原始图像
  • cv2.MORPH_OPEN表示图像进行开运算处理
  • kernel表示卷积核,可以用numpy.ones()函数构建

图像开运算的代码如下所示:

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  

#读取图片
src = cv2.imread('test01.png', cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((5,5), np.uint8)

#图像开运算
result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如图2所示,左边为原始图像,右边为处理后的图像,可以看到原始图形中的噪声点被去除了部分。

在这里插入图片描述

但处理后的图像中仍然有部分噪声,如果想更彻底地去除,可以将卷积设置为10×10的模板,代码如下所示:

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  

#读取图片
src = cv2.imread('test01.png', cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((10,10), np.uint8) 

#图像开运算
result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如图3所示:

在这里插入图片描述


二.图像闭运算

图像闭运算是图像依次经过膨胀、腐蚀处理的过程,先膨胀后腐蚀有助于过滤前景物体内部的小孔或物体上的小黑点。其原理如图4所示:

在这里插入图片描述

设A是原始图像,B是结构元素图像,则集合A被结构元素B做开运算,记为A·B,其定义为:

在这里插入图片描述

换句话说,A被B闭运算就是A被B膨胀后的结果再被B腐蚀。图像开运算在OpenCV中主要使用函数morphologyEx(),其函数原型如下:

dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)

  • src表示原始图像
  • cv2.MORPH_CLOSE表示图像进行闭运算处理
  • kernel表示卷积核,可以用numpy.ones()函数构建

图像开运算的代码如下所示:

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  

#读取图片
src = cv2.imread('test02.png', cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((10,10), np.uint8)

#图像闭运算
result = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如图5所示,它有效地去除了图像中间的小黑点(噪声)。

在这里插入图片描述


三.图像梯度运算

图像梯度运算是图像膨胀处理减去图像腐蚀处理后的结果,从而得到图像的轮廓,其原理如图6所示,(a)表示原始图像,(b)表示膨胀处理后的图像,(c)表示腐蚀处理后的图像,(d)表示图像梯度运算的效果图。

在这里插入图片描述

在Python中,图像梯度运算主要调用morphologyEx()实现,其中参数cv2.MORPH_GRADIENT表示梯度处理,函数原型如下:

dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)

  • src表示原始图像
  • cv2.MORPH_GRADIENT表示图像进行梯度运算处理
  • kernel表示卷积核,可以用numpy.ones()函数构建

图像梯度运算的实现代码如下所示。

# -*- coding: utf-8 -*-
import cv2  
import numpy as np  

#读取图片
src = cv2.imread('test03.png', cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((10,10), np.uint8)

#图像梯度运算
result = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

图像梯度运算处理的结果如图7所示,左边为原始图像,右边为处理后的效果图。

在这里插入图片描述


四.总结

本文主要介绍图像形态学处理,详细讲解了图像开运算、闭运算和梯度运算。数学形态学是一种应用于图像处理和模式识别领域的新方法,其基本思想是用具有一定形态的结构元素去量度和提取图像中对应形状以达到对图像分析和识别目的。

感谢在求学路上的同行者,不负遇见,勿忘初心。作者在华为云社区开放了Python图像处理系列书籍,图像处理系列主要包括三部分,分别是:

在这里插入图片描述

在这里插入图片描述

请添加图片描述

感恩能与大家在华为云遇见!
希望能与大家一起在华为云社区共同成长,原文地址:https://blog.csdn.net/Eastmount/article/details/125178579

(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.
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。