前言

上次我们讲到,我们可以使用Unity3D编写程序标定摄像头和HMD之间的映射关系,并得到一个3*4的矩阵。通过这个矩阵我们就可以知道任意一个世界坐标系中的点在HMD屏幕上的位置。但是,仅仅这样我们只能标记一些信息,或者对一些特定的物体进行框选,还不能叠加任意模型到指定世界位置。

本文将会基于上一篇文章的结果,进一步分析怎样将虚拟的3D模型叠加到三维世界当中。利用前面已得到的结果,只能实现下面左图所示的使用标签来标记一些物体,因为这只需要知道某个物体对应的屏幕上的位置就可以。但是如果想要像Hololens一样在空间中叠加虚拟3D物体并进行交互,就需要一些特别的处理了。下面我们就一起来看看到底怎样实现吧。

如果对本文所介绍的东西还没有了解,可以参考前面的两篇文章:

(1)《增强现实中的光学透射式头盔显示器的标定初步》

(2)《增强现实中的光学透射式头盔显示器的标定进阶》

1 基本理论

在Unity3D的世界坐标空间中,我们可以轻松地使用Vuforia SDK来对进行标志板跟踪,这样场景中会有一个ARCamera,它的位置是实时变化的,这就是我们的跟踪摄像机的位姿。我们将人眼与HMD组成的结构等效为一个虚拟的摄像机,那么虚拟摄像机与跟踪摄像机之间的位置关系是固定的,并且我们前面已经得到了跟踪摄像机坐标系中的坐标到虚拟摄像机屏幕坐标的映射关系。我们需要通过这个关系来求解出跟踪摄像机和虚拟摄像机之间的R和T。

上次,我们已经得到存储在ProjectionMatrix.txt中的12个数字。实际上那就是投影矩阵按照行排列的,恢复成矩阵的形式是一个3*4的矩阵,即target = [a1,a2,a3,a4; a5,a6,a7,a8; a9,a10,a11,a12],其中的分号表示换行。使用QR分解对前三列组成的3*3矩阵数据进行分解,可以得到虚拟摄像机内参数K和R。再考虑第四列数据,则T也可以计算出来。即实际的关系是

target = K[R|T]

好了,到这里K和R、T都解出来了。下面就是这些数据的使用了。

2 基本实现

我们先来分析一下要做什么。首先我们已经计算出了虚拟摄像机相对于跟踪摄像机的R、T,以及虚拟摄像机自己的内参数。那么我们需要做两件事:(1)根据R和T对虚拟摄像机进行定位;(2)根据K来改变虚拟摄像机的内参数,使得虚拟摄像机的成像特征与人眼一致。

2.1 对虚拟摄像机定位

我们已经得到的R和T,实际上符合下列关系:

其中,Pv和Pc分别是选定点P在虚拟摄像机坐标系和跟踪摄像机坐标系下的坐标值。因此,虚拟摄像机坐标系在跟踪摄像机坐标系下的坐标位置是-R逆*T,而姿态可以通过R的逆来确定。这样,在Unity3D中,将跟踪摄像机作为父物体,代表人眼-HMD模型的虚拟摄像机作为子物体,就可以按照上述的方法进行定位了。跟踪摄像机相对于世界坐标系的位置是由Vuforia SDK 等外部插件来完成的,而虚拟摄像机就用上面标定出来的R和T来确定。

2.2 设置虚拟摄像机的投影矩阵

我们所计算出的K,是用来设置Unity3D中的摄像机组件参数的。在Unity3D中,摄像机默认的投影矩阵是一个4*4的矩阵,需要与我们求解出的K对应起来。如果不做这一步,即使你的R和T都设置正确,在视野中看到的虚拟物体还是会随着视角的变化而飘动,这就表明注册过程是有错误的。很明显,这是由于所使用的虚拟摄像机的默认参数和我们人眼的参数不一致导致的。我们要做的就是通过已经求解的K来对Unity3D的摄像机投影矩阵进行修改,以使得这个虚拟摄像机可以用来模拟人的eye-HMD结构。

具体的内参数到Unity3D摄像机投影矩阵的换算方法,可以参考赫恩 (Donald Hearn)的《计算机图形学》一书的三维观察相关章节。Unity3D投影矩阵可以参考下面的地址:

https://docs.unity3d.com/ScriptReference/Camera-projectionMatrix.html

小结

至此,我们已经梳理了光学透射式头盔显示器(或者叫光学透视型头盔显示器、光学透视型智能眼镜等)的基本标定流程和方法,你是否也了解了一个大概了呢?核心的映射矩阵标定方法已经在前面的文章中给出了源代码,可以方便自己验证。本文实际上是前面的一个延伸,在已经实现了基本标定的基础上,进行eye-HMD虚拟摄像机位姿的解算,以便进行任意模型的叠加。这在视频透射增强现实中看似很简单,但是到了光学透射增强现实中,就往往多了好多复杂的步骤,因为光学透射最终是直接服务于人眼的观察。

光学透射式标定方法,在大约十几年前就已经有了雏形,后来的研究者也都是在此基础上进行延伸和扩展,引入更稳定的跟踪方式或者更新的传感器组合形式等等。作为一项比较基础的技术,标定技术在AR应用中扮演着重要的角色。

