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

news2025/1/13 22:39:58

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

合集完整版请参考这里。

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

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

什么是图像的前景和背景

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

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

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

在这里插入图片描述

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

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

如何区别前景和背景

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

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

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

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

大津算法

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

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

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

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

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

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

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

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

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

工程实践解决

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

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

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

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

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

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

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

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

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

相关文章

使用Cilium/eBPF实现大规模云原生网络和安全

大家读完觉得有帮助记得关注和点赞!!! 目录 抽象 1 Trip.com 云基础设施 1.1 分层架构 1.2 更多细节 2 纤毛在 Trip.com 2.1 推出时间表 2.2 自定义 2.3 优化和调整 2.3.1 解耦安装 2.3.2 避免重试/重启风暴 2.3.3 稳定性优先 2…

怎么把word试题转成excel?

在教育行业、学校管理以及在线学习平台中,试题库的高效管理是一项核心任务。许多教育工作者和系统开发人员常常面临将 Word 中的试题批量导入 Excel 的需求。本文将详细介绍如何快速将试题从 Word 转换为 Excel,帮助您轻松解决繁琐的数据整理问题&#x…

css盒子水平垂直居中

目录 1采用flex弹性布局: 2子绝父相margin:负值: 3.子绝父相margin:auto: 4子绝父相transform: 5通过伪元素 6table布局 7grid弹性布局 文字 水平垂直居中链接:文字水平垂直居中-CSDN博客 以下为盒子…

Spring 项目 基于 Tomcat容器进行部署

文章目录 一、前置知识二、项目部署1. 将写好的 Spring 项目先打包成 war 包2. 查看项目工件(Artifact)是否存在3. 配置 Tomcat3.1 添加一个本地 Tomcat 容器3.2 将项目部署到 Tomcat 4. 运行项目 尽管市场上许多新项目都已经转向 Spring Boot&#xff0…

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

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

docker安装rabbit后访问报错最佳的几种解决方案

错误通常是由于RabbitMQ的安全配置导致的,RabbitMQ默认配置允许的用户仅能通过localhost访问。这通常出现在RabbitMQ的guest用户上,guest用户默认只能从localhost登录,而无法从其他IP地址进行远程访问。 解决方法: 1. **创建一个…

计科高可用服务器架构实训(防火墙、双机热备,VRRP、MSTP、DHCP、OSPF)

一、项目介绍 需求分析: (1)总部和分部要求网络拓扑简单,方便维护,网络有扩展和冗余性; (2)总部分财务部,人事部,工程部,技术部,提供…

spark汇总

目录 描述运行模式1. Windows模式代码示例 2. Local模式3. Standalone模式 RDD描述特性RDD创建代码示例(并行化创建)代码示例(读取外部数据)代码示例(读取目录下的所有文件) 算子DAGSparkSQLSparkStreaming…

Linux - 什么是线程和线程的操作

线程概念 什么是线程: 线程(Thread)是操作系统能够进行运算调度的最小单位. 它被包含在进程之中, 是进程中的实际运作单位. 一个进程可以包含多个线程. 进程 : 线程 1 : n (n > 1). 进程是系统分配资源的基本单位. 线程则是系统调度的基本单位. 在…

基于YOLOv8的高空无人机小目标检测系统(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型

目标检测系统【环境搭建过程】(GPU版本)-CSDN博客 摘要 本文提出了一种基于YOLOv8算法的高空无人机小目标检测系统,利用VisDrone数据集中的7765张图片(6903张训练集,862张验证集)进行模型训练,…

apollo内置eureka dashboard授权登录

要确保访问Eureka Server时要求输入账户和密码,需要确保以下几点: 确保 eurekaSecurityEnabled 配置为 true:这个配置项控制是否启用Eureka的安全认证。如果它被设置为 false,即使配置了用户名和密码,也不会启用安全认…

一学就废|Python基础碎片,文件读写

文件处理是指通过编程接口对文件执行诸如创建、打开、读取、写入和关闭等操作的过程。它涉及管理程序与存储设备上的文件系统之间的数据流,确保数据得到安全高效的处理。 Python 中的文件模式 打开文件时,我们必须指定我们想要的模式,该模式…

【计算机网络】lab7 TCP协议

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀计算机网络_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 实验目的…

Ollama VS LocalAI:本地大语言模型的深度对比与选择指南

随着人工智能技术的快速发展,大语言模型逐渐成为多个行业的重要工具。从生成内容到智能问答,大模型展现了强大的应用潜力。然而,云端模型的隐私性、使用成本和网络依赖等问题也促使更多用户关注本地化解决方案。Ollama 和 LocalAI 是近年来备…

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

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

【数据结构】第1天之Java中的数据结构

前言 众所周知,程序数据结构算法,可见数据结构的重要性。 在Java中,数据结构通常指的是Java集合框架中的类和接口。 Java集合框架提供了一套标准的数据结构,例如列表、集合、映射表等,以及相应的实现类。 今天要分享的…

OpenCV的对比度受限的自适应直方图均衡化算法

OpenCV的对比度受限的自适应直方图均衡化(CLAHE)算法是一种图像增强技术,旨在改善图像的局部对比度,同时避免噪声的过度放大。以下是CLAHE算法的原理、步骤以及示例代码。 1 原理 CLAHE是自适应直方图均衡化(AHE&…

【赵渝强老师】什么是NoSQL数据库?

随着大数据技术的兴起,NoSQL数据库得到了广泛的应用。NoSQL的全称是Not Only SQL,中文含义是不仅仅是SQL。它泛指所有的非关系型数据库,即:在NoSQL数据库中存储数据的模型可能不是二维表的行和列。NoSQL数据库不遵循关系型数据库范…

Linux第一个系统程序---进度条

进度条---命令行版本 回车换行 其实本质上回车和换行是不同概念,我们用一张图来简单的理解一下: 在计算机语言当中: 换行符:\n 回车符:\r \r\n:回车换行 这时候有人可能会有疑问:我在学习C…

于交错的路径间:分支结构与逻辑判断的思维协奏

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。* 这一节内容很多,文章字数达到了史无前例的一万一,我们要来学习分支与循环结构中…