图像处理|腐蚀操作

在计算机视觉与图像处理中,腐蚀操作(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,腐蚀操作可以轻松实现,并且可以结合其他形态学操作实现更加复杂的图像处理任务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nginx负载均衡-基于端口的负载均衡(一)

注意: (1) 做负载均衡技术至少需要三台服务器:一台独立的负载均衡器,两台web服务器做集群 一、nginx分别代理后端web1 和 web2的三台虚拟主机 1、web1(nginx-10.0.0.7)配置基于端口的虚拟主机 [rootOldboy extra]# …

金融项目实战 02|接口测试分析、设计以及实现

目录 ⼀、接口相关理论 二、接口测试 1、待测接口:投资业务 2、接口测试流程 3、设计用例理论 1️⃣设计方法 2️⃣工具 4、测试点提取 5、测试用例(只涉及了必测的) 1️⃣注册图⽚验证码、注册短信验证码 2️⃣注册 3️⃣登录 …

vue3使用vue3-video-play播放m3u8视频

1.安装vue3-video-play npm install vue3-video-play --save2.在组件中使用 import vue3-video-play/dist/style.css; import VideoPlay from vue3-video-play;// 视频配置项 const options reactive({src: https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8, //视频源mute…

Redis:数据类型

1. 字符串(String) 简介 概念:这是最简单的数据类型,可以存储字符串、整数或浮点数。特点:支持原子操作,如递增和递减数值。 示例 # 设置一个键值对 SET mykey "Hello, Redis!"# 获取该键的值…

【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection)

【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection) 引言 UNION注入是一种利用SQL的UNION操作符进行注入攻击的技术。攻击者通过合并两个或多个SELECT语句的结果集,可以获取数据库中未授权的数据。这种注入技术要…

移远BC28_opencpu方案_pin脚分配

先上图,BC28模块的pin脚如图所示: 下面看看GPIO的复用管脚 然后我自己整理了一份完整的pin功能列表

PHP多功能投票小程序源码

多功能投票小程序:全方位打造专属投票盛宴的得力助手 🎉 🔧 基于先进的ThinkPHP框架与Uniapp技术深度融合,我们匠心独运,精心雕琢出一款功能全面、操作便捷的投票小程序,旨在为您带来前所未有的投票体验。…

ORB-SALM3配置流程及问题记录

目录 前言 一、OPB-SLAM3基本配置流程 1.下载编译Pangolin 二、ORB-SLAM3配置 1.下载源码 2.创建ROS工作空间并编译ORB-SLAM3-ROS源码 3.尝试编译 三、运行测试 一、OPB-SLAM3基本配置流程 ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM(Simultane…

RabbitMQ介绍与使用

RabbitMQ官网 RabbitMQ 介绍 RabbitMQ 是一个开源的消息代理和队列服务器,基于 AMQP(高级消息队列协议)标准,使用 Erlang 编程语言构建。它是消息队列(MQ)的一种,广泛应用于分布式系统中&#x…

自然语言处理之jieba分词和TF-IDF分析

jieba分词和TF-IDF分析 目录 jieba分词和TF-IDF分析1 jieba1.1 简介1.2 终端下载1.3 基本语法 2 TF-IDF分析2.1 什么是语料库2.2 TF2.3 IDF2.4 TF-IDF2.5 函数导入2.6 方法 3 实际测试3.1 问题解析3.2 代码测试 1 jieba 1.1 简介 结巴分词(Jieba)是一个…

rust学习——环境搭建

rust安装:https://kaisery.github.io/trpl-zh-cn/ch01-01-installation.html 1、vscode装插件: toml语法支持 依赖管理 rust语法支持 2、创建demo 3、查看目录 4、执行文件的几种方式: rust安装:https://www.rust-lang.org/z…

Opencv查找、绘制轮廓、圆形矩形轮廓和近似轮廓

查找、绘制轮廓、圆形矩形轮廓和近似轮廓 目录 查找、绘制轮廓、圆形矩形轮廓和近似轮廓1 轮廓查找和绘制1.1 轮廓查找1.1.1 函数和参数1.1.2 返回值 1.2 轮廓绘制1.2.1 函数和参数 1.3 步骤1.4 实际测试绘制轮廓 2 绘制近似轮廓2.1 函数和参数2.2 查找特定轮廓2.3 近似轮廓测试…

K8s Pod OOMKilled,监控却显示内存资源并未打满

1. 问题现象 pod一直重启,通过grafana查看,发现内存使用率并没有100%。 2. 排查过程 2.1 describe查看pod最新一次的状态 可以明显看到,最近一次的重启就是因为内存不足导致的。 2.2 describe 查看node节点状态 找到原因了,原来…

Knowledge Editing through Chain-of-Thought

题目 通过思路链进行知识编辑 论文地址:https://arxiv.org/abs/2412.17727 摘要 大型语言模型 (LLM) 在广泛的自然语言处理 (NLP) 任务中表现出卓越的能力。然而,由于频繁重新训练的成本很高,让这些模型与不断发展的世界知识保持同步仍然是一…

C语言Day14(c程序设计小红书+pta)

目录 (一)求总天数pta 题目说明: 代码实现: 程序分析: (二)十进制整数转换成R进制数pta 题目说明: 代码实现: 程序分析: (三)…

G1原理—3.G1是如何提升垃圾回收效率

大纲 1.G1为了提升GC的效率设计了哪些核心机制 2.G1中的记忆集是什么 3.G1中的位图和卡表 4.记忆集和卡表有什么关系 5.RSet记忆集是怎么更新的 6.DCQ机制的底层原理是怎样的 7.DCQS机制及GC线程对DCQ的处理 提升G1垃圾回收器GC效率的黑科技 G1设计了一套TLAB机制 快速…

算法(二)——一维差分、等差数列差分

文章目录 一维差分、等差数列差分一维差分例题:航班预订统计 等差数列差分例题:三步必杀例题:Lycanthropy 一维差分、等差数列差分 一维差分 差分解决的是 区间修改(更新)问题,特别是多次区间修改问题&…

nexus搭建maven私服

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

StarRocks Awards 2024 年度贡献人物

在过去一年,StarRocks 在 Lakehouse 与 AI 等关键领域取得了显著进步,其卓越的产品功能极大地简化和提升了数据分析的效率,使得"One Data,All Analytics" 的愿景变得更加触手可及。 虽然实现这一目标的道路充满挑战且漫…

安卓app抓包总结(精)

前言 这里简单记录一下相关抓包工具证书的安装 burp证书安装 安装证书到移动设备(安卓7以后必须上传到设备系统根证书上) 导出证书 openssl x509 -inform DER -in cacert.der -out cacert.pem 转换格式 openssl x509 -inform PEM -subject_hash_old -in cacert.pem …