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

news2024/10/6 20:29:55

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

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

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

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

形态学操作概念

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/516721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis自学之路—安装与配置(一)

目录 简介 安装与配置Redis 下载 上传至linux 安装Redis 解压redis 安装gcc编译环境 注意 停止redis服务 附:Redis的命令行客户端 简介 本文章主要说一下Redis的安装与配置,学一门技术肯定是要从基础学起,其实所有的技术都很简单&…

关于Python爬虫使用代理的问题

当我们使用爬虫程序进行数据采集时,经常会遇到一些网站对爬虫的限制,例如IP封禁、访问频率限制等。为了解决这些问题,我们可以使用代理服务器来进行爬虫操作。本文将介绍爬虫代理的相关知识。 一、什么是爬虫代理? 爬虫代理是指…

IntelliJ IDEA 统一设置编码为utf-8编码 及 jar包运行指定UTF-8

文章目录 一、背景二、解决方法1.修改项目编码格式统一为UTF-82.将项目中的.idea文件夹中的encodings.xml文件中的编码格式改为uft-83.File->Settings->Build,Execution,Deployment -> Compiler -> Java Compiler5. java -jar xxx 命令里面添加UTF-8 编码 一、背景…

笔记-编程语言实现模式(Language Implementation Patterns)

第1章 语言应用初探 Lanugage Applications Cracked Open 1.1 大局观 The Big Picture 主要思想:文件读取部分对输入内容进行“识别”,并输出数据结构作为中间表示(intermediate representation,IR),供其…

制造业为什么要数字化?

制造业数字化,主要包含以下一些因素,有优势也有缺点: 制造业数字化的优势: 提高效率:数字化允许各种制造过程自动化,可以提高效率并降低成本。可以缩短生产时间、减少浪费并提高生产率。 增强质量控制&am…

毛泽东《浪淘沙·北戴河》气势磅礴

毛泽东《浪淘沙北戴河》气势磅礴 https://baijiahao.baidu.com/s?id1662486888860973345&wfrspider&forpc 毛主席因其身份地位以及独特的人生经历,在诗词创作中有他人难以企及的气概。今天我们再在欣赏他的一首《浪淘沙北戴河》,这首词第一句便…

Node.JS环境,Express服务器实现GZIP压缩传输

Node.js是一种基于Chrome V8 JavaScript引擎的开源、跨平台而且异步事件驱动的运行时环境,可以让JavaScript代码在服务器端运行。Express是一个流行的Node.js框架,它提供了简单而强大的工具来创建Web服务器和API。 这篇文章将介绍如何使用Node.js和Expr…

关于说服(一)-反抗机制

首先有一个原则:没有人喜欢被改变 不好的话术反而会引起别人的抵触心理 为避免触发反抗机制,可以稍微改变一下话术:将 “你应该” 改为 “我需要”** 没人喜欢说教者 说教者常用句式 1 你为什么不肯去试一试 ->(隐喻) 你在逼别人复习反…

[CryptoHack] Public-key Cryptography Partial Solutions

文章目录 FactoringMonoprimeManyprimeSalty Factoring So far we’ve been using the product of small primes for the modulus, but small primes aren’t much good for RSA as they can be factorised using modern1 methods2. What is a “small prime”? There was a…

汽车毫米波雷达的规定和标准(四)

01 — 虚警漏警问题 工信部无2021【181】号文件中,是这样定义的“虚警”:虚警是指在规定的条件下,实际目标不存在而雷达探测判为有目标的事件。虚警与虚假信号相关,下图中产生的虚警现象是由于干扰信号的功率超过检测门限导致。…

ResearchRabbit.ai: 学术论文摘要研究工具

【产品介绍】 ResearchRabbit是一个帮助研究人员发现、跟踪和分享学术论文的平台。可以根据你的兴趣和收藏提供个性化的推荐和摘要,并且可以让你可视化论文和作者之间的网络关系。 Researchrabbit.ai是一个基于人工智能的文献搜索和管理工具,它可以帮助你…

Speechify: 在线文本转语音(TTS)网站

【产品介绍】 Speechify是一个基于人工智能技术的在线文本转语音(TTS)网站,可以让用户把任何文本转换成自然流畅的语音,从而提高阅读效率和理解能力。 Speechify有多种平台的应用,包括Chrome扩展、iOS应用、Android应用…

Prompting Learning在CV领域的进展

始于NLP prompt介绍 简单来讲,Prompt就是对原来的输入文本进行一定的处理,使得在不改变预训练模型参数的情况下,相应任务的性能变高。例如,原输入文本为:I received the offer from ETH. ,对于文本分类&a…

Unity3D介绍和VR领域的使用说明

目录 Unity3D介绍 Unity3D 是否能用在VR游戏开发? Unity3D 跟虚幻引擎比,优缺点? Unity3D 可以开发微信游戏小程序吗? Unity3D可以自学吗? Unity3D视频分享图 Unity3D介绍 Unity3D是一种跨平台游戏引擎&#xff…

会声会影2023帧率在哪里设置 会声会影2023怎么改帧率

对于帧率的概念,可能大家会比较陌生。在会声会影编辑视频时,我们一般会选择与素材相同的参数设置。因此,很少会去单独设置视频帧率。本文会给大家介绍一下帧率的概念,以及会声会影帧率在哪里设置,会声会影2023怎么改帧…

数智财资,智慧金融 用友联合工行青海分行举办主题论坛圆满落幕

2023年5月10日,用友网络联合中国工商银行青海省分行于青海西宁举办的“数智财资,智慧金融——工行财资云助力企业构建一流财资体系”主题论坛圆满落幕。金融机构领导,行业财资专家,各企业领导、财务负责人齐聚一堂,分享…

apple pencil一定要买吗?平价好用的电容笔合集

这些年来,iPad已经成为了很多人的首选。而iPad的使用者,更看重的是它的功能,很多人都会选择电容笔搭配来做笔记。实际上,Apple Pencil还有许多其他版本,如果只是为了记笔记,那么你不需要买一支价格不菲的苹…

图片转为base64格式的优缺点分析

1. 优点 (1)网页中使用base64格式的图片时,不用再请求服务器调用图片资源,减少了服务器访问次数。 (2)base64编码的字符串,更适合不同平台、不同语言的传输; (3&#…

【源码解析】SpringBoot接口参数校验原理

使用示例 入门 web接口 RestController public class HelloController {PostMapping("/t1")public void t1(Validated RequestBody Request request) {System.out.println(11);} }实体类 Data public class Request {NotEmpty(message "title不为空")…

Qwik 1.0 发布,全栈式 Web 框架

Qwik 是一个全栈式 Web 框架,Qwik 基于 React、Angular 和 Vue 等其他 Web 框架的概念,但以 JavaScript 流等更新的方法脱颖而出,允许以高性能向用户交付复杂的 Web 应用程序。 随着 Web 应用程序变得越来越大,它们的启动性能会下…