计算机视觉(六):腐蚀操作

腐蚀(Erosion)是计算机视觉和图像处理中一种基础且至关重要的形态学操作。它与膨胀(Dilation)互为对偶,共同构成了形态学处理的基石。腐蚀操作主要用于缩小前景物体的面积,去除图像中的噪声,以及分离相互连接的物体。

基本原理

腐蚀操作的核心思想是收缩或瘦身。它通过一个被称为结构元素(Structuring Element)核(Kernel)的小型模板,在图像上进行“卷积”或“滑动”操作。结构元素通常是一个预定义的小矩阵,比如3x3或5x5的正方形,也可以是圆形、十字形等其他形状,其中心点被称为锚点(Anchor Point)

腐蚀操作的计算过程可以概括为以下步骤:

  1. 定义结构元素: 选择一个合适的结构元素,例如一个3x3的全1矩阵。
  2. 滑动遍历图像: 将结构元素的锚点依次移动到图像的每一个像素点上。
  3. 计算腐蚀结果: 对于结构元素覆盖的区域,检查所有像素值。
    • 如果结构元素覆盖的所有像素值都为1(在二值图像中,1通常代表前景),那么锚点对应的输出像素值也为1。
    • 如果结构元素覆盖的区域内,至少有一个像素值不为1(即为0),那么锚点对应的输出像素值就为0。

换句话说,只有当结构元素完全“嵌入”在前景区域时,输出图像的对应像素才保持前景色。否则,即使只有一个像素是背景,该位置也会被“腐蚀”成背景色。

这个过程的结果是,所有与背景相邻的前景像素都会被“吃掉”或“侵蚀”,从而导致前景物体的边界向内收缩,整体面积减小。这种效果对于移除图像中的细小噪声点(如“椒盐噪声”)或断开微弱连接非常有效。

腐蚀操作在不同类型图像上的效果

二值图像(Binary Images)

在二值图像(只有黑白两种颜色,通常用0和1表示)中,腐蚀操作的效果最为直观。前景物体(通常为白色,像素值为1)的边缘会向内收缩。

  • 消除噪声: 如果图像中有一些孤立的小白点(噪声),并且这些点的面积小于结构元素,那么腐蚀操作会直接将它们移除。
  • 断开连接: 如果两个前景物体通过一个非常细小的桥梁连接在一起,腐蚀操作可以“切断”这个连接,将它们分离成两个独立的物体。
  • 瘦化骨架: 通过反复进行腐蚀操作,直到物体无法再缩小,可以提取出物体的“骨架”或中心线。

灰度图像(Grayscale Images)

在灰度图像中,腐蚀操作的原理略有不同。结构元素仍然在图像上滑动,但计算规则变为:

  • 输出图像中对应锚点位置的像素值,等于结构元素覆盖区域内所有像素的最小值

这个过程的结果是,图像中亮度高的区域会收缩,而亮度低的区域会膨胀。这在某些情况下可以用来去除图像中的高亮度噪声,或者平滑图像的高光区域。

实际应用

图像预处理与去噪

腐蚀是去除图像中**“椒盐噪声”**(Salt-and-pepper noise)的有效方法之一。小的白色噪声点在腐蚀后会直接消失,而小的黑色噪声点则需要膨胀操作来处理。

分离相互连接的物体

在物体识别或计数任务中,如果一些物体因接触或遮挡而粘连在一起,腐蚀操作可以有效地将它们分离。例如,在分析细胞图像时,如果一些细胞团聚在一起,腐蚀操作可以用来将它们分离开,以便进行独立的计数和分析。

细化与骨架提取

在模式识别和生物特征识别(如指纹识别)中,常常需要提取物体的骨架。腐蚀操作可以逐步“侵蚀”物体,直到其宽度变为一个像素,从而得到物体的中心骨架。这个骨架包含了物体的拓扑信息,对于后续的分析和匹配非常有用。

边缘检测

