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

码界翱翔
• 阅读 1144

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

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

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

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

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

形态学操作概念

形态学运算是一种根据图像的形状对其进行处理的技术。它通过比较相邻像素来构建图像。对于二进制图像({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。

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

结构元素对给定图像的每个像素进行卷积。如果它满足未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和运算。除了基本的形态学运算,形态学还可以用于形状分析、特征提取、目标识别等领域,具有广泛的应用。

https://avoid.overfit.cn/post/8b49f4cdb26045a8969c8e53fa543533

作者:Zubair

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
SIFT+BOW 实现图像检索
原文地址:https://blog.csdn.net/silence2015/article/details/77374910本文概述图像检索是图像研究领域中一个重要的话题,广泛应用于医学,电子商务,搜索,皮革等。本文主要是探讨学习基于局部特征和词袋模型的图像检索设计。图像检索概述图像检索按照描述图像不同方式可以分为两
不是海碗 不是海碗
2年前
APISpace的 人脸检测API 它来啦~
人脸检测是指通过计算机视觉技术,从图像中识别、检测出人脸,并确定人脸的位置及大小。它是一种计算机图像处理技术,是计算机视觉领域的关键技术,可用于实现自动识别和跟踪人脸。
Stella981 Stella981
3年前
Android OpenCV(二十二):边缘检测
边缘检测什么是图像的边缘?图像的边缘是图像最基本的特征之一。所谓边缘(或边沿)是指周围像素灰度有跳跃性变化或“屋顶”变化的那些像素的集合。边缘是图像局部强度变化最明显的地方,它主要存在于目标与目标、目标与背景、区域与区域之间,因此它是图像分割依赖的重要特征。从本质上说,图像边缘是图像局部特性不连续性(灰度突变、颜色突变、纹理结构
可莉 可莉
3年前
14、OpenCV实现图像的空间滤波——图像锐化及边缘检测
1、图像锐化理论基础1、锐化的概念   图像锐化的目的是使模糊的图像变得清晰起来,主要用于增强图像的灰度跳变部分,这一点与图像平滑对灰度跳变的抑制正好相反。而且从算子可以看出来,平滑是基于对图像领域的加权求和或者说积分运算的,而锐化则是通过其逆运算导数(梯度)或者说有限差分来实现的。2、图像的一阶微分和二阶
Stella981 Stella981
3年前
SVG 图像入门教程
作者:阮一峰 www.ruanyifeng.com/blog/2018/08/svg.html一、概述SVG是一种基于XML语法的图像格式,全称是可缩放矢量图(ScalableVectorGraphics)。其他图像格式都是基于像素处理的,SVG则是属于对图像的形状描述,所以它本质上是文本文件,体积较小,
Stella981 Stella981
3年前
Android OpenCV(十三):图像金字塔
图像金字塔图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。金字塔的底部是
Easter79 Easter79
3年前
SVG 图像入门教程
作者:阮一峰 www.ruanyifeng.com/blog/2018/08/svg.html一、概述SVG是一种基于XML语法的图像格式,全称是可缩放矢量图(ScalableVectorGraphics)。其他图像格式都是基于像素处理的,SVG则是属于对图像的形状描述,所以它本质上是文本文件,体积较小,
数据堂 数据堂
2年前
人脸识别技术的精度提高及其应用
人脸识别技术是一种重要的生物识别技术,广泛应用于安全防护、金融支付、门禁系统等领域。为了提高人脸识别技术的精度,研究人员采用了多种方法,如深度学习、特征提取、图像处理等。其中,深度学习的方法在人脸识别领域取得了很好的效果。通过训练大量的图像数据,深度学习模
流浪剑客 流浪剑客
1年前
苹果爱吃电脑图像清晰处理工具:Perfectly Clear Workbench for mac中文版
PerfectlyClearWorkbench是一款强大的图像处理软件,主要面向Mac操作系统。它主要用于图像优化和校正,以及进行批处理和无人值守处理的任务。这款软件提供了先进的算法和技术来自动化、加速和简化图像处理过程,成为摄影师和图像编辑人员的首选工具
马尚 马尚
1年前
验证码识别实战
验证码是网站常用的一种安全验证手段,但是对于自动化程序来说,验证码可能是个难题。本文将介绍如何使用Python和一些常用的库来识别验证码图像。步骤1:预处理图像首先,我们需要对验证码图像进行预处理,以便更好地提取图像中的文本信息。预处理包括灰度化和二值化。