【XR】如何提高追踪保真度,确保内向外追踪系统性能

news2024/9/25 11:22:04

Constellation是Oculus研发的追踪系统。日前,负责AR/VR设备输入追踪的Facebook工程经理安德鲁·梅利姆撰文介绍了他们是如何用基于Constellation追踪的控制器来提高交互保真度。具体整理如下:

我们的计算机视觉工程师团队一直在努力为Oculus Quest和Rift S实现高保真的交互。我们已经证明Constellation可以为Oculus Rift提供出色的用户体验,但Quest和Rift S有着完全不同的传感配置,所以我们需要从零开始重新构想。由于将摄像头是嵌入至头显而非摆在外部桌面,所以红外LED的检测和追踪变得更加困难。再加上控制器追踪圆环容易被遮挡或离开头显摄像头视场,问题正在成倍地增加。

通过Oculus Quest和Rift S的最新追踪性能更新,我们解决了内线外追踪系统所固有的众多挑战,尤其是对于控制器而言。所述更新与Rift S的1.39版本和Quest的v7版本一起发布。在接下来的博文中,我们将深入探索如何提高追踪保真度,并确保内向外追踪系统能够满足VR内容的需求。

1. 挑战

驱动Constellation追踪的关键是对摄像头图像中的红外LED的检测和三角测量,而它们有着极短的曝光时间。对于每个控制器,追踪系统都会尝试求解3D姿态,即3D位置与方向。在每一帧内,系统执行以下步骤:

  1. 搜索摄像头图像中的红外光量。
  2. 确定图像投影与基础控制器3D模型之间的匹配策略。
  3. 计算控制器相对于头显的3D姿态并融合惯性数据。

为了支持系统获取足够数量的约束条件来求解位置和方向,我们需要最低数量的观察值。反过来,我们在追踪Quest控制器时遇到的其中一个主要问题是,任何给定摄像头图像中可见的LED数量都很少。由于较低的摄像头分辨率和各种其他限制,Quest控制器搭载的LED数量较少(15个,而Rift Touch控制器有22个)。下面这个事实令事情变得更加复杂:多个摄像头一次可以看到的控制器姿态很少,而Rift则通常一次可由两个或三个摄像头感知控制器,具体取决于你的设置。

在本文中,我们将重点介绍如何改进检测和分割算法,从而构成Constellatio追踪管道的第一步。在检测到的blob中获得更高的精度,减少误报,并扩大检测算法的工作范围是改善控制器追踪的关键一步。

2. 全新的blob分割

Blob分割是一个相对简单的概念。对于每个图像,我们要标识亮像素(blob)的连续区块,从而确定LED的潜在位置。但这隐藏了一个非常具有挑战性的技术问题:如何识别与LED相对应的blob(真报),并忽略与场景中其他明亮元素相对应的blob(误报)。

如果我们简单地获取红外光的每个点,将控制器放置在具有许多光源或反射的环境中将变得非常困难。对于知道要拒绝和忽略哪些光源,这与知道要用于求解控制器姿态的光源一样重要。所以,大量的边缘情况,约束和试探法将用于帮助减少不太可能来自控制器的blob。

改善追踪的第一步始于LED blob分割算法的质量。这涵盖了三个主要技术问题:

  1. 能够检测合并到单个双态blob中的LED blob,而不是将它们丢弃。
  2. 扩展blob检测以支持多个图像金字塔,从而确保我们能够追踪近距离的blob。
  3. 允许检测器检测到模糊的blob(距离摄像头很远的位置)

当用户以一臂距离握持控制器时,靠近用户的LED可能会显示为一个连续blob,从而造成LED位置的错误检测。错误计算的LED位置会大大增加姿态估计的误差,并导致糟糕的追踪效果,或者是追踪丢失。通过利用围绕计算的新启发式方法blob像素与围绕所述区域计算的边界框的大小之比,我们发现我们可以非常准确地检测到是否存在两个与摄像头成高入射角的不同blob。这为检测许多常见的姿态提供了帮助。

如下图所示,图像是从远方位置捕获,未精确检测到下方的LED,而且来自上方两个LED合并为一个blob(单个红色质心)。使用我们的新方法,我们可以准确地检测每个控制器的三个blob,并在这种极端情况下提供追踪支持。