腐蚀和膨胀的结合可以用来进行边缘检测。**膨胀图像与腐蚀图像的差值(膨胀-腐蚀)可以得到一个物体内部的轮廓,而原始图像与腐蚀图像的差值(原图-腐蚀)**可以得到一个物体外部的轮廓。

opencv实现腐蚀操作示例

import cv2
import numpy as np# 1. 加载图像并转换为二值图像
image = cv2.imread('test.jpg')
# 转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化处理
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)# 2. 定义结构元素
# 这是一个 5x5 的矩形核
kernel = np.ones((5, 5), np.uint8)# 3. 执行腐蚀操作
eroded_binary = cv2.erode(binary, kernel, iterations=1)# 4. 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Original Binary Image', binary)
cv2.imshow('Eroded Image', eroded_binary)
cv2.waitKey(0)
cv2.destroyAllWindows()

执行效果:
在这里插入图片描述

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

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

相关文章

AI随笔番外 · 猫猫狐狐的尾巴式技术分享

🎀【开场 咱才不是偷懒写博客】🐾猫猫趴在键盘边,耳朵一抖一抖:“呜呜呜……明明说好要写技术总结,结果咱脑袋里全是尾巴……要不今天就水一篇随意的 AI 技术分享算啦?”🦊狐狐把书卷轻轻放在桌…

数据分析与挖掘工程师学习规划

