Python从0到1丨图像增强及运算:形态学开运算、闭运算和梯度运算

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

本文分享自华为云社区《[Python从零到壹] 四十八.图像增强及运算篇之形态学开运算、闭运算和梯度运算》,作者: eastmount 。

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

一.图像开运算

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

Python从0到1丨图像增强及运算:形态学开运算、闭运算和梯度运算

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

Python从0到1丨图像增强及运算:形态学开运算、闭运算和梯度运算

换句话说,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所示,左边为原始图像,右边为处理后的图像,可以看到原始图形中的噪声点被去除了部分。

Python从0到1丨图像增强及运算:形态学开运算、闭运算和梯度运算

但处理后的图像中仍然有部分噪声,如果想更彻底地去除,可以将卷积设置为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所示:

Python从0到1丨图像增强及运算:形态学开运算、闭运算和梯度运算

二.图像闭运算

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

Python从0到1丨图像增强及运算:形态学开运算、闭运算和梯度运算

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

Python从0到1丨图像增强及运算:形态学开运算、闭运算和梯度运算

换句话说,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所示,它有效地去除了图像中间的小黑点(噪声)。

Python从0到1丨图像增强及运算:形态学开运算、闭运算和梯度运算

三.图像梯度运算

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

Python从0到1丨图像增强及运算:形态学开运算、闭运算和梯度运算

在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从0到1丨图像增强及运算:形态学开运算、闭运算和梯度运算

四.总结

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

参考文献:

  • [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.

 

点击关注,第一时间了解华为云新鲜技术~

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python从0到1丨图像增强及运算:形态学开运算、闭运算和梯度运算 - Python技术站

(0)
上一篇 2023年3月31日
下一篇 2023年3月31日

相关文章

  • CANN开发实践:4个DVPP内存问题的典型案例解读

    摘要:由于DVPP媒体数据处理功能对存放输入、输出数据的内存有更高的要求(例如,内存首地址128字节对齐),因此需调用专用的内存申请接口,那么本期就分享几个关于DVPP内存问题的典型案例,并给出原因分析及解决方法。 本文分享自华为云社区《FAQ_DVPP内存问题案例》,作者:昇腾CANN。 DVPP是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体…

    人工智能概论 2023年4月19日
    00
  • 云图说丨初识华为云安全云脑——新一代云安全运营中心

    本文分享自华为云社区《【云图说】 | 第273期 初识华为云安全云脑——新一代云安全运营中心》,作者:阅识风云。 安全云脑(SecMaster)是华为云原生的新一代云安全运营中心,集华为云三十多年安全经验,基于云原生安全,提供云上资产管理、安全态势管理、安全信息和事件管理、安全编排与自动响应等能力,实现提前预防风险、感知安全事件、安全事件自动化闭环。   点…

    云计算 2023年4月18日
    00
  • 一文读懂华为云云原生产品及开源实践

    摘要:本文主要从华为云原生产品及开源产品两个层面进行展开,详述华为云在云原生领域的最佳实践。 本文分享自华为云社区《【云驻共创】华为云云原生产品及开源实践》,作者:kaliarch。 一 云原生发展阶段和趋势 回首过去,云计算的快速发展,为众多行业的数字化转型提供了推力,也提升了企业数字化转型的技术革新,将科技创新与商业元素的不断融合,又催生出新的业务形态。…

    云计算 2023年4月17日
    00
  • 华为亮相KubeCon EU 2023 新云原生开源项目Kuasar推动“云上演进”

    摘要:协力同行、拥抱开源,解放数字生产力,为社会和行业带来更多价值。 在数字时代,如果说企业是一艘巨大的货船,那么云原生则为企业的每一个业务、每一个应用提供了标准化的集装箱,摆脱笨重的底层桎梏,打造新一代云操作系统,驾驶这轮“货船”航向数字化的未来世界。 4月18日—21日,一年一度的云原生开源领域顶级峰会KubeCon & CloudNativeC…

    云计算 2023年4月25日
    00
  • 云图说|云数据库GaussDB如何做到卓越性能

    摘要:对于数据库来说,性能一直被视为最关键的部分。GaussDB作为华为自主创新研发的分布式关系型数据库,那么华为云数据库GaussDB在提升数据库性能方面都有哪些黑科技呢? 本文分享自华为云社区《【云图说】第275期 云数据库GaussDB如何做到卓越性能》,作者:阅识风云。 对于数据库来说,性能一直被视为最关键的部分。GaussDB作为华为自主创新研发的…

    MySQL 2023年4月17日
    00
  • Python图像处理丨基于K-Means聚类的图像区域分割

    摘要:本篇文章主要讲解基于理论的图像分割方法,通过K-Means聚类算法实现图像分割或颜色分层处理。 本文分享自华为云社区《[Python图像处理] 十九.图像分割之基于K-Means聚类的区域分割》,作者: eastmount。 本篇文章主要讲解基于理论的图像分割方法,通过K-Means聚类算法实现图像分割或颜色分层处理。基础性文章,希望对你有所帮助。 一…

    2023年4月2日
    00
  • 跟我学Python丨图像增强及运算:局部直方图均衡化和自动色彩均衡化处理

    摘要:本文主要讲解图像局部直方图均衡化和自动色彩均衡化处理。这些算法可以广泛应用于图像增强、图像去噪、图像去雾等领域。 本文分享自华为云社区《[Python从零到壹] 五十四.图像增强及运算篇之局部直方图均衡化和自动色彩均衡化处理》,作者: eastmount。 一.局部直方图均衡化 前文通过调用OpenCV中equalizeHist()函数实现直方图均衡化…

    2023年3月31日
    00
  • 云原生2.0网关API标准发展趋势

    摘要:Gateway API希望取代Ingress API。 本文分享自华为云社区《云原生2.0网关API标准发展趋势》,作者:华为云云原生团队 。 云原生网关API标准背景及发展现状 Gateway API是一个开源的API标准,源自Kubernetes SIG-NETWORK兴趣组。从出身角度讲,可谓根正苗红,自从开源以来备受关注,被寄予厚望。Gatew…

    云计算 2023年4月20日
    00
合作推广
合作推广
分享本页
返回顶部