0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

形态学运算与仿真:图像处理中形态学操作的简单解释

冬至子 来源:Zubair 作者:Zubair 2023-05-23 15:52 次阅读

形态学是图像处理领域的一个分支,主要用于描述和处理图像中的形状和结构。形态学可以用于提取图像中的特征、消除噪声、改变图像的形状等。其中形态学的核心操作是形态学运算。

形态学运算是一种基于形状的图像处理技术,它是通过结构元素与图像进行特定运算的方式来改变图像的形态和特征。结构元素是一种小型、预定义的形状,通常是矩形、圆形或者椭圆形,可以与图像中的像素进行匹配。

形态学运算包括膨胀、腐蚀、开运算、闭运算等。其中膨胀操作可以将图像中的物体变大,使它更加连通;腐蚀操作则可以将图像中的物体变小,使它更加细化;开运算可以去除噪声,平滑图像的边缘;闭运算可以填补图像中物体的孔洞。

形态学在图像处理中应用广泛,特别是在图像分割、边缘检测、文本识别、计算机视觉等领域中。

形态学操作概念

形态学运算是一种根据图像的形状对其进行处理的技术。它通过比较相邻像素来构建图像。对于二进制图像({0,1}或{0,255}),这种操作会十分的简单。

在熟悉形态学操作之前,我们需要了解一些基本术语

Structuring Element 被翻译为结构元素或结构单元,也称为structuring function或者structuring kernel,是形态学中用于进行形态学运算的一种预定义的、小型的形状。SE通常是一个矩阵或者一个类似于核心的图形。

SE定义了用于改变图像形态的操作,例如膨胀、腐蚀、开运算和闭运算等。这些操作基于SE与图像中像素的匹配和计算。SE在运算中可以通过平移、旋转和翻转等操作进行变换。

形态学操作是通过在图像中传播结构元素来完成的。通过比较结构元素下的像素,在图像的原点位置改变像素值。所以SE的大小和形状选择是非常关键的,不同的SE可以产生不同的结果。通常情况下,SE的形状和大小需要根据图像的特征和处理目的来选择。例如,矩形形状的SE通常适用于处理直线形状的图像,而圆形形状的SE适用于处理圆形和椭圆形的图像。

Miss:如果图像中没有一个像素与结构元素匹配,则称为Miss。

Hit:当结构元素的至少一个像素与图像像素重叠时,称为Hit。

Fit:如果结构元素的所有像素都与图像匹配,则称为Fit。

形态学基本操作

形态学有两种形态操作:腐蚀、膨胀。另外两个常用的复合操作开、闭也是从这两个操作派生出来的。

1、Erosion 侵蚀 ,也被翻译成腐蚀:结构元素对对象的每个像素进行卷积。如果结构元素的所有像素与目标图像像素重叠(满足Fit条件),则将目标图像像素填充前景像素强度值。否则,将填充背景像素强度值。

假设背景为0,前景为1,那么伪代码就是:

if Fit -> 1 else -> 0

使用了一个强度为1的2x2结构元素作为演示:

另外一张是6x6像素的图片。其中白色元素强度值为0,蓝色像素强度值为1。

1.jpg

结构元素对给定图像的每个像素进行卷积。如果它满足未Fit条件,它将在结构元素的原点位置将像素更改为0。上面我们已经用红色显示了像素从1到0的位置。最后得到以下结果。

可以看到主图像像素由于腐蚀而减少。Opnecv为我们提供了很好的实现,我们可以直接使用:

import cv2
 import matplotlib.pyplot as plt
 import numpy as np
 img4=cv2.imread('/work/morphology_er.png',cv2.IMREAD_GRAYSCALE)
 plt.imshow(img4, cmap='gray')
 plt.show()

我们的图像是白色背景上的黑色。但是OpenCV需要黑色背景和白色图像对象来进行形态学操作。所以我们使用逆二值化。在形态学操作后再次进行二值阈值逆处理,以保留白色背景和黑色物体。

