半遮挡检测算法 Detecting Binocular Half-Occlusions
【1. 背景】:
本文分析【Detecting Binocular Half-Occlusions:Empirical Comparisons of Five Approaches】Geoffrey Egnal和Richard P. Wildes于2002年发表在IEEE Transactions on Pattern Analysis and Machine Intelligence上,这是1篇中科院1区的论文,值得学习。论文主要研究了双目视觉系统中的半遮挡(half-occlusions)检测问题,文章提及了五种检测半遮挡的方法,并进行了定量和定性的比较分析。
【V: leaf3d】
【2. 研究内容】:
文章提及的5种方法分别为:
-
Bimodalities in Disparity (BMD)
BMD 方法基于视差图像的双峰特性。在半遮挡边界附近的点会匹配到遮挡面和被遮挡面,导致局部视差直方图呈现双峰分布。通过检测这种双峰特性,可以识别半遮挡边界
-
Match Goodness Jumps (MGJ)
MGJ 方法假设匹配质量低的点可能是半遮挡点。当匹配算法处理来自两个图像的同一表面时,匹配质量通常较高;而在半遮挡区域,匹配质量会显著下降。MGJ 通过检测匹配质量的突变来识别半遮挡 -
Left-Right Checking Failures (LRC)
LRC 方法基于左右视图的视差图像应互为相反数(除了在半遮挡区域)。如果左右视图的视差图像在某些点上不满足这种关系,则这些点可能是半遮挡点 -
Ordering Constraint (ORD)
ORD 方法基于排序约束。如果两个点在左视图中按某种顺序匹配,但在右视图中匹配顺序改变,则这些点可能是半遮挡点 -
Occlusion Constraint (OCC)
OCC 方法基于遮挡约束。该方法假设视差图中的不连续性对应于半遮挡区域。通过检测视差图中的不连续性,可以识别半遮挡区域
其中,他们的区别和联系在于:
BMD 和 MGJ 是边界检测方法,主要用于检测半遮挡的起始和结束位置。
LRC、ORD 和 OCC 是区域检测方法,用于标记整个半遮挡区域
【方法1:BMD】
BMD 方法的核心思想是:水平视差图像中与半遮挡边界对应的点在其邻域中将具有由被遮挡区域和遮挡表面产生的视差值。在这些区域,视差的直方图应该是双峰的(见下图,局部视差直方图 disparity in window在选定的邻域内,统计每个像素的视差值,并构建视差直方图。直方图的横轴表示视差值,纵轴表示该视差值出现的频率, 第一个峰对应于遮挡面的视差值; 第二个峰对应于被遮挡面的视差值。在非遮挡区域,视差值连续、接近的,因此局部视差直方图是单峰的)。选择峰值比测试来确定是否存在双峰,峰比是第二高峰与最高峰的比值。如果峰值大小相似,表示双峰,则峰值比更接近1,BMD可以表示为
因此,如果某个像素的邻域被检测为双峰分布,则该像素被认为是半遮挡边界的一部分。对于每个像素重复上述过程,最终生成一个标记半遮挡边界的图像。
优点:BMD 方法能够检测到所有遮挡边界,包括与视差方向垂直的不连续性。它是一种基于局部统计的方法,对匹配算法的依赖较小。局限性:对参数(如邻域大小和阈值)非常敏感,需要根据具体场景进行调整。在视差变化剧烈或噪声较多的区域,容易产生误报。
【方法2:MGJ】
MGJ方法的核心思想是利用匹配算法生成的匹配质量图像(match goodness image)来检测半遮挡点。在双目视觉中,匹配质量通常反映了像素之间匹配的可靠性。MGJ 方法假设在半遮挡区域,匹配质量会显著下降,因为这些区域无法找到正确的匹配点。如下图以右视图为基准的匹配统计,计算某一点领域的匹配质量突变程度,设定阈值来判断是否为半遮挡点。
优点:
1. 简单高效。MGJ 方法基于匹配质量图像的直接分析,计算复杂度较低
2. 独立性强:MGJ 方法不依赖于视差图像的具体内容,而是基于匹配质量的变化,因此对匹配算法的依赖较小。
局限性:
1. 对噪声敏感:在匹配质量图像中,噪声可能会导致误报,尤其是在低纹理或高对比度区域。
2. 依赖匹配算法:MGJ 方法的性能依赖于匹配算法生成的匹配质量图像的质量。如果匹配质量图像存在误差,MGJ 方法的性能也会受到影响。
3. 可能漏检:在某些情况下,半遮挡区域的匹配质量可能不会显著下降,导致漏检。
【方法3:LRC】
LRC方法的核心思想是利用左右视图的视差图像之间的关系来检测半遮挡点。具体来说,LRC 方法假设左视图和右视图的视差图像在非遮挡区域应该是互为相反数,而在半遮挡区域,这种对称性会被破坏。如图所示Disparity中左基准视差图和右基准视差图中,非遮挡区域对应点的视差是视差值相近,但符号相反的值。但是在遮挡区域不满足该关系。左右视察一致性描述的是左基准点匹配到右图中的点后,右图中的点再返回来仍然能够找到左图的同一点,按照如下定义阈值来判断
优点:简单高效:LRC 方法基于视差图像的直接分析,计算复杂度较低;对称性检测:通过检测左右视图的对称性破坏,能够有效地识别半遮挡点;适用性强:适用于多种双目匹配算法生成的视差图像。
局限性:
对噪声敏感:在视差图像中,噪声可能会导致误报,尤其是在低纹理或高对比度区域。依赖视差图像质量:LRC 方法的性能依赖于视差图像的质量。如果视差图像存在误差,LRC 方法的性能也会受到影响。可能漏检:在某些情况下,半遮挡区域的对称性破坏可能不明显,导致漏检。
【方法4:ORD】
核心思想是利用双目图像中匹配点的几何顺序关系来检测半遮挡点。在双目视觉中,如果两个点在左视图中按某种顺序排列,那么在右视图中它们的匹配点也应该保持相同的顺序。如果顺序被破坏,则可能表明存在半遮挡。
该方法容易理解,通过基准图像上点的左右关系和匹配点的左右关系来判断。但是,半遮挡区域可能不会明显违反排序约束,导致漏检。
【方法5:OCC】
OCC 方法的核心思想是:在双目视觉中,视差图的不连续性通常对应于场景中的遮挡边界。
该方法随着而来的问题是,物体的不连续也会带来视差的跳变,跳变处有可能对应着遮挡的区域,但如何准确分界是一个问题。
相关文章:
半遮挡检测算法 Detecting Binocular Half-Occlusions
【1. 背景】: 本文分析【Detecting Binocular Half-Occlusions:Empirical Comparisons of Five Approaches】Geoffrey Egnal和Richard P. Wildes于2002年发表在IEEE Transactions on Pattern Analysis and Machine Intelligence上,这是1篇中…...
零基础购买阿里云服务器,XShell连接云服务器
目录 1.环境搭建方式 2. 使用云服务器 3.使用终端软件登录到Linux 4.使用XShell登录主机 5.连接失败的原因: 下一篇更新:Linux的基础指令以及如何Linux的环境搭建 1.环境搭建方式 主要有四种: 1.直接安装在物理机上,虽然Linux有图形化…...
Mac ARM 架构的命令行(终端)中,删除整行的快捷键是:Ctrl + U
在 Mac ARM 架构的命令行(终端)中,删除整行的快捷键是: Ctrl U这个快捷键会删除光标所在位置到行首之间的所有内容。如果你想删除光标后面的所有内容,可以使用: Ctrl K这两个快捷键可以帮助你快速清除当…...
ESP学习-1(MicroPython VSCode开发环境搭建)
下载ESP8266固件:https://micropython.org/download/ESP8266_GENERIC/win电脑:pip install esptools python.exe -m pip install --upgrade pip esptooo.py --port COM5 erase_flash //清除之前的固件 esptool --port COM5 --baud 115200 write_fla…...
微信小程序性能优化
微信小程序的性能优化是提升用户体验的关键。以下是一些常见的优化策略和技巧: 1. 减少 setData 的调用频率和数据量 setData 是小程序中更新视图的主要方式,但频繁调用或数据量过大会导致性能问题。 减少调用频率:避免在短时间内多次调用…...
五十天精通硬件设计第31天-阻抗
系列文章传送门 50天精通硬件设计第一天-总体规划-CSDN博客 目录 1. 核心概念:特性阻抗 2. 阻抗不匹配的后果 3. 关键影响因素 4. 阻抗匹配方法 5. 设计实践要点 6. 工具与测试 7. 常见问题解决 总结 信号完整性中的阻抗问题主要涉及传输线的特性阻抗匹配,是确保高…...
docker部署dify结合deepseek构建知识库
序 本文主要研究一下本地docker部署dify结合deepseek构建知识库 步骤 dify git clone https://github.com/langgenius/dify.git git co tags/0.15.3 -b 0.15.3 cd docker cp .env.example .env docker-comopse up启动之后访问localhost docker-comopse.yaml # # WARNING…...
11.C语言 malloc() calloc() realloc()分配内存
目录 malloc 好处 坏处 总结 calloc 参数说明 作用 与 malloc 的区别 示例 优点 缺点 总结 realloc 参数说明 作用 示例 优点 缺点 注意事项 总结 总结区别 对比表格 malloc 函数功能:分配内存给 void* malloc(size_t size); 来看一下deep…...
可信大模型:LLM + 神经符号推理,解决复杂推理任务
可信大模型:LLM 神经符号推理,解决复杂推理任务 论文大纲一、Why:研究要解决的现实问题二、What:核心发现或论点三、How:研究的整体方法与关键细节3.1 前人研究的局限性3.2 创新方法/视角3.3 关键数据或实验支持3.4 可…...
基于大数据的全国热门旅游景点数据分析系统的设计与实现
【大数据】基于大数据的全国热门旅游景点数据分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统主要包括登录注册、系统首页、图表分析、数据管理和个人信息五大功能模…...
Moya 网络框架
Moya 网络框架 定义enum类型,有多种接口就定义多少种,然后实现TargetType协议 import Foundation //导入网络框架 import Moyaenum DefaultService {//广告列表case ads(position : Int)case sheets(size:Int)case sheetDetail(data: String)case regi…...
【环境安装】重装Docker-26.0.2版本
【机器背景说明】Linux-Centos7;已有低版本的Docker 【目标环境说明】 卸载已有Docker,用docker-26.0.2.tgz安装包安装 1.Docker包下载 下载地址:Index of linux/static/stable/x86_64/ 2.卸载已有的Docker 卸载之前首先停掉服务 sudo…...
std::ranges::set_intersection set_union set_difference set_symmetric_difference
std::ranges::set_intersection:是 C20 引入的一个算法,用于计算两个已排序范围的交集。它将两个范围的交集元素复制到输出范围中。 std::ranges::set_intersection 用于计算两个已排序范围的交集。它将两个范围的交集元素复制到输出范围中。 注意事项…...
消息中间件深度剖析:以 RabbitMQ 和 Kafka 为核心
在现代分布式系统和微服务架构的构建中,消息中间件作为一个不可或缺的组件,承担着系统间解耦、异步处理、流量削峰、数据传输等重要职能。尤其是在面临大规模并发、高可用性和可扩展性需求时,如何选择合适的消息中间件成为了开发者和架构师们…...
笔试题笔记#6 模拟三道题和总结知识
两小时快乐模拟,最终三百分耻辱下播,(刷的题三道一组,时长两小时,第一题100分,第二题200分,第三题300分),第三题完全想错了,其实挺简单的,就是好久…...
生成对抗网络(GAN)的“对抗“过程解析:从图像合成到药物发现的跨领域应用
技术原理(数学公式示意图) 核心对抗公式 min G max D V ( D , G ) E x ∼ p d a t a [ log D ( x ) ] E z ∼ p z [ log ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D,G) \mathbb{E}_{x\sim p_{data}}[\log D(x)] \mathbb{E}_{z\sim p_…...
[鸿蒙笔记-基础篇_自定义构建函数及自定义公共样式]
在开发中遇到比较复杂的界面的时候都会用到自定义组件,但是在自定义组件内部也会有一些公共的布局及公共的样式,这时就需要用到自定义构建函数和自定义构建样式。说白了就是:在ets文件中进行构建函数和构建样式的抽取封装。比较常用记录一下。…...
【C】初阶数据结构4 -- 双向循环链表
之前学习的单链表相比于顺序表来说,就是其头插和头删的时间复杂度很低,仅为O(1) 且无需扩容;但是对于尾插和尾删来说,由于其需要从首节点开始遍历找到尾节点,所以其复杂度为O(n)。那么有没有一种结构是能使得头插和头删…...
【动态路由】系统Web URL资源整合系列(后端技术实现)【nodejs实现】
需求说明 软件功能需求:反向代理功能(描述:apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 业务应用等多个web资…...
解读 Flink Source 接口重构后的 KafkaSource
前言 Apache Kafka 和 Apache Flink 的结合,为构建实时流处理应用提供了一套强大的解决方案[1]。Kafka 作为高吞吐量、低延迟的分布式消息队列,负责数据的采集、缓冲和分发;而 Flink 则是功能强大的流处理引擎,负责对数据进行实时…...
一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记
时间轴呈现事故进程 17:00:开发人员小李正在尝试利用 Python 爬虫从企查查(https://www.qcc.com)抓取公司工商信息。原本一切正常,但突然发现信息采集失败,程序抛出大量选择器错误。17:15:小李发现&#x…...
代码随想录刷题攻略---动态规划---子序列问题1---子序列
子序列(不连续)和子序列(连续)的问题 例题1: 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的…...
QEMU 搭建arm linux开发环境
Qemu 作为一款强大的开源虚拟化软件,为我们提供了一个便捷且经济实惠的方式来模拟各种硬件环境,从而在上面安装和学习 Linux 系统。本文将详细介绍如何使用 Qemu 搭建 Linux 学习环境, 环境准备 操作系统:建议使用 Ubuntu 20.04…...
PyQt组态软件 拖拽设计界面测试
PyQt组态软件测试 最近在研究PyQt,尝试写个拖拽设计界面的组态软件,目前实现的功能如下: 支持拖入控件,鼠标拖动控件位置 拖动控件边缘修改控件大小支持属性编辑器,修改当前选中控件的属性 拖动框选控件,点选控件 控…...
JAVA泛型介绍与举例
Java中,泛型用于编译阶段限制集合中元素的类型,或者限制类中某个属性的类型,编译过程中发生类型擦除,最终还是Object类型。 1. 集合中的泛型 集合默认可以存储任何类型的元素,即Object类型,当使用一个集合…...
JavaScript 内置对象-Math对象
在JavaScript中,Math 对象提供了一系列与数学相关的静态方法和属性,帮助开发者执行复杂的计算任务。无论是简单的算术运算还是高级的几何、统计计算,Math 对象都能提供强大的支持。本文将详细介绍 Math 对象的主要功能及其使用方法。 一、简…...
Ubuntu 22.04 Desktop企业级基础配置操作指南
一、网络配置 cd /etc/netplan vi 00-installer-config.yaml 设置如下所示: network:version: 2ethernets:eth0: # 替换为你的实际网络接口名称,如 ens33, enp0s3 等dhcp4: noaddresses:- 192.168.1.100/24 # 静态IP地址和子网掩码gateway4: 192.16…...
UE_C++ —— UObject Instance Creation
目录 一,UObject Instance Creation NewObject NewNamedObject ConstructObject Object Flags 二,Unreal Object Handling Automatic Property Initialization Automatic Updating of References Serialization Updating of Property Values …...
WPF的MVVMLight框架
在NuGet中引入该库: MVVMLight框架中的命令模式的使用: <StackPanel><TextBox Text"{Binding Name}"/><TextBox Text"{Binding Title}"/><Button Content"点我" Command"{Binding ShowCommand…...
【云安全】云原生- K8S kubeconfig 文件泄露
什么是 kubeconfig 文件? kubeconfig 文件是 Kubernetes 的配置文件,用于存储集群的访问凭证、API Server 的地址和认证信息,允许用户和 kubectl 等工具与 Kubernetes 集群进行交互。它通常包含多个集群的配置,支持通过上下文&am…...
binance python
binance-futures-connector 4.1.0 from binance.um_futures import UMFutures # U本位 USDT-M Futures /fapi/* # 币本位 COIN-M Delivery /dapi/* proxies { https: http://localhost:7890 } client UMFutures(proxiesproxies)apiKey"" apiSecret"" cl…...
LLaMA-Factory DeepSeek-R1 模型 微调基础教程
LLaMA-Factory 模型 微调基础教程 LLaMA-FactoryLLaMA-Factory 下载 AnacondaAnaconda 环境创建软硬件依赖 详情LLaMA-Factory 依赖安装CUDA 安装量化 BitsAndBytes 安装可视化微调启动 数据集准备所需工具下载使用教程所需数据合并数据集预处理 DeepSeek-R1 可视化微调数据集处…...
利用亚马逊云科技RDS for SQL Server配置向量数据存储
生成式人工智能(AI)正迎来又一个快速发展期,引起了开发者们的广泛关注。将生成式能力集成到商业服务和解决方案中变得非常重要。当前的生成式AI解决方案是机器学习和深度学习模型逐步进化迭代的结果。从深度学习到生成式AI的质变飞跃主要是由…...
ASP.NET Core SixLabors.ImageSharp v1.0 的图像实用程序类 web示例
这个小型实用程序库需要将 NuGet SixLabors.ImageSharp包(版本 1.0.4)添加到.NET Core 3.1/ .NET 6 / .NET 8项目中。它与Windows、Linux和 MacOS兼容。 这已针对 ImageSharp v3.0.1 进行了重新设计。 它可以根据百万像素数或长度乘以宽度来调整图像大…...
JVM 底层探秘:对象创建的详细流程、内存分配机制解析以及线程安全保障策略
文章目录 1. 类加载检查2. 内存分配① 指针碰撞② 空闲列表线程安全问题: 3. 内存空间初始化4. 对象头设置5. 对象初始化 当Java虚拟机遇到一条 new指令时,会执行以下步骤来创建对象: 1. 类加载检查 首先检查new指令的参数是否能在常量池中…...
SpringCloud框架下的注册中心比较:Eureka与Consul的实战解析
摘要 在探讨SpringCloud框架中的两种注册中心之前,有必要回顾单体架构与分布式架构的特点。单体架构将所有业务功能集成在一个项目中,优点是架构简单、部署成本低,但耦合度高。分布式架构则根据业务功能对系统进行拆分,每个模块作…...
应对DeepSeek总是服务器繁忙的解决方法
最近由于访问量过大,DeepSeek服务器官网经常弹出:“服务器繁忙,请稍后再试”的提示,直接卡成PPT怎么办?服务器繁忙直接看到视觉疲劳: 解决DeepSeek卡顿问题 DeepSeek使用卡顿问题,是因为访问量…...
C++ 实践扩展(Qt Creator 联动 Visual Studio 2022)
这里我们将在 VS 上实现 QT 编程,实现如下: 一、Vs 2022 配置(若已安装,可直接跳过) 点击链接:Visual Studio 2022 我们先去 Vs 官网下载,如下: 等待程序安装完成之…...
JENKINS(全面)
一.linux系统中JENKINS的安装 注意:安装jenkins需要安装jdk,而且具体版本的jenkins有相对应的jdk版本。可参考以下链接。 Redhat Jenkins 软件包https://pkg.jenkins.io/redhat-stable/https://pkg.jenkins.io/redhat-stable/https://pkg.jenkins.io/r…...
72.git指南(简单)
Git 操作指南 在开始之前,请确保你已经提前配置好 .gitignore 文件,以避免不必要的文件被 Git 跟踪。如果在初始化仓库后再配置 .gitignore 文件,之前添加的文件仍会被跟踪,需要手动移除。 如下例子忽略了文件夹及文件夹内所有内…...
LeetCode 232: 用栈实现队列
LeetCode 232: 用栈实现队列 题目描述 使用栈实现队列的操作。支持以下操作: MyQueue():初始化队列。push(x):将元素 x 推入队列。pop():从队列中移除元素。peek():返回队列头部的元素。empty():检查队列…...
C#关于静态关键词static详解
Demo代码: public class HomeController : Controller {private DateTime time1 DateTime.Now; // 实例字段private static DateTime time2 DateTime.Now; // 静态字段[HttpGet("index")]public async Task Index(){Console.WriteLine($"now&am…...
【Pico】使用Pico进行无线串流搜索不到电脑
使用Pico进行无线串流搜索不到电脑 官串方式:使用Pico互联连接电脑。 故障排查 以下来自官方文档 请按照以下步骡排除故障: 确认电脑和一体机连接了相同的路由器WiFi网络(相同网段) IP地址通常为192.168.XX,若两设备的IP地址前三段相同&…...
细说STM32F407单片机RTC的基本原理及闹钟和周期唤醒功能的使用方法
目录 一、RTC基础知识 1、 RTC的功能 2、RTC工作原理 (1)RTC的时钟信号源 (2)预分频器 (3)实时时钟和日历数据 (4)周期性自动唤醒 (5)可编程闹钟 &a…...
ES用脚本更新异常
因为需要向原有的es结构中增加一个检索字段,但因为历史es数据都没有该字段,需要批量刷新es的该字段,本地使用了脚本的方式进行刷新,在测试环境测试,出现了以下错误: 500 Internal Server Error: [{"e…...
Navicat导入海量Excel数据到数据库(简易介绍)
目录 前言正文 前言 此处主要作为科普帖进行记录 原先Java处理海量数据的导入时,由于接口超时,数据处理不过来,后续转为Navicat Navicat 是一款功能强大的数据库管理工具,支持多种数据库系统(如 MySQL、PostgreSQL、…...
C++学习
C对C语言的加强 1.命名空间(namespace) 为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C库时,这些标识符的命名发送冲突。 标准C引入了关键字namespace,可以更好地控制标识符的作用域。 st…...
Linux Mem -- Where the mte store and check in the real hardware platform
目录 1 前言 2 MTE tag分类 3 Address tag 4 Memory tag 5 Tag Check 6 Cortex-A710 和 CI-700 系统示例: 1 前言 ARM的MTE允许分配、设置、比较一个 4bit的allocation tag 为16字节粒度的物理地址。当对MTE有一定了解后,应该会产生如下疑问&#…...
老牌软件,如今依旧坚挺
今天给大家介绍一个非常好用的老牌电脑清理软件,这个软件好多年之前就有人使用了。 今天找出来之后,发现还是那么的好用,功能非常强大。 Red Button 电脑清理软件 软件是绿色版,无需安装,打开这个图标就能直接使用了…...
springboot整合modbus实现通讯
springboot整合modbus4j实现tcp通讯 前言 本文基于springboot和modbus4j进行简单封装,达到开箱即用的目的,目前本方案仅实现了tcp通讯。代码会放在最后,按照使用方法操作后就可以直接使用 介绍 在使用本方案之前,有必要对modb…...