图像处理|腐蚀操作

news2025/1/11 20:44:41

在计算机视觉与图像处理中,腐蚀操作(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.coloradmin.cn/o/2275103.html

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

相关文章

RocketMQ 和 Kafka 有什么区别?

目录 RocketMQ 是什么? RocketMQ 和 Kafka 的区别 在架构上做减法 简化协调节点 简化分区 Kafka 的底层存储 RocketMQ 的底层存储 简化备份模型 在功能上做加法 消息过滤 支持事务 加入延时队列 加入死信队列 消息回溯 总结 来源:面试官:RocketMQ 和 Kafka 有…

赛车微型配件订销管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 赛车微型配件行业通常具有产品多样性、需求不确定性、市场竞争激烈等特点。配件供应商需要根据市场需求及时调整产品结构和库存,同时要把握好供应链管理和销售渠道。传统的赛车微型配件订销管理往往依赖于人工经验和简单的数据分析,效率低下且容易…

公众号如何通过openid获取unionid

通过接口 https://api.weixin.qq.com/cgi-bin/user/info?access_tokenxxxxxxx&langzh_CN 返回的数据如下: 前提是必须绑定 微信开放平台 token如何获取呢 代码如下: String tokenUrl "https://api.weixin.qq.com/cgi-bin/token"; …

半导体数据分析: 玩转WM-811K Wafermap 数据集(二) AI 机器学习

一、数据集回顾 前面我们已经基本了解了WM-811K Wafermap 数据集,并通过几段代码,熟悉了这个数据集的数据结构,这里为了方便各位连续理解,让我们再回顾一下: WM-811K Wafermap 数据集是一个在半导体制造领域广泛使用…

协同过滤算法私人诊所系统|Java|SpringBoot|VUE|

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SpringBoot、Mybatis-Plus、VUE、jquery,html 5⃣️…

Python基于YOLOv8和OpenCV实现车道线和车辆检测

使用YOLOv8(You Only Look Once)和OpenCV实现车道线和车辆检测,目标是创建一个可以检测道路上的车道并识别车辆的系统,并估计它们与摄像头的距离。该项目结合了计算机视觉技术和深度学习物体检测。 1、系统主要功能 车道检测&am…

nexus搭建maven私服

说到maven私服每个公司都有,比如我上一篇文章介绍的自定义日志starter,就可以上传到maven私服供大家使用,每次更新只需deploy一下就行,以下就是本人搭建私服的步骤 使用docker安装nexus #拉取镜像 docker pull sonatype/nexus3:…

MiniMind - 从0训练语言模型

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

Postman接口测试基本操作

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 Postman-获取验证码 需求:使用Postman访问验证码接口,并查看响应结果。 地址:http://kdtx-test.itheima.net/api/captchaIm…

基于Python实现的通用小规模搜索引擎

基于Python实现的通用小规模搜索引擎 1.项目简介 1.1背景 《信息内容安全》网络信息内容获取技术课程项目设计 一个至少能支持10个以上网站的爬虫程序,且支持增量式数据采集;并至少采集10000个实际网页;针对采集回来的网页内容, 能够实现网页文本的分…

查找路由器的管理后台ip【通用找IP】

需求: 刚刚搞了个【小米】路由器,我想进路由的管理后台,提示:安装xx的路由管家,我不想安装 但是无法找到这个管理后台。 而且我是用这个路由作为中继,那么这个路由的ip就会经常更换 尝试通过网上搜索引擎来…

混合专家模型 (MoE)笔记摘要

ref: https://huggingface.co/blog/zh/moe#%E4%BB%80%E4%B9%88%E6%98%AF%E6%B7%B7%E5%90%88%E4%B8%93%E5%AE%B6%E6%A8%A1%E5%9E%8B 简短总结 混合专家模型 (MoEs): 与稠密模型相比, 预训练速度更快 与具有相同参数数量的模型相比,具有更快的…

01 Oracle自学环境搭建

1 Oracle12C安装 1.1 下载 官网地址:https://www.oracle.com/ 解压安装包 运行安装程序 1.2 安装 配置安全更新 软件更新 安装选项 系统类 Oracle主目录用户选择 使用现有windows用户:如果选择该项,则需要指定没有管理权限的用户。 创建新Wi…

【Python】Python与C的区别

文章目录 语句结束符代码块表示变量声明函数定义注释格式Python的标识符数据输入input()函数数据输出print()函数 语句结束符 C 语言 C 语言中每条语句必须以分号;结束。例如,int a 10;、printf("Hello, World!");。分号是语句的一部分,用于…

安科瑞 Acrel-1000DP 分布式光伏监控系统在工业厂房分布式光伏发电项目中的应用

吕梦怡 18706162527 摘 要:常规能源以煤、石油、天然气为主,不仅资源有限,而且会造成严重的大气污染,开发清洁的可再生能源已经成为当今发展的重要任务,“节能优先,效率为本”的分布式发电能源符合社会发…

逆向 易九批 最新版 爬虫逆向 x-sign ......

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! # 欢迎交流 wjxch1004

TensorFlow Quantum快速编程(高级篇)

五、实战:量子分类器应用 5.1 数据准备 在实战构建量子分类器时,数据准备是基石环节。选用鸢尾花数据集,这一经典数据集在机器学习领域应用广泛,其涵盖了三种鸢尾花品种的样本,每个样本包含花萼长度、花萼宽度、花瓣长度、花瓣宽度四个特征。鉴于本次构建二分类量子分类…

maven高级(day15)

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

android studio根据包名获取当前安装包信息

package com.example.myapplication2;import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.util.Log;/**** 获取版本信息*/ public class SystemHelper {/*** 获取本地软件版本号*/public stat…

安卓硬件加速hwui

安卓硬件加速 本文基于安卓11。 从 Android 3.0 (API 级别 11) 开始,Android 2D 渲染管道支持硬件加速,这意味着在 View 的画布上执行的所有绘图操作都使用 GPU。由于启用硬件加速所需的资源增加,你的应用程序将消耗更多内存。 软件绘制&am…