thr,img_th = cv2.threshold(img4,127,255,cv2.THRESH_BINARY_INV)
 kernel=np.ones((5,5), np.uint8)
 new_h=cv2.erode(img_th,kernel,iterations=3)
 ret,correction= cv2.threshold(new_h,127,255,cv2.THRESH_BINARY_INV)
 plt.imshow(correction,cmap='gray')
 plt.show()

可以看到,腐蚀会消除小的物体或者细节。

img5=cv2.imread('/work/morphology_ero.png',cv2.IMREAD_GRAYSCALE)
 plt.imshow(img5, cmap='gray')
 plt.show()

thr,img_th = cv2.threshold(img5,127,255,cv2.THRESH_BINARY_INV)
 kernel=np.ones((5,5), np.uint8)
 new_h=cv2.erode(img_th,kernel,iterations=3)
 ret,correction= cv2.threshold(new_h,127,255,cv2.THRESH_BINARY_INV)
 plt.imshow(correction,cmap='gray')
 plt.show()

或者使我们的物体变小,或者断开彼此之间的连接

2、Dilation 膨胀 :结构元素在物体图像上进行卷积。如果任何结构元素的像素值与目标图像重叠(满足Hit条件),则目标图像像素将被前景像素强度值填充。否则,像素强度值将保持不变。

伪代码如下:

If Hit -> 1 else -> 0

我们还是使用上面的例子:

完成操作后,它产生如下所示的结果。

膨胀会增加物体图像的像素。我们继续使用OpenCV演示:

img3=cv2.imread('/work/morphology_di.png',cv2.IMREAD_GRAYSCALE)
 plt.imshow(img3, cmap='gray')
 plt.show()

thr,img_th = cv2.threshold(img3,127,255,cv2.THRESH_BINARY_INV)
 kernel=np.ones((5,5), np.uint8)
 new_h=cv2.dilate(img_th,kernel,iterations=3)
 ret,correction= cv2.threshold(new_h,127,255,cv2.THRESH_BINARY_INV)
 plt.imshow(correction,cmap='gray')
 plt.show()

膨胀可以用于将物体扩大或连接起来,填补物体内部的空洞或裂缝

复合操作

还有一些其他的复合形态操作。其中,开和闭是两种应用广泛的操作。

可以看到,开操作Open先对图像进行腐蚀操作,然后再进行膨胀操作的组合过程,可以用于消除小的物体或细节,并且可以平滑物体的边界

闭操作Close则相反,它是先对图像进行膨胀操作,然后再进行腐蚀操作的组合过程。可以用于填补小的空洞或裂缝,并且也可以平滑物体的边界。

Opencv也提供了内置的实现:

opening = cv.morphologyEx(img, cv.MORPH_OPEN, kernel)
 closing = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)

总结

形态学是一种基于形状和结构的图像处理方法,其核心是结构元素(SE)的定义和运算。SE是一个小的形状,通常是一个矩阵或者类似核心的图形,用于进行形态学运算,如腐蚀、膨胀、开运算和闭运算等。这些运算可以用于消除噪声、填补空洞、连接物体和分离物体等。

形态学的运算和SE的选择对图像处理结果具有重要影响,因此需要根据图像的特征和处理目的来选择合适的SE和运算。除了基本的形态学运算,形态学还可以用于形状分析、特征提取、目标识别等领域,具有广泛的应用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图像处理器
    +关注

    关注

    1

    文章

    104

    浏览量

    15496
  • 计算机视觉
    +关注

    关注

    8

    文章

    1698

    浏览量

    45977
  • OpenCV
    +关注

    关注

    31

    文章

    634

    浏览量

    41338