一、数学与统计学基础概率论与数理统计随机变量、概率分布(正态分布、泊松分布等)、大数定律、中心极限定理假设检验、置信区间、方差分析(ANOVA)、回归分析贝叶斯定理及其在分类问题中的应用(如朴素贝叶斯算法&#x…

(线上问题排查)4.CPU使用率飙升:从应急灭火到根因治理

目录 从宏观到微观:CPU排查的“破案”流程 第一阶段:应急响应——找到“谁”在捣乱 1. 全局视角:top命令的初窥 2. 进程内窥视:揪出问题线程 第二阶段:深入分析——理解“为什么” 3. 线程堆栈分析:查…

如何快速实现实时云渲染云推流平台的网络环境配置与端口映射

LarkXR是由Paraverse平行云自主研发的实时云渲染推流平台,以其卓越的性能和丰富完备的功能插件,引领3D/XR云化行业风向标。LarkXR适用于3D/XR开发者、设计师、终端用户等创新用户,可以在零硬件负担下,轻松实现超高清低时延的3D交互…

13、Docker构建镜像之Dockerfile

13、Docker构建镜像之Dockerfile 1、Dockerfile是什么 Dockerfile是Docker镜像的构建文件,它包含了一系列指令和参数,用于定义如何构建一个Docker镜像。通过Dockerfile,我们可以将应用程序和其依赖的组件打包到一个独立的镜像中,方…

TensorFlow 深度学习 | 三种创建模型的 API

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 TensorFlow 深度学习 | 三种创建模型的 API 在 TensorFlow 中,模型的构建方式非常灵…

LeetCode82删除排序链表中的重复元素 II

文章目录删除排序链表中的重复元素 II题目描述示例核心思想最优雅解法算法步骤详解示例1演示:[1,2,3,3,4,4,5]关键理解点1. 虚拟头节点的作用2. 重复检测逻辑3. 完全删除重复节点边界情况处理情况1:空链表情况2:单节点情况3:全部重…

蓝桥杯算法之基础知识(6)

目录 Ⅰ.os操作 Ⅱ.时间库(很重要) Ⅲ.基本单位换算(ms,min,h的单位换算) Ⅳ.时间戳 Ⅴ.文件读取 Ⅵ.堆 Ⅶ.math操作 Ⅷ.range()方法单独使用 Ⅸ.python 的异常输出 Ⅹ.for…

多架构/系统图,搞懂:期货账户体系,太通透了!

Hi,围炉喝茶聊产品的新老朋友好!上周和大家聊了国内6大期货交易所清算交收,感兴趣的话烦请戳蓝色链接去学习,就当为下面学习作知识铺垫,更重要是温故知新,并保持知识连贯性。另外围炉特意整理了与账户相关的文章,如下所示: “保证金被扣”拆解期货交易所:清算交收体系…

python-对图片中的头像进行抠图

要实现对图片中人脸或头像进行抠图,可以使用 Python 的 人脸检测 和 掩码生成裁剪工具。这里提供几种实现方法,用于检测图片中的人脸区域并实现裁剪效果: 方案 1: 使用 OpenCV 和 Haar级联检测人脸并裁剪 步骤 1: 安装依赖 安装 OpenCV 和其他…

OpenLayers常用控件 -- 章节一:地图缩放控件详解教程

前言在Web地图开发中,缩放控件是用户与地图交互最基本也是最重要的功能之一。OpenLayers作为功能强大的开源地图库,提供了多种缩放控件来满足不同的交互需求。本文将结合一个完整的Vue.js示例,详细介绍OpenLayers中三种主要的缩放控件&#x…

拓扑学:数学领域的魅力之钥

拓扑学:数学领域的魅力之钥 关键词:拓扑学、连续变形、同胚、流形、代数拓扑、点集拓扑、应用数学 摘要:本文深入探讨拓扑学这一现代数学的重要分支,从其基本概念到高级理论,从纯数学研究到实际应用。我们将从点集拓扑的基础开始,逐步深入到代数拓扑和微分拓扑的复杂世界…

iOS 上架 uni-app 流程全解析,从打包到发布的完整实践

uni-app 作为跨平台开发框架,凭借“一套代码,多端运行”的特性,已经成为不少团队和个人开发者的首选。 然而,很多开发者在 iOS 应用上架环节,常常遇到流程复杂、工具分散、审核繁琐等问题。 本文将以 iOS 上架 uni-app…

go 语言map是线程不安全的如何处理

在 Go 语言中,map确实是线程不安全的。当多个 goroutine 并发读写同一个 map 时,会导致 ​race condition​(竞态条件),可能引发程序崩溃或数据不一致。以下是解决方案:一、基本方案:使用互斥锁…

落地页测试case(Android视角)

落地页按钮或者adjust的链接的跳转功能和测试case(Android视角) 如果没有安装应用,跳转到应用商店的应用下载界面如果已经安装应用,跳转到应用内,再从应用内跳转到相应的页面如果落地页是在window打开,点击…

前端自动化打包服务器无法安装高版本 Node.js v22 问题解决

问题:安装高版本 node,报错。具体表现 当执行 node -v 命令时,系统提示多个 GLIBC_xxx 版本未找到,比如 GLIBCXX_3.4.21、GLIBC_2.27 等,这些是 node 程序运行所依赖的 Glibc 库的特定版本符号,当前系统安装…

shell脚本第七阶段--三剑客之awk

学习目标熟悉awk的命令行模式基本语法结构熟悉awk的相关内部变量熟悉awk常用的打印函数print能够在awk中匹配正则表达式打印相关的行一、awk介绍awk是一种编程语言,主要用于在linux/unix下对文本和数据进行处理,是linux/unix下的一个工具。数据可以来自标…

Unity 的游戏循环机制

Unity 的游戏循环机制在 Unity 中,游戏的运行是基于帧的。每一帧都遵循固定的执行顺序:处理输入执行游戏逻辑 (包括 Update、FixedUpdate 和协程)渲染场景显示帧为什么 GameTime.time 在同一帧内不变GameTime.time 是只读属性:它返回的是当前…

算法题(198):数字三角形

审题: 本题需要我们找到数字三角形中的最大路径总值,并输出 思路: 方法一:动态规划 由于本题的路径权值是路径上每一个值累加起来,问题具有阶段重复性,所以我们尝试使用动态规划解决此问题 (1&a…

变频器实习DAY42 VF与IF电机启动方式

目录变频器实习DAY42一、工作内容1.1 OF229程序重新烧录和测试二、学习内容2.1 VF与IF电机启动方式1. VF(Voltage Frequency)启动电机2. IF(Current Frequency)启动电机总结附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^)变频器…