从今以后与标定相关的研究方向,笔者认为大致分为以下几个方向:

(1)简化标定步骤,增加传统标定方法的稳定性和通用性;

(2)将HMD标定与其他传感器模块相结合,例如手眼协同标定;

(3)细化标定方案,针对层出不穷的新型系统,研究个性化标定方法;

(4)实时在线标定,保证长时间使用设备的配准精度。

希望标定技术可以在今后的一段时间获得更大发展,以迎合当今社会最新兴起的AR浪潮,为增强现实产业发展提供有力的支撑。

让我们一起在AR之路上奋斗吧!

转载于:https://www.cnblogs.com/yanhuiqingkong/p/7770081.html

【Augmented Reality】增强现实中的光学透射式头盔显示器的标定深入相关推荐

  1. 增强现实中的光学透射式头盔显示器的标定初步

    2016年被称为虚拟现实技术元年,然而我们要说的是与之同时发展的增强现实技术(Augmented Reality).增强现实与虚拟现实有着显著的不同.虚拟现实是通过计算机图形技术.三维跟踪技术和各种显 ...

  2. AR(Augmented Reality)学习

    AR(Augmented Reality)学习 AR硬件概览 AR硬件发展的驱动力源于计算机处理器.显示技术.传感器.移动网络速率.电池续航等多个领域的技术进步. 目前能够确定的AR硬件类型有以下几种 ...

  3. Human Interface Guidelines - Augmented Reality

    Augmented reality 增强现实 Augmented reality (or AR) lets you deliver immersive, engaging experiences th ...

  4. Unity增强现实初学者指南视频教程 A Beginner’s Guide to Augmented Reality with Unity

    Unity增强现实初学者指南视频教程 A Beginner's Guide to Augmented Reality with Unity MP4 |视频:h264,1280×720 (部分1920X ...

  5. 增强现实(Augmented Reality)浅谈

    http://www.86ar.com/?p=1693 随着互联网的不断发展,各种需求不断的被发现和改善,Yahoo.Google.Youtube,Facebook.Twitter等的出现掀起一次又一 ...

  6. AR增强现实 Augmented Reality

    增强现实(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这种技术最早于1990 ...

  7. 增强现实(AR:Augmented Reality ) 之介绍及应用

    一.什么是增强现实? 当你想知道今天的天气情况的时候,还是在听新闻联播之后的天气预报吗?当你想知道哪辆公车可以回家的时候,还是要挨个公交站牌去找寻么?当你想认识一个漂亮mm的时候,还是要鼓起勇气跑上前 ...

  8. 论文阅读(4)What, How, and Why are Visual Assets used in Industrial Augmented Reality?

    A Systematic Review and Classification in Maintenance, Assembly, and Training (from1997 to 2019) Abs ...

  9. ARVE: Augmented Reality Applications in Vehicle to Edge Networks

    ARVE:车辆到边缘网中的增强现实应用 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 笔者翻译了该论文.由于时间仓促 ...

最新文章

  1. 全国大学生智能车智能汽车竞赛车模检查规范
  2. 为朋友写的一个投票功能的提交代码
  3. 地球自转减速影响世界时 格林尼治时间或成历史
  4. 深度学习核心技术精讲100篇(六十六)- 基于LXD的GPU算力虚拟化(附解决方案代码)
  5. word插入参考文献、目录及公式对齐方法
  6. Lunx运维监控_shark巨菜_基础篇
  7. bugfix:MySQL内存使用率无限增长以及kill手法
  8. 吴恩达【深度学习工程师】 04.卷积神经网络 第四周特殊应用(2)神经风格转换...
  9. Linux手机适配,nginx同时适配PC版和手机移动版
  10. linux中使用u盘和光驱的命令_Linux学习之挂载光盘和U盘(六)
  11. 这有一个机器人,粉刷本领强
  12. java中的比较运算符_Java基础---Java中的比较运算符(十三)
  13. apache kafkac系列lient发展-java
  14. 《业务需求说明书》检查单 zz
  15. 阿里程序员常用的15款开发者工具
  16. css3学习手册思维导图
  17. z世代消费力白皮书_谁在影响2.6亿年轻人的消费?Z世代消费力白皮书2019|企鹅智库...
  18. Windows 下利用cWrsync同步
  19. 信数金服:物联网案例之工业物联网中故障预警与风险管理的规范性分析
  20. HUAWEI Sound Joy首发体验,独具一格的华为音质究竟如何呢?

热门文章

  1. 【Hive】压缩格式
  2. 警告: 程序集绑定日志记录被关闭。解决方法
  3. 【rabbitmq】Queueingconsumer被废止后老代码如何做的解决方案
  4. 在win10环境中安装xilinx vivado IDE时出现的问题及解决方法
  5. 让读者快速了解RocketMQ消息中间件需要解决哪些问题
  6. 评“CPQuery, 解决拼接SQL的新方法”
  7. 通过整数索引选择一行熊猫系列/数据框
  8. 我们可以拥有多少级指针?
  9. Java:转换列表 String 到一个字符串
  10. 客户读取文件服务器上文件的过程,java从服务器上读取文件