收藏 人收藏

    评论

    相关推荐

    怎么用labview进行形态学计数?

    用labview进行图像计数,图像经过二值化处理需要用到形态学进行计数,如何计数啊 ,,,求指导啊
    发表于 01-06 19:14

    LabVIEW图像处理形态学函数处理

    使用形态学函数处理简单形态学介绍,主要的二值形态学操作方法是erosion(腐蚀)和dila
    发表于 08-09 08:20

    LabVIEW形态学之去除部分颗粒和填充洞的程序(二)

    的颗粒大小。具体的说明可以看程序和帮助文档。填充洞使用形态学处理函数的IMAQ FillHole,进行图像空白点的填充。具体效果和程序看下图和附件。程序中注意当使用IMAQ WinD
    发表于 08-12 21:00

    案例:使用Labview形态学处理函数,来截取图中条形码的图像,并读出条形码的数值

    通过上面三个帖子的发布,大家对形态学处理函数应该有所了解了。这篇帖子使用形态学的函数来读取图片中条形码的数值。对图像处理步骤:1、首先对
    发表于 08-15 10:00

    labview的二值形态学操作erosion(腐蚀)和dilation(膨胀),他们的函数在哪找?

    labview的二值形态学操作erosion(腐蚀)和dilation(膨胀),他们的函数在哪找?
    发表于 09-19 09:00

    基于FPGA形态学运算、闭运算和梯度的实现

    `1 概述开运算一般平滑物体的轮廓、断开较窄的狭颈并消除细的突出物。闭运算同样也会平滑轮廓的一部分,但与开操作相反,它通常会弥合较窄的间断和细长的沟壑,消除小的孔洞,填补轮廓线的的断
    发表于 08-10 09:12

    基于数学形态学的货车标记图像跟踪识别研究

    针对铁路货车厂修后低速驶出过程需要进行标记准确性的判定,研究了基于数学形态学的货车标记图像跟踪识别技术。图像处理之后采用数学
    发表于 12-07 14:04 10次下载

    PCB外观检查机形态学运算多核并行加速的实现

    为了解决PCB外观检查机存在的速度问题,对其中用到的形态学运算采用多核并行的方式进行加速。给出了腐蚀运算的普通算法和一种优化算法的多核并行实现过程。
    发表于 10-08 14:41 33次下载
    PCB外观检查机<b class='flag-5'>形态学运算</b>多核并行加速的实现

    基于GPU的数学形态学运算并行加速研究

    数学形态学运算是一种高度并行的运算,其计算量大而又如此广泛地应用于对实时性要求较高的诸多重要领域。为了提高数学形态学运算的速度,提出了一种基于CUDA架构的GPU并行数学形
    发表于 10-25 16:55 55次下载
    基于GPU的数学<b class='flag-5'>形态学运算</b>并行加速研究

    形态学图像处理综合示例_《OpenCV3编程入门》书本配套源代码

    《OpenCV3编程入门》书本配套源代码:形态学图像处理综合示例
    发表于 06-06 15:52 8次下载

    形态学图像处理综合示例_OpenCV3编程入门-源码例程

    OpenCV3编程入门-源码例程全集-形态学图像处理综合示例,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 16:55 0次下载

    改进的形态学运算在声纳图像生成的应用_李莉

    改进的形态学运算在声纳图像生成的应用_李莉
    发表于 03-19 11:30 1次下载

    使用OpenCV实现形态学操作和腐蚀膨胀及开闭运算的实例说明

    本文档的主要内容详细介绍的是的是使用OpenCV实现形态学操作和腐蚀膨胀及开闭运算的实例说明。
    发表于 11-22 16:52 1次下载

    基于二值图像的滤波算法即形态学滤波

    形态学滤波由腐蚀和膨胀两种操作组成。首先,腐蚀(Erosion)的核心思想是图像像素之间进行逻辑与运算简单来说,当一个包含当前像素的结构单
    的头像 发表于 03-09 11:51 5599次阅读

    OpenCV实现了图像形态学什么常见操作

    图像形态学图像处理的分支学科,在二值图像处理占有
    的头像 发表于 05-27 14:11 1450次阅读
    OpenCV<b class='flag-5'>中</b>实现了<b class='flag-5'>图像</b><b class='flag-5'>形态学</b>什么常见<b class='flag-5'>操作</b>?