前言
上次我们讲到,我们可以使用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之路上奋斗吧!