010:传统计算机视觉之大津算法初探

本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。

合集完整版请参考这里。

上一节学习了利用 Canny 算法来完成一个图片的边缘检测,从而可以区分出图像的边缘。

本节再了解一个计算机视觉中更常见的应用,那就是把图片的前景和背景的分离,也叫做图像分割。

什么是图像的前景和背景

在图像处理和计算机视觉中,"前景"和"背景"是指图像中的两个主要部分。

前景:前景是图像中引起人们兴趣或希望被重点关注的区域,通常指图像中的主要目标,或者在图像处理中你想要从图像中提取或识别的对象。

背景:简单理解就是除了前景之外的其余图像区域,作为陪衬的、通常是图像中次要的区域。

在这里插入图片描述

举个例子,上述图片一只猫在一个花园中,那么照片中的猫就是前景,而周围的花园景色就是背景。

在一些图像处理任务中,准确地分割前景和背景非常关键,例如,在图像分割领域中,我们就很希望将图像中的不同对象分离开来,这肯定需要识别然后分割前景和背景。

如何区别前景和背景

在继续阅读之前,你可以先想一下,如果让你自己来完成这个前景和背景的分割,在已学习的知识框架下,如何来完成呢?

你可能会想到先用灰度图简化一张图像。没错,前面已经介绍了灰度图,灰度图丢失了颜色信息,转而将彩色图像转化为了只有一个通道(灰度)的照片,在这样的照片里,所有像素的灰度值都限制在了0-255的范围内。

如果想要区分前景和背景,就需要找到一个灰度阈值,比如100,大于100的所有像素,称之为前景(或背景),而小于等于100的所有像素称之为背景(或前景)。

基于此,就可以把一张图片的前景和背景分开了。那现在问题转化为,如何选择一个合适的阈值,来将灰度图分开?

大津算法

大津算法就是专门做这个事的一种算法,这里不写具体的公式了,如果你对大津算法感兴趣可以直接去百度查一下,有很多公式推导。

这里从一个最通俗易懂的角度来说明大津算法是如何将一个灰度图分为前景和背景的。

大津是个日本学者,他在研究这个算法的时候可能这么想过:假设我已经找到了一个阈值,并且已经利用这个阈值将图像划分为两块区域(一块是所有像素点小于阈值的,一块是所有像素点大于阈值的),那么这两个区域可以看做是两个集合或者两个类别。

如果让前景和背景分割的效果最好,那肯定就是这两个集合(两个类别)之间的灰度值相差最大,这样区别才明显。

于是,大津定义了一个指标为两类中所有像素点的类间方差,如果类间方差最大,那么划分这两类的阈值分割出来的图像肯定就是最明显的。

类间方差最大,这是大津算法的一个核心思想。

方差大意味着两个数据的差别大,从而可以最大限度、最精确的来完成图像的前景和背景的分割。

那还是回到这个问题,如何确定这个阈值,使得小于它和大于它的两类图像的像素点类间方差最大呢?

大津也想了很多办法,发现从数学上几乎很难解决这个问题,但是这个问题数学上解决不了,不代表工程上解决不了。

工程实践解决

我们知道,灰度图的全部像素的值也就0-255。假设先设置阈值为0,那么就可以利用这个阈值计算出一个类间方差,记为S0; 然后再设置阈值为1,再计算出一个类间方差S1,一直尝试到设置阈值为255, 总共计算出256个方差,分别为 S0、S1、…、S255。

找到这256个类间方差最大的那个值,对应的阈值就是希望得到的阈值了。

这就是大津算法在实现时的另一个核心思想:灰度值遍历。

所以,总结一下,大津算法的核心思想有两个。

  • 第一个是数学上的:是求大于阈值和小于阈值所有像素点的方差,以类间方差为标准来划分前景和背景;

  • 第二个是工程上的:利用遍历法来遍历所有像素值,最终获得类间方差最大时对应的阈值。

对于计算机而言,遍历一个从 0-255 的数组的性能是很快的。因此,大津算法在效果和性能上都还不错,成为了在图像前景和背景分离中一个常见的算法。

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

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

相关文章

Python中定位包含特定文本信息的元素

目录 一、为什么需要定位包含文本信息的元素 二、使用Selenium定位包含文本的元素 1. 使用find_element_by_link_text 2. 使用find_element_by_partial_link_text 3. 使用XPath定位包含文本的元素 4. 使用CSS选择器定位包含文本的元素 三、使用BeautifulSoup定位包含文本…

使用uniapp 微信小程序一些好用的插件分享

