图像处理|腐蚀操作

在计算机视觉与图像处理中,腐蚀操作(Erosion)是形态学操作的一种。形态学操作广泛应用于二值图像中,主要用于分析和提取图像中的结构信息。腐蚀操作是这类操作中最常见的一种,用来对图像进行“收缩”处理,消除小的噪声,减少图像中的亮区域或对象的大小。

腐蚀操作的定义是:将图像中每一个像素的值通过其邻域内的最小值来替代。简单来说,腐蚀会“腐蚀”图像中的亮区域,使其变小,背景区域变大。腐蚀常常与膨胀操作配合使用,用于处理噪声、物体分离等任务。

1. 腐蚀操作的基本原理

腐蚀操作是通过卷积或滑动窗口的方式对图像进行局部分析。假设我们对图像中的某一像素进行腐蚀操作,它的值将被该像素周围邻域的最小值替代。

腐蚀操作的步骤:

  1. 选择结构元素:结构元素通常是一个小的矩形或圆形的形态学模板,定义了进行腐蚀操作时邻域的大小和形状。常见的结构元素有 3x35x5 的矩阵。

  2. 扫描图像:将结构元素与输入图像进行卷积(即结构元素在图像上滑动),对于每个图像像素,结构元素覆盖该像素及其邻域。

  3. 最小值代替:对于每个像素,将其邻域内的最小值赋给当前像素。

直观理解

  • 如果结构元素覆盖的区域有任何背景像素(值为0),那么该像素在腐蚀后会被置为0(即背景)。
  • 只有在结构元素完全覆盖到的区域都为前景像素(值为1)时,当前像素才会保持为前景(即1)。
  • 腐蚀操作使得图像中的亮区域收缩,暗区域扩展,通常用于去除小的噪声、细小的物体或连接物体。

2. 腐蚀操作的应用场景

腐蚀操作在图像处理和计算机视觉中有着广泛的应用,尤其是在处理二值图像时。常见的应用场景包括:

去除噪声

在二值图像中,腐蚀操作可以帮助去除一些小的亮点或小的物体。例如,在图像中有噪声的情况下,腐蚀可以将这些噪声点删除,保留大的物体。

分离物体

腐蚀操作可以将连接在一起的物体分开。例如,在两块物体之间有少许连接时,腐蚀操作会将它们分开。

边缘检测

通过腐蚀,可以在图像的边缘位置去除不必要的区域,使得物体的边缘更加明显,便于后续的分析。

图像预处理

在一些模式识别、物体检测等任务中,腐蚀常用于图像预处理阶段,用来增强物体的结构或去除无关的细节。

3. 使用OpenCV实现腐蚀操作

在OpenCV中,可以使用 cv2.erode() 函数来实现腐蚀操作。cv2.erode() 接受三个参数:输入图像、结构元素、迭代次数。

腐蚀函数签名:

cv2.erode(src, kernel, iterations=1)
  • src:输入图像,必须是单通道的二值图像。
  • kernel:结构元素,即腐蚀时使用的模板(如 3x3 的矩阵)。
  • iterations:腐蚀的迭代次数,表示对图像进行多少次腐蚀操作,默认值为 1。

示例代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('binary_image.png', 0)  # 以灰度图方式读取图像# 定义结构元素(3x3的矩阵)
kernel = np.ones((3, 3), np.uint8)# 腐蚀操作
eroded_image = cv2.erode(image, kernel, iterations=1)# 显示原图与腐蚀后的图像
plt.figure(figsize=(10, 5))plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')plt.subplot(1, 2, 2)
plt.imshow(eroded_image, cmap='gray')
plt.title('Eroded Image')plt.show()

代码解析:

  1. 读取图像:使用 cv2.imread() 读取输入的二值图像。这里需要确保输入图像是二值图(0和255两种颜色),因为腐蚀操作主要应用于二值图像。
  2. 定义结构元素:通过 np.ones() 创建一个 3x3 的矩阵作为结构元素。结构元素的大小和形状会影响腐蚀操作的效果。
  3. 腐蚀操作:调用 cv2.erode() 对输入图像进行腐蚀处理。这里 iterations=1 表示进行一次腐蚀操作。
  4. 显示图像:使用 matplotlib 显示原始图像和腐蚀后的图像,方便对比。

4. 腐蚀操作的效果

