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,以及使用投影几何来求解位置和方向的有趣问题。

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

  1. 【XR】为挑战性环境优化6DoF控制器追踪

    Oculus分享:为挑战性环境优化6DoF控制器追踪 尤其是针对具有挑战性的追踪环境 映维网曾在九月和十一月分享了关于Oculus Constellation追踪系统的相关细节,其中负责AR/VR设备 ...

  2. 理解C语言刁钻定义语句的斩麻快刀:自内向外读

    理解C语言刁钻定义语句的斩麻快刀:自内向外读 今天在CSDN论坛见到 A_Zhao 发表于2012-06-18 06:41:16<关于C语言声明.指针.数组.函数.typedef...>引 ...

  3. 路由器从外向内访问(端口转发)及从内向外访问(NAT)的配置

    路由器从外向内访问(端口转发)及从内向外访问(NAT)的配置 描述需求 最近工作上有一个需求,大致意思就是解决路由器内外访问的问题.这个问题可以分成两部分,一个是外部设备(如服务器)能主动访问路由器局 ...

  4. 压缩感知重构算法之基追踪(Basis Pursuit, BP).基追踪并不能称为一个具体的算法,而是一种最优化准则,可以有很多实现方式,我认为指的是L0可以变为L1的准则

    基追踪(basis pursuit)算法是一种用来求解未知参量L1范数最小化的等式约束问题的算法. 基追踪是通常在信号处理中使用的一种对已知系数稀疏化的手段.将优化问题中的L0范数转化为L1范数的求解 ...

  5. python轨迹追踪、全链路日志追踪trace_id实现

    python轨迹追踪.全链路日志追踪trace_id实现 非链路日志(普通日志) 我收到一个请求,参数是 我收到一个请求,参数是 我收到一个请求,参数是 我收到一个请求,参数是 我收到一个请求,参数是 ...

  6. 反浏览器指纹追踪(反浏览器指纹追踪技术)

    浏览器指纹追踪是一种在网络上追踪用户信息的方法.而在大数据时代,更多的人不希望自己的信息被过多收集.为了反制浏览器指纹追踪行为,反浏览器追踪技术也在不断发展. 什么是反浏览器指纹追踪技术? 浏览器指纹 ...

  7. 计算机视觉(视频追踪检测分类、监控追踪)常用测试数据集

    计算机视觉(视频追踪检测分类.监控追踪)常用测试数据集 (1).WallFlower dataset [链接]: 用于评价背景建模算法的好坏, Ground-truth foreground prov ...

  8. 匹配追踪MP和正交匹配追踪OMP算法

    匹配追踪MP和正交匹配追踪OMP算法 http://blog.csdn.net/wwf_lightning/article/details/70142985 http://blog.csdn.net/ ...

  9. html实现从内向外渐变色,CSS3 由内到外(放射性)渐变

    记得有个师兄在一个分享讲座中提到了由内到外渐变,为了实现这种效果,就用图片去做背景,假如加载得太多图片会使网页加载得很慢,所以有必要跟boss"吵架"!那时候我就觉得好像有点不科学 ...

最新文章

  1. webpack入门之简单例子跑起来
  2. HDU2085:核反应堆(递推)
  3. vue中的组件导航守卫,个人理解
  4. android 的 sp 智能指针用法介绍 sp wp
  5. cv2 inrange灰度图_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...
  6. Winform里面的缓存,MemoryCache使用
  7. Eclipse中配置CORBA环境
  8. php foreach 单箭头,PHP Foreach循环具有单个元素
  9. 去掉windows10“更新并关机”
  10. linux pci带宽,Linux查看PCIe版本及速率
  11. Oracle 中 varchar2 和 mysql 中 varchar到底能存多少个汉字?
  12. 嵌入式和单片机的区别是什么
  13. 猿创征文|我命由我,不由天
  14. HIDS逐渐的成为主流
  15. 一度智信|拼多多客服售后须知
  16. 将Shapefile数据导入Winbugs的方法
  17. 基于肌肉骨骼模型的预测仿真
  18. 使用 GPSD 快速读取 GPS 信息
  19. IDEA全屏代码后左侧有很多空白解决方法
  20. 时间间隔频率计数器及其主要参数

热门文章

  1. 利用baidu的api和python的GUI实现通用文字识别功能
  2. 你还在@微信官方?用 Python 随意生成你想要的微信头像!
  3. 【QT】添加图片资源并使用QImage加载图片显示
  4. Spring进阶(五):Spring事务管理(详解+实例)
  5. 细谈静态类和实例类的区别
  6. 最最简单的SQL手工注入教学,我奶奶都会
  7. Java实现一个分数类
  8. php 抽奖 不忘初芯,你的“热爱”还在吗?不忘初芯,不负热爱!
  9. 65 页的 PPT演示,看看埃森哲是如何系统化做好数据分析的
  10. js 获取url大全