总结一下自己在开发中遇见的一问题,通过引入组件可以快速的解决 1.zxz-uni-data-select 下拉框选择器(添加下拉框检索,多选功能,多选搜索功能,自定义 下拉框插件,使用这个的原因是因为 uniui uview 组件库下拉框太…

sql server cdc漏扫数据

SQL Server的CDC指的是“变更数据捕获”(Change Data Capture)。这是SQL Server数据库提供的一项功能,能够跟踪并记录对数据库表中数据所做的更改。这些更改包括插入、更新和删除操作。CDC可以捕获这些变更的详细信息,并使这些信息…

Unreal Engine 5 (UE5) Metahuman 的头部材质

在图中,你展示了 Unreal Engine 5 (UE5) Metahuman 的头部材质部分,列出了头部材质的多个元素。以下是对每个部分的解释: 材质解释 Element 0 - MI_HeadSynthesized_Baked 作用: 这是 Metahuman 的主要头部材质,控制整…

springboot使用Easy Excel导出列表数据为Excel

springboot使用Easy Excel导出列表数据为Excel Easy Excel官网&#xff1a;https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write 主要记录一下引入时候的pom&#xff0c;直接引入会依赖冲突 解决方法&#xff1a; <!-- 引入Easy Excel的依赖 -->&l…

SYS_OP_MAP_NONNULL NULL的等值比较

无意在数据库中发现了这个操作SYS_OP_MAP_NONNULL。 SYS_OP_MAP_NONNULL应该不是数据库中的对象&#xff0c;因为在DBA_OBJECTS中根本找不到它&#xff0c;而在STANDARD和DBMS_STANDARD包中也找不到函数说明。 SQL> SELECT * 2 FROM DBA_OBJECTS 3 WHERE OBJECT_NAME…

C语言---函数和数组实践:扫雷游戏

函数和数组实践&#xff1a;扫雷游戏 在这次的实践项目中&#xff0c;需要编写一个可以在在控制台运行的经典的扫雷游戏。 一、游戏要求 游戏有菜单&#xff0c;可以通过菜单实现继续玩或者退出游戏游戏要求棋盘9*9&#xff0c;雷&#xff08;10个&#xff09;要求随机布置可…

Web开发中页面出现乱码的解决(Java Web学习笔记:需在编译时用 -encoding utf-8)

目录 1 引言2 乱码表现、原因分析及解决2.1 乱码表现2.2 原因分析2.3 解决 3 总结 1 引言 Web开发的页面出现了乱码&#xff0c;一直不愿写出来&#xff0c;因为网上的解决方案太多了。但本文的所说的页面乱码问题&#xff0c;则是与网上的大多数解决方案不一样&#xff0c;使…

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

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

初学stm32 --- DAC输出三角波和正弦波

输出三角波实验简要&#xff1a; 1&#xff0c;功能描述 通过DAC1通道1(PA4)输出三角波&#xff0c;然后通过DS100示波器查看波形 2&#xff0c;关闭通道1触发(即自动) TEN1位置0 3&#xff0c;关闭输出缓冲 BOFF1位置1 4&#xff0c;使用12位右对齐模式 将数字量写入DAC_…

【opencv】第7章 图像变换

7.1 基 于OpenCV 的 边 缘 检 测 本节中&#xff0c;我们将一起学习OpenCV 中边缘检测的各种算子和滤波器——Canny 算子、Sobel 算 子 、Laplacian 算子以及Scharr 滤波器。 7.1.1 边缘检测的一般步骤 在具体介绍之前&#xff0c;先来一起看看边缘检测的一般步骤。 1.【第…

【Python】Python与C的区别

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

web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理

web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理 1.uni.getSystemInfoSync().screenWidth; 获取屏幕宽度 2.uni.onWindowResize&#xff08;&#xff09; 实时监测屏幕宽度变化 3.根据宽度的大小拿到每行要展示的数量itemsPerRow 4.为了确保样式能够根据 items…

Idea-离线安装SonarLint插件地址

地址&#xff1a; SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..&#xff0c;选中下载好的插件&#xff0c;然后重启idea

数据结构与算法之二叉树: LeetCode 637. 二叉树的层平均值 (Ts版)

二叉树的层平均值 https://leetcode.cn/problems/average-of-levels-in-binary-tree/description/ 描述 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值与实际答案相差 1 0 − 5 10^{-5} 10−5 以内的答案可以被接受 示例 1 输入&#xff1a;root…

MySQL表的增删改查(基础)-下篇

修改 真正在改硬盘了&#xff0c;这样的修改是“持久有效”。一定要确保&#xff0c;update的修改是改对了&#xff0c;改出问题来就麻烦。指定update的时候&#xff0c;如果当前不指定任何条件&#xff0c;就会针对所有的行都能生效&#xff01; (把整个表都给改了)。 案例 --…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(五)

文章目录 一、学生管理模块功能实现1、添加学生功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、学生管理功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询接口实现2.3.2 后端编辑接口实现2.3.3 后端删除接口实现2.4 效果展示二、代码…

使用 WPF 和 C# 绘制图形

绘图困难 此示例展示了如何在 WPF 和 C# 中绘制图形。绘制图形总是很棘手&#xff0c;因为您通常需要在至少两个不同的坐标系中工作。首先&#xff0c;您要为图形使用世界坐标。例如&#xff0c;您可能希望 X 值的范围为 2000 年至 2020 年&#xff0c;Y 值的范围为 10,000 美元…

3D滤波器处理遥感tif图像

import cv2 import numpy as np from osgeo import gdal# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # …

JuiceFS 2024:开源与商业并进,迈向 AI 原生时代

即将过去的 2024 年&#xff0c;是 JuiceFS 开源版本推出的第 4 年&#xff0c;企业版的第 8 个年头。回顾过去这一年&#xff0c;JuiceFS 社区版依旧保持着快速成长的势头&#xff0c;GitHub 星标突破 11.1K&#xff0c;各项使用指标增长均超过 100%&#xff0c;其中文件系统总…