腐蚀操作会导致图像中的亮区域收缩,背景区域扩展。以下是腐蚀操作可能产生的一些效果:

  • 减少物体的大小:在图像中,物体的边缘会被腐蚀,使物体变小,减少物体内部的小区域。
  • 去除小噪声:小的白色噪点(亮区域)可能被腐蚀掉,从而使图像更加干净。
  • 分离连接的物体:如果两个物体之间的连接较细,腐蚀操作可能会将其分开。

腐蚀操作的例子

假设我们有如下的二值图像:

原图(输入图像):[[0, 0, 255, 255, 0, 0],[0, 255, 255, 255, 255, 0],[255, 255, 255, 255, 255, 255],[0, 255, 255, 255, 255, 0],[0, 0, 255, 255, 0, 0]]腐蚀后图像:[[0, 0, 0, 255, 0, 0],[0, 0, 255, 255, 0, 0],[0, 255, 255, 255, 255, 0],[0, 0, 255, 255, 0, 0],[0, 0, 0, 255, 0, 0]]

可以看到,经过腐蚀操作后,亮区被缩小,图像的细节被削弱。

5. 腐蚀操作与膨胀操作的区别

腐蚀与膨胀操作是形态学处理中两个常用的操作,它们有着相反的效果:

  • 腐蚀:使得图像中的亮区域变小,背景扩展。它常用于去除小的亮点或噪声。
  • 膨胀:使得图像中的亮区域变大,背景缩小。它常用于增强图像中的亮区域。

通常,腐蚀与膨胀操作可以结合使用,形成开运算(腐蚀后膨胀)或闭运算(膨胀后腐蚀),用于不同的图像处理任务。

6. 总结

腐蚀操作是图像形态学中常用的一种技术,通过将图像中的亮区域“收缩”,达到去除噪声、分离物体、增强边缘等效果。它与膨胀操作是对立的,可以在图像处理任务中根据需要选择使用。通过 OpenCV,腐蚀操作可以轻松实现,并且可以结合其他形态学操作实现更加复杂的图像处理任务。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Springboot+Vue的仓库管理系统

开发一个基于Spring Boot和Vue的仓库管理系统涉及到前端和后端的开发。本文呢,给出一个简单的开发步骤指南,用于指导初入的新手小白如何开始构建这样一个系统,如果**你想直接学习全部内容,可以直接拉到文末哦。** 开始之前呢给小…

快速导入请求到postman

1.确定请求,右键复制为cURL(bash) 2.postman菜单栏Import-Raw text,粘贴复制的内容保存,请求添加成功

预训练语言模型——BERT

1.预训练思想 有了预训练就相当于模型在培养大学生做任务,不然模型初始化再做任务就像培养小学生 当前数据层面的瓶颈是能用于预训练的语料快被用完了 现在有一个重要方向是让机器自己来生成数据并做微调 1.1 预训练(Pre - training)vs. 传…

数字孪生电网有什么作用?实时云渲染技术又如何赋能智慧电网?

电网系统的结构比较复杂,传统运维模式主要是依赖传感器和人工巡检,难以全面监测管理。而数字孪生技术的应用将推动电网智能化、绿色化的高效转型。 智慧电网利用物理模型、现场测量数据和历史数据,结合云计算、物联网、大数据等技术&#xf…

MiniMind - 从0训练语言模型

文章目录 一、关于 MiniMind 📌项目包含 二、📌 Environment三、📌 Quick Start Test四、📌 Quick Start Train0、克隆项目代码1、环境安装2、如果你需要自己训练3、测试模型推理效果 五、📌 Data sources1、分词器&am…

EasyCVR视频汇聚平台如何配置webrtc播放地址?

EasyCVR安防监控视频系统采用先进的网络传输技术,支持高清视频的接入和传输,能够满足大规模、高并发的远程监控需求。平台支持多协议接入,能将接入到视频流转码为多格式进行分发,包括RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、W…

【GlobalMapper精品教程】093:将tif影像色彩映射表(调色板)转为RGB全彩模式

参考阅读:【ArcGIS微课1000例】0137:色彩映射表转为RGB全彩模式 文章目录 一、Globalmapper中显示模式二、ArcGIS中显示模式三、调色板转为RGB全彩模式四、注意事项一、Globalmapper中显示模式 Globalmapper中,将谷歌等多种来源在线影像下载到本地后,可能会遇到以下数据格…

Postman接口测试05|实战项目笔记

目录 一、项目接口概况 二、单接口测试-登录接口:POST 1、正例 2、反例 ①姓名未注册 ②密码错误 ③姓名为空 ④多参 ⑤少参 ⑥无参 三、批量运行测试用例 四、生成测试报告 1、Postman界面生成 2、Newman命令行生成 五、token鉴权(“…

【css】浏览器强制设置元素状态(hover|focus……)

直接上步骤: 打开浏览器控制台 → 找到样式选项 → 找到:hov选项 → 点击:hov选项,会展开【设置元素状态】。 只要选中就会展示出自己写在css里面的该种状态下的样式了。

Springboot——钉钉(站内)实现登录第三方应用

文章目录 前言准备1、创建钉钉应用,并开放网页应用2、配置网页应用各项参数发布版本 前端改造后端逻辑1、获取应用免登录 Access_token2、通过免登录 Access_token 和 Auth_Code 获取对应登录人信息 注意事项 前言 PC端的钉钉中工作台,增加第三方应用&a…

完美解决VMware 17.0 Pro安装ubuntu、Deepin等虚拟机后卡顿、卡死问题

这两天在 VM 17 Pro 中安装了ubuntu 24.1 和Deepin 23.9 等Linux操作系统,在使用过程中出现过数次卡顿、卡死问题,现记录整理解决方法如下: 一、问题描述 安装虚拟机时、以及安装完成后正常使用时出现鼠标点击卡顿、系统反应慢、卡死等问题…

计算机的错误计算(二百零七)

摘要 利用两个数学大模型计算 arccot(0.125664e2)的值,结果保留16位有效数字。 实验表明,它们的输出中分别仅含有3位和1位正确数字。 例1. 计算 arccot(0.125664e2)的值,结果保留16位有效数字。 下面是与一个数学解题器的对话。 以上为与…

Linux内核TTY子系统有什么(6)

接前一篇文章:Linux内核TTY子系统有什么(5) 本文内容参考: Linux TTY子系统框架-CSDN博客 一文彻底讲清Linux tty子系统架构及编程实例-CSDN博客 linux TTY子系统(3) - tty driver_sys tty device driver-CSDN博客 Linux TTY …

03_Redis基本操作

1.Redis查询命令 1.1 官网命查询命令 为了便于学习Redis,官方将其用于操作不同数据类型的命令进行了分类整理。你可以通过访问Redis官方网站上的命令参考页面https://redis.io/commands来查阅这些分组的命令,这有助于更系统地理解和使用Redis的各项功能。 1.2 HELP查询命令…

@LocalBuilder装饰器: 维持组件父子关系

一、前言 当开发者使用Builder做引用数据传递时,会考虑组件的父子关系,使用了bind(this)之后,组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题,引入LocalBuilder装饰器。…

kubernetes第七天

1.影响pod调度的因素 nodeName 节点名 resources 资源限制 hostNetwork 宿主机网络 污点 污点容忍 Pod亲和性 Pod反亲和性 节点亲和性 2.污点 通常是作用于worker节点上,其可以影响pod的调度 语法:key[value]:effect effect:[ɪˈfek…

FFmpeg Muxer HLS

使用FFmpeg命令来研究它对HLS协议的支持程度是最好的方法: ffmpeg -h muxerhls Muxer HLS Muxer hls [Apple HTTP Live Streaming]:Common extensions: m3u8.Default video codec: h264.Default audio codec: aac.Default subtitle codec: webvtt. 这里面告诉我…

maven高级(day15)

Maven 是一款构建和管理 Java 项目的工具 分模块设计与开发 所谓分模块设计,顾名思义指的就是我们在设计一个 Java 项目的时候,将一个 Java 项目拆分成多 个模块进行开发。 分模块设计我们在进行项目设计阶段,就可以将一个大的项目拆分成若干…

【json】

JSON JSON是一种轻量级的,按照指定的格式去组织和封装数据的数据交互格式。 本质上是一个带有特定格式的字符串(py打印json时认定为str类型) 在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互,类似于计算机普通话 python与json关系及相互转换…

计算机网络 笔记 数据链路层 2

1,信道划分: (1)时分复用TDM 将时间等分为“TDM帧”,每个TDM帧内部等分为m个时隙,m个用户对应m个时隙 缺点:每个节点只分到了总带宽的1/m,如果有部分的1节点不发出数据,那么就会在这个时间信道被闲置,利用…