图像处理|腐蚀操作
在计算机视觉与图像处理中,腐蚀操作(Erosion)是形态学操作的一种。形态学操作广泛应用于二值图像中,主要用于分析和提取图像中的结构信息。腐蚀操作是这类操作中最常见的一种,用来对图像进行“收缩”处理,消除小的噪声,减少图像中的亮区域或对象的大小。
腐蚀操作的定义是:将图像中每一个像素的值通过其邻域内的最小值来替代。简单来说,腐蚀会“腐蚀”图像中的亮区域,使其变小,背景区域变大。腐蚀常常与膨胀操作配合使用,用于处理噪声、物体分离等任务。
1. 腐蚀操作的基本原理
腐蚀操作是通过卷积或滑动窗口的方式对图像进行局部分析。假设我们对图像中的某一像素进行腐蚀操作,它的值将被该像素周围邻域的最小值替代。
腐蚀操作的步骤:
-
选择结构元素:结构元素通常是一个小的矩形或圆形的形态学模板,定义了进行腐蚀操作时邻域的大小和形状。常见的结构元素有
3x3
或5x5
的矩阵。 -
扫描图像:将结构元素与输入图像进行卷积(即结构元素在图像上滑动),对于每个图像像素,结构元素覆盖该像素及其邻域。
-
最小值代替:对于每个像素,将其邻域内的最小值赋给当前像素。
直观理解:
- 如果结构元素覆盖的区域有任何背景像素(值为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()
代码解析:
- 读取图像:使用
cv2.imread()
读取输入的二值图像。这里需要确保输入图像是二值图(0和255两种颜色),因为腐蚀操作主要应用于二值图像。 - 定义结构元素:通过
np.ones()
创建一个3x3
的矩阵作为结构元素。结构元素的大小和形状会影响腐蚀操作的效果。 - 腐蚀操作:调用
cv2.erode()
对输入图像进行腐蚀处理。这里iterations=1
表示进行一次腐蚀操作。 - 显示图像:使用
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,腐蚀操作可以轻松实现,并且可以结合其他形态学操作实现更加复杂的图像处理任务。
相关文章:
图像处理|腐蚀操作
在计算机视觉与图像处理中,腐蚀操作(Erosion)是形态学操作的一种。形态学操作广泛应用于二值图像中,主要用于分析和提取图像中的结构信息。腐蚀操作是这类操作中最常见的一种,用来对图像进行“收缩”处理,消…...
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(应用)
实战训练1—报数游戏 问题描述: 小明和小鹏玩报数游戏,小明按1∼20 报数,小鹏按1∼30报数。若两人同时开始,并以同样的速度报数,当两人都报了1000个数时,同时报相同数的次数是多少呢? 输入格…...
140.WEB渗透测试-信息收集-小程序、app(11)
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:139.WEB渗透测试-信息收集-小程序、app(10) 3.直接有app 直接拿…...
《新闻大厦抢先版》V0.18.105+Dlcs官方学习版
《新闻大厦抢先版》官方版https://pan.xunlei.com/s/VODaeUn3v-ZWVvvmUMfo5AqWA1?pwdnhpz# 建造并不断优化新闻大楼,保障员工权益并及时赶上周日的印刷交期! 招募并管理不同职业以登上成功的阶梯:记者、摄像师、勤杂工,除此以外…...
【Uniapp-Vue3】Prop校验与prop默认值用法及循环遍历数组对象
一、prop校验 如果我们在想要限制prop的类型,就可以在接收prop的时候对接收类型进行限制: defineProps({ 属性名:{ type:类型 } }) 需要注意类型的首字母大写 但是设置了传入参数类型限制并不能严格限制,只会在后台进行提示: 二、…...
Android Studio创建新项目并引入第三方jar、aar库驱动NFC读写器读写IC卡
本示例使用设备:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bbW3AUC&ftt&id615391857885 一、打开Android Studio,点击 File> New>New project 菜单,选择 要创建的项目模版,点击 Next 二、输入项目名称…...
Spring Boot | 基于MinIO实现文件上传和下载
关注:CodingTechWork 介绍 在现代的 web 应用中,文件上传和下载是常见的需求。MinIO 是一个开源的高性能分布式对象存储服务,可以用来存储和管理大量的非结构化数据,如图片、视频、日志文件等。本文将介绍如何在 Spring Boot 应用…...
【DNS 阿里云,域名解析,解析到IP的指定端口】
- 进入 阿里云域名解析界面 - 点击 解析设置 - 添加记录 1.添加一条 A/AAAA 类型解析你的服务器的IP地址(不需要带端口号,这条解析只是起到中转作用) 示例:主机记录:aa.bb.com 记录值:xxx.xxx.xxx.xxx (…...
力扣经典二分题:4. 寻找两个正序数组的中位数
题目链接:4. 寻找两个正序数组的中位数 - 力扣(LeetCode) 一、题目分析 这道题目是让我们在 两个正序的数组中寻找中位数已知两个数组的大小分别是:int m nums1.size(),n nums2.size();中位数性质1:中位数左侧元素 …...
Java Web开发进阶——Spring Boot与Spring Data JPA
Spring Data JPA 是 Spring 提供的一种面向数据访问的持久化框架,它简化了 JPA 的实现,为开发者提供了一种快速操作数据库的方式。在结合 Spring Boot 使用时,开发者能够快速完成数据库访问层的开发。 1. 介绍Spring Data JPA 1.1 什么是Spr…...
PySpark用sort-merge join解决数据倾斜的完整案例
假设有两个大表 table1 和 table2 ,并通过 sort-merge join 来解决可能的数据倾斜问题。 from pyspark.sql import SparkSession from pyspark.sql.functions import col# 初始化SparkSession spark SparkSession.builder.appName("SortMergeJoinExample&quo…...
【2025 Rust学习 --- 11 实用工具特型01】
清理特型Drop 当一个值的拥有者消失时,Rust 会丢弃(drop)该值。丢弃一个值就必须释放 该值拥有的任何其他值、堆存储和系统资源。 丢弃可能发生在多种情况下: 当变量超出作用域时;在表达式语句的末尾;当…...
关于Linux PAM模块下的pam_listfile
讲《Linux下禁止root远程登录访问》故事的时候,说好会另开一篇讲讲pam_listfile。我们先看看pam_listfile的man文档怎么介绍的。 下面这些就好比人物的简介,甚是恼人;让人看得不明就里,反正“他大舅他二舅都是他舅”。可以直接跳…...
根据中文名称首字母进行分组
很多项目中,需要用到中文名称到首字母进行分组,例如:城市、游戏等等。。。 /*** 将集合数据按照汉字首字母分组排序** param list* return*/public Map<String, Object> screenManufacturer(List<Game> list) {Set<String>…...
springboot 集成 etcd
springboot 集成 etcd 往期内容 ETCD 简介docker部署ETCD 前言 好久不见各位小伙伴们,上两期内容中,我们对于分布式kv存储中间件有了简单的认识,完成了docker-compose 部署etcd集群以及可视化工具 etcd Keeper,既然有了认识&a…...
人工智能-数据分析及特征提取思路
1、概况 基于学生行为数据预测是否涉黄、涉黑等。 2.数据分析 数据分析的意义包括得到数据得直觉、发掘潜在的结构、提取重要的变量、删除异常值、检验潜在的假设和建立初步的模型。 2.1数据质量分析 2.1.1数据值分析 查看数据类型: 首先明确各字段的数据类型…...
设计模式 行为型 状态模式(State Pattern)与 常见技术框架应用 解析
状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变其行为,使得对象看起来好像修改了它的类。这种设计模式的核心思想是将对象的状态和行为封装成不同的状态类,通过状态对象的行为改变来避免…...
Android 系统签名 keytool-importkeypair
要在 Android 项目中使用系统签名并将 APK 打包时与项目一起打包,可以按照以下步骤操作: 步骤 1:准备系统签名文件 从 Android 系统源码中获取系统签名文件,通常位于 build/target/product/security 目录下,包括 pla…...
ubuntu22.04 gcc,g++从10.5切换到低版本9.5
一、安装gcc-9.5 mkdir gcc cd gcc sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends gcc-9 | grep -v i386 | grep "^\w") sudo dpkg -i *.deb sudo…...
Microsoft 已经弃用了 <experimental/filesystem> 头文件
#define _CRT_SECURE_NO_WARNINGS 1 #define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING 1 //Microsoft 已经弃用了 <experimental / filesystem> 头文件,并计划在将来移除它。取而代之的是 C17 标准引入的 //<filesystem> 头文件…...
git 提交命令记录
1.已有本地和远程仓库 查看仓库远程地址: git remote -v 大量提交 git add . git commit -m "提交说明" git push 之后输入用户名密码 删除文件 git rm 文件名 替代git add 后面一样 2.全新提交 新建远程仓库 git init touch README.md git add . …...
Unity + Firebase + GoogleSignIn 导入问题
我目前使用 Unity版本:2021.3.33f1 JDK版本为:1.8 Gradle 版本为:6.1.1 Firebase 版本: 9.6.0 Google Sign In 版本为: 1.0.1 问题1 :手机点击登录报错 apk转化成zip,解压,看到/lib/armeabi-v…...
深度学习的加速器:Horovod,让分布式训练更简单高效!
什么是 Horovod? Horovod 是 Uber 开发的一个专注于深度学习分布式训练的开源框架,旨在简化和加速多 GPU、多节点环境下的训练过程。它以轻量级、易用、高性能著称,特别适合需要快速部署分布式训练的场景。Horovod 的名字来源于俄罗斯传统舞…...
AI刷题-异或编码、拼凑单词 chi
目录 一、异或编码 问题描述 测试样例 解题思路: 问题理解 解题思路 数据结构选择 算法步骤 最终代码: 运行结果: 二、拼凑单词 chi 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 最终代码&a…...
xml简介
目录 基本语法特点及应用场景一个简单示例 xml(全称eXtensible Markup Language)是一种用于存储和传输数据的标记语言,跨平台并且跨语言,xml内容较多,这篇文章会介绍一些基础的内容。 基本语法 xml文档通常以xml声明开…...
MYSQL------MySQL 复制MySQL Cluster 架构
MySQL 复制 安装配置 主服务器配置 首先,在主服务器的配置文件(my.cnf 或 my.ini)中添加以下基本配置: [mysqld] server-id 1 log-bin /var/log/mysql/mysql-bin.logserver-id:为服务器分配唯一的标识࿰…...
【人工智能】 用Python构建图像分类模型:从TensorFlow到PyTorch的全面指南
随着深度学习在计算机视觉领域的迅猛发展,图像分类作为其核心任务之一,受到了广泛的关注。本文旨在详细介绍如何使用Python构建图像分类模型,从TensorFlow到PyTorch两个主流深度学习框架进行全面对比与实践。文章首先回顾了图像分类的基本概念…...
计算机网络 笔记 数据链路层 2
1,信道划分: (1)时分复用TDM 将时间等分为“TDM帧”,每个TDM帧内部等分为m个时隙,m个用户对应m个时隙 缺点:每个节点只分到了总带宽的1/m,如果有部分的1节点不发出数据,那么就会在这个时间信道被闲置,利用…...
2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本)
2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本),大家有什么好的也可以发一下看看...
Apache Hop从入门到精通 第一课 揭开Apache Hop神秘面纱
一、Apache Hop是什么? 1、Apache Hop,简称Hop,全称为Hop Orchestration Platform,即Hop 工作编排平台,是一个数据编排和数据工程平台,旨在促进数据和元数据编排的所有方面。Hop让你专注于你想要解决的问题…...
Unity 人体切片三维可视化,可任意裁切切割。查看不同断层的图像。
Unity 人体切片三维可视化,真彩色,可任意裁切切割。查看不同断层的图像。 点击查看效果: 视频效果...
ModuleNotFoundError: No module named ‘podm.metrics‘报错等解决方法
ModuleNotFoundError: No module named podm.metrics’报错等解决方法 podm.metrics 在运行时报错: ModuleNotFoundError: No module named ‘podm.metrics’ 安装了podm后还是报错 解决方法: 查看安装位置 查看podm的安装位置,并打开到该…...
Java虚拟机运行时数据区域(内存模型)
程序计数器(线程私有内存) What:程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。 程序控制流的指示器, 分支,循环,跳转,异常处理,线程…...
trf 4.10安装与使用-生信工具42
01 背景 DNA 中的串联重复(Tandem Repeat)指的是两个或多个相邻且近似的核苷酸模式的拷贝。Tandem Repeats Finder (TRF) 是一个程序,用于定位并显示 DNA 序列中的串联重复。用户只需提交一个以 FASTA 格式编写的序列,无需指定重…...
rom定制系列------小米max3安卓12 miui14批量线刷 默认开启usb功能选项 插电自启等
小米Max3是小米公司于2018年7月19日发布的机型。此机型后在没有max新型号。采用全金属一体机身设计,配备6.9英寸全面屏.八核处理器骁龙636,后置双摄像头1200万500万像素,前置800万像素.机型代码 :nitrogen.官方最终版为稳定版12.5…...
PySide6-UI界面设计
导论: PySide6和PyQt都是Python对Qt框架的绑定,允许开发者使用Qt创建平台的GUI应用程序。如果你正在开发商业项目,或者需要使用最新的QT6特性,PySide6是一个更好的选择。如果你更倾向于一个成熟的社区和丰富的资源,Py…...
Java创建线程的方式有哪些?
创建线程的方式 1. 继承 Thread 类 在 Java 中,当你启动一个线程时,实际上是调用了 Thread 类的 start() 方法。这个方法会执行以下几个步骤: 线程的状态转变:调用 start() 方法后,线程的状态从 NEW 转变为 RUNNABL…...
Ubuntu | PostgreSQL | 解决 ERROR: `xmllint` is missing on your system.
解决 sudo apt install apt-file sudo apt-file updatesudo apt-file search xmllint sudo apt install libxml2-utils执行 # postgres源码安装包解压文件夹中 make install make install问题 make -C src install make[2]: Entering directory /home/postgres/postgresql-1…...
Jenkins pipeline 发送邮件及包含附件
Jenkins pipeline 发送邮件及包含附件 设置邮箱开启SMTP服务 此处适用163 邮箱 开启POP3/SMTP服务通过短信获取TOKEN (保存TOKEN, 后面Jenkins会用到) Jenkins 邮箱设置 安装 Build Timestamp插件 设置全局凭证 Dashboard -> Manage Jenkins …...
基于深度学习的视觉检测小项目(十) 通过样式表改变界面的外观
一、创建色卡模板文件 在PS中打开之前创建的色卡文件,用吸管拾色器吸取各个色卡的色彩值: 并保存为JSON文件,color_card.json,文件保存在项目的/settings目录下: {"colors": {"RED": "#dc1…...
【Java基础】Stream流、文件File相关操作,IO的含义与运用
1. Java 流(Stream)、文件(File)和IO Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。 一个流可以理解为一个数据的序列。 输入流表…...
Java-日志-Slf4j-Log4j-logback
文章目录 SLF4J基础概念使用输出形式日志绑定桥接旧的框架实战 logback基础概念配置文件 Log4j概述 SLF4J 参考: https://www.cnblogs.com/shenStudy/p/15806951.html https://slf4j.org/ 基础概念 是什么?SLF4J(Simple Logging Facade fo…...
探索式测试
探索式测试是一种软件测试风格,它强调独立测试人员的个人自由和职责,为了持续优化其工作的价值,将测试学习、测试设计、测试执行和测试结果分析作为相互支持的活动,在整个项目实现过程中并行地执行。 选择合适的探索式测试方法我…...
LeetCode LCP17速算机器人
速算机器人:探索字符指令下的数字变换 在编程的奇妙世界里,我们常常会遇到各种有趣的算法问题,这些问题不仅考验我们的逻辑思维,还能让我们感受到编程解决实际问题的魅力。今天,就让我们一同探讨一个关于速算机器人的…...
Taro+Vue实现图片裁剪组件
cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件,支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境,可以在网页、小程序等平台中使用。 源码 https:…...
ISP各模块功能介绍
--------声明,本文为转载整理------- ISP各个模块功能介绍: 各模块前后效果对比: 黑电平补偿(BLC) 在理想情况下,没有光照射的像素点其响应值应为0。但是,由于杂质、受热等其它原因的影响&…...
SQL-leetcode-584. 寻找用户推荐人
584. 寻找用户推荐人 表: Customer -------------------- | Column Name | Type | -------------------- | id | int | | name | varchar | | referee_id | int | -------------------- 在 SQL 中,id 是该表的主键列。 该表的每一行表示一个客户的 id、姓名以及推…...
新冠肺炎服务预约微信小程序的设计与实现ssm+论文源码调试讲解
第4章 系统设计 4.1 系统设计的原则 在系统设计过程中,也需要遵循相应的设计原则,这些设计原则可以帮助设计者在短时间内设计出符合设计规范的设计方案。设计原则主要有可靠性,安全性,可定制化,可扩展性,可…...
多模态人工智能在零售业的未来:通过GPT-4 Vision和MongoDB实现智能产品发现
多模态人工智能在零售业的未来:通过GPT-4 Vision和MongoDB实现智能产品发现 引言 想象一下,顾客在购物时只需上传一张他们所期望的服装或产品的照片,几分钟内便能收到来自他们最喜欢的商店的个性化推荐。这就是多模态人工智能在零售领域所带…...
3D目标检测数据集——kitti数据集
KITTI官网网址:The KITTI Vision Benchmark Suite 下载数据集:The KITTI Vision Benchmark Suite KITTI数据集论文:CMSY9 github可视化代码:GitHub - kuixu/kitti_object_vis: KITTI Object Visualization (Birdview, Volumetric LiDar point cloud )...