我们解决的另一个问题是检测到的blob大小差异很大,这是Oculus Insight内向外追踪系统面临的新挑战。当以一臂距离握持控制器时,LED的投射可能只跨越几个像素,而当紧挨着摄像头放置时,LED的投射可能会多达几十个像素。系统最初会拒绝太大或太小的blob。尽管最初的效果符合预期,但由于检测到的blob大小不同,这个解决方案带来了更多的挑战。

在这里插入图片描述

上面是改进的近距离分割方法的示例(包括来自桌面的反射)。在右侧,我们采用了新的分割代码,从而可以准确地检测到较大的blob,并且不会检测到错误的blob。

我们的解决方案是实现图像金字塔,这是一种众所周知的缩放图像信息的方法,但它可能是计算量非常大的操作。对图像进行下采样可以支持我们用特征检测器运行相同的摄像头帧,从而提供比例不变性,并允许我们检测距离头显更近的blob。不是每一帧都计算图像金字塔,甚至不是每个摄像头都计算图像金字塔,而是根据估计的控制器姿态和启发式方法来决定何时计算金字塔。这为系统带来了灵活性。当以高置信度知晓控制器位置时,系统可以减少计算量,并在位置未知时提升计算以搜索控制器。

  1. 好好利用这些blob

检测这些新blob是解决追踪挑战的第一步,并且是为Quest和Rift S改进追踪的许多步骤中的第一步。在下一篇博文中,我将介绍如何使用这些新数据来解决将blob映射到LED,以及使用投影几何来求解位置和方向的有趣问题。

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

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

相关文章

【再学Tensorflow2】TensorFlow2的模型训练组件(1)

TensorFlow2的模型训练组件(1)数据管道构建数据通道应用数据转换提升管道性能特征列特征列用法简介特征列使用示例激活函数常用激活函数激活函数使用示例Tensorflow模型中的层内置的层自定义模型中的层参考资料Tensorflow中与模型训练相关的组件主要包括…

图像采样与量化

数字图像有两个重要属性:空间位置(x,y)以及响应值I(x,y)。数字图像中像素的空间位置及响应值都是离散值,传感器输出连续电压信号。为了产生数字图像,需要把连续的数据转换为离散的数字化形式。采用的方式是图像量化与采样。 图像采样 图像量化…

【数据结构】(初阶):二叉搜索树

​ ✨前言✨ 🎓作者:【 教主 】 📜文章推荐: ☕博主水平有限,如有错误,恳请斧正。 📌机会总是留给有准备的人,越努力,越幸运! 💦导航助手&#x…

Docker+Selenium Grid运行UI自动化

简介 使用Selenium Grid可以分布式运行UI自动化测试,可以同时启动多个不同的浏览器,也可以同时启动同一个浏览器的多个session。这里使用Docker Compose来同时启动不同浏览器的容器和Selenium Grid,只需一条命令就把自动化运行环境部署好了。…

verilog仿真技巧与bug集合

文章目录赋值语句想法一些建议时钟信号关于异步fifo写入数据时wp1,读出数据时rp1一些自己的bug关于操作符&关于if-else关于modelsim使用1.初学者不建议在设计文件中加入仿真语句; 2.初学者也不会在tb里使用类似always一样的设计。 对于1.因为把仿真…

国产RISC-V处理器“黑马”跑分曝光!超过多数国内主流高性能处理器!

来源企业投稿 2010年,开源、开放、精简的RISC-V架构诞生。虽然距今仅有12年,但RISC-V迎来了众多玩家的积极参与,其技术、生态、应用都快速发展。在许多秉持匠心的技术人员的耕耘下,RISC-V也早已从传统强项物联网走出,…

error: ‘uint8_t’,‘uint16_t’ ,‘uint32_t’ does not name a type

文章目录1、报错error: ‘uint8_t’,‘uint16_t’ ,‘uint32_t’ does not name a type2、解决办法3、uint8_t此类数据类型补充4、码字不易,点点赞1、报错error: ‘uint8_t’,‘uint16_t’ ,‘uint32_t’ does not name a type 在网络编程PING程序时遇到的小bug&am…

【BUUCTF】MISC(第二页wp)

文章目录被劫持的神秘礼物刷新过的图片[BJDCTF2020]认真你就输了[BJDCTF2020]藏藏藏被偷走的文件snake[GXYCTF2019]佛系青年[BJDCTF2020]你猜我是个啥秘密文件菜刀666[BJDCTF2020]just_a_rar[BJDCTF2020]鸡你太美[BJDCTF2020]一叶障目[SWPU2019]神奇的二维码梅花香之苦寒来[BJD…

day02-Java基础语法

day02 - Java基础语法 1 类型转换 在Java中,一些数据类型之间是可以相互转换的。分为两种情况:自动类型转换和强制类型转换。 1.1 隐式转换(理解) ​ 把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的&am…

外贸小白适合哪种邮箱?

除了一些企业指定的邮箱,大多数外贸人,尤其是小白的外贸人,都希望选择最合适的邮箱,赢在起跑线上。判断邮箱质量的两个主要因素是投递率和安全性。米贸搜的排列如下: 公共个人邮箱 此时常见的个人邮箱有国外的gmail、hotmail、雅…

2023 年软件开发人员可以学习的 10 个框架

开发者您好,我们现在处于 2023 年的第一周,你们中的许多人可能已经制定了 2023 年要学习什么的目标,但如果您还没有,那么您来对地方了。 早些时候,我分享了成为Java 开发人员、DevOps 工程师、React 开发人员和Web 开…

联合分析案全流程分析

联合分析(conjoint analysis)是一种研究消费者产品选择偏好情况的多元统计分析方法。比如消费者对于手机产品的偏好,对于电脑产品的偏好,也或者消费者对于汽车产品的偏好情况等。联合分析中涉及几个专业术语名词,分别如下所述: 联…

基于深度学习下的稳定学习究竟是什么?因果学习?迁移学习?之一

机器学习 | 稳定学习 | DGBR 深度学习 | 迁移学习 | 因果学习 众所周知,深度学习研究是机器学习领域中一个重要研究方向,主要采用数据分析、数据挖掘、高性能计算等技术,其对服务器的要求极其严格,传统的风冷散热方式已经不足以满…

C++---智能指针

目录 1. 为什么需要智能指针? 2. 内存泄漏 2.1 什么是内存泄漏,内存泄漏的危害 2.2 内存泄漏分类 2.4如何避免内存泄漏 3.智能指针的使用及原理 3.1 RAII 3.2 智能指针的原理 3.3 std::auto_ptr 3.4 std::unique_ptr 3.5 std::shared_ptr 3.6…

使用RMAN传输数据_创建可传输的表空间集(Creating Transportable Tablespace Sets)

传输数据比对相同的数据执行export/import或unload/load操作更快。因为对于用户定义的表空间,数据文件包含所有拷贝到目标位置的实际数据,你使用Data Pump只传输数据库对象的元数据到新数据库。 本章阐述如何使用RMAN通过还原备份来创建可传输的表空间集…

Dockfile是什么

目录 1. Dockfile是什么 2. Dockerfile的基本组成 2.1 FROM 2.2 MAINTAINER 2.3 RUN 2.4 COPY 2.5 ADD 2.6 EXPOSE 2.7 WORKDIR 2.8 ONBUILD 2.9 USER 2.10 VOLUME 2.11 CMD 2.12 ENTRYPOINT 3. dockerfile示例 3.1 准备 3.2 将该目录上传至linux 3.3 构建镜像…

2022年「博客之星」参赛博主:一个处女座的测试

我正在参加年度博客之星评选,请大家帮我投票打分,您的每一分都是对我的支持与鼓励。 五星必回,诚信互评,(如果)今日已满,明天必回,言出必行,感谢支持! 我正在…

【深度探讨】数据存储进化论,区块链才是未来

发表时间:2022年5月23日 信息来源:bsvblockchain.org 需要一个适于处理这种日渐普及的资源的基础设施。 2022年2月,在沙特愿景2030区块链峰会上,BSV区块链协会创始主席Jimmy Nguyen就数据的价值这一话题发表了一场令人叹为观止的…

nodejs+vue+element+eachers构建开源项目大型连续剧(2)安装mysql数据库,在nodejs服务器中操作数据库数据

太长时间没更新了,然后,理由是什么呢?是因为阳了,真没想到,吃嘛嘛香的我忽然阳了,果然阳的初期症状就是嘴硬。然后,开始我们连续剧的第二集。 一、进行mysql的安装 学习第一步,从安…

[极客大挑战 2019]BuyFlag1(BUUCTF)

前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 题目描述 解题工具: 我爱用edit this cookie2和hackerbar, 当然也可以burpsuite和fiddler抓包 解题过程: 看到他说flag要100000000 MONEY, 还要是Cuits students, …