Python从0到1丨了解图像形态学运算中腐蚀和膨胀

这篇具有很好参考价值的文章主要介绍了Python从0到1丨了解图像形态学运算中腐蚀和膨胀。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要:这篇文章将详细讲解图像形态学知识,主要介绍图像腐蚀处理和膨胀处理。

本文分享自华为云社区《[Python从零到壹] 四十七.图像增强及运算篇之腐蚀和膨胀详解》,作者: eastmount 。

一.形态学理论知识

数学形态学的应用可以简化图像数据,保持它们基本的形状特征,并出去不相干的结构。数学形态学的算法有天然的并行实现的结构,主要针对的是二值图像(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所示:

四.总结

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

参考文献:

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

 

 

点击关注,第一时间了解华为云新鲜技术~文章来源地址https://www.toymoban.com/news/detail-457487.html

到了这里,关于Python从0到1丨了解图像形态学运算中腐蚀和膨胀的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python-opencv之形态学操作(腐蚀和膨胀)原理详解

    Removing noise. Isolation of individual elements and joining disparate elements in an image. Finding of intensity bumps or holes in an image. 最基本的形态操作是侵蚀和扩张。让我们更详细地了解这些操作。 原理 它会侵蚀前景物体的边界,并从图像中移除小规模的细节,但同时会减少感兴趣区域的大小。

    2024年02月05日
    浏览(54)
  • 【C++】【图像处理】形态学处理(腐蚀、膨胀)算法解析(以.raw格式的图像为基础进行图像处理、gray levels:256)

        总结 针对处理二值图图像时,腐蚀或膨胀算法的核心: 1、确定该点(假设为A点)的灰度级,是0还是255; 2、遍历以该点为中心的3x3的邻域,获取灰度级等于0或者等于255的像素点个数,使用 flag 变量记录; 3、当 flag 大于设定的数值时,则A点的灰度级将被赋值为0或者

    2024年02月05日
    浏览(58)
  • opencv基础-38 形态学操作-闭运算(先膨胀,后腐蚀)cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

    闭运算是先膨胀、后腐蚀的运算,它有助于关闭前景物体内部的小孔,或去除物体上的小黑点,还可以将不同的前景图像进行连接。 例如,在图 8-17 中,通过先膨胀后腐蚀的闭运算去除了原始图像内部的小孔(内部闭合的闭运算),其中: 左图是原始图像。 中间的图是对原

    2024年02月14日
    浏览(79)
  • 【OpenCv • c++】形态学技术操作 —— 腐蚀与膨胀

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪

    2024年02月04日
    浏览(54)
  • 08- OpenCV:形态学操作(膨胀与腐蚀 、提取水平与垂直线)

    目录 前言 一、膨胀(Dilation)与 腐蚀(Erosion) 二、形态学操作 1、开操作(Opening) 2、闭操作(Closing) 3、形态学梯度(Morphological Gradient) 4、顶帽 ( top hat) 5、黑帽 ( black hat) 6、相关的API 7、代码演示 三、形态学操作应用-提取水平与垂直线 1、原理方法 2、实现步骤

    2024年01月17日
    浏览(54)
  • 图像处理技巧形态学滤波之腐蚀操作

    欢迎回来,我的图像处理爱好者们!今天,让我们深入研究图像处理领域中的形态学计算。这些非线性的图像处理技术允许我们操纵图像中对象的形状和结构。在本系列中,我们将依次介绍四种基本的形态学操作:腐蚀、膨胀、开操作和闭操作。 闲话少说,我们直接开始吧!

    2024年02月13日
    浏览(56)
  • (数字图像处理MATLAB+Python)第九章图像形态学运算-第三节:二值图像的形态学处理

    形态滤波 :是一种在数字图像处理中常用的图像处理技术,用于改善图像的质量、提取图像的特定特征或去除图像中的噪声。形态滤波主要基于形态学运算,通过结构元素(也称为模板)对图像进行局部区域的操作,从而改变图像的形状和结构。选择不同形状(如各向同性的

    2024年02月08日
    浏览(67)
  • OpenCV(图像处理)-基于Python-形态学处理-开运算、闭运算、顶帽、黑帽运算

    OpenCV形态学是一种基于OpenCV库的数字图像处理技术,主要用于处理图像的形状、结构和空间关系。它包括一系列图像处理工具和算法,包括膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽等。 通过对图像进行形态学操作可以实现一些重要的图像处理任务,比如去除噪

    2024年02月09日
    浏览(57)
  • 基于FPGA的图像形态学膨胀算法实现,包括tb测试文件和MATLAB辅助验证

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 在FPGA中仿真结果如下所示: 将FPGA中的仿真结果导入到matlab显示二维图,效果如下: matlab2022a vivado2019.2        膨胀操作是形态学中另外一种基本的操作。膨胀操作和腐蚀操

    2024年02月07日
    浏览(37)
  • 形态学运算与仿真:图像处理中形态学操作的简单解释

    形态学是图像处理领域的一个分支,主要用于描述和处理图像中的形状和结构。形态学可以用于提取图像中的特征、消除噪声、改变图像的形状等。其中形态学的核心操作是形态学运算。 形态学运算是一种基于形状的图像处理技术,它是通过结构元素与图像进行特定运算的方

    2024年02月04日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包