【Augmented Reality】增强现实中的光学透射式头盔显示器的标定初步

      2016年被称为虚拟现实技术元年,然而我们要说的是与之同时发展的增强现实技术(Augmented Reality)。增强现实与虚拟现实有着显著的不同。虚拟现实是通过计算机图形技术、三维跟踪技术和各种显示技术等为用户构建完全虚拟的沉浸式环境;而增强现实是在现实环境的基础上叠加虚拟的信息,这些虚拟信息也就是为了“增强”现实环境而人为加上去的。简单来说,虚拟现实全是虚拟的,增强现实既有虚拟又有真实。

      本文旨在介绍增强现实技术和应用,重点是分享笔者在学习和工作中遇到的一些问题和总结的一些经验,所以在介绍中会有不全面的论述,也免不了有一些疏漏,但是一定尽力做到最好。下面就进入主题,讲解一下增强现实中的光学透射式头盔显示器的标定技术。

 

一、什么是光学透射式头盔显示器,又是怎样应用到增强现实中呢?

      头盔显示器,也叫头戴式显示器,顾名思义就是一种戴在用户头上使用的显示器。它的主要部件就是一个放置在人眼前面的显示装置,此外还有用于将显示器固定在头上的固定结构等。头盔显示器主要分为两大类,沉浸式头盔和透射式头盔。沉浸式头盔主要是虚拟现实头盔,用于构建沉浸式的虚拟现实环境,典型的设备如Oculus Rift、HTC Vive、暴风魔镜等。透射式头盔主要用于增强现实,也是我们要重点讲到的一类设备,典型的如Hololens、Magic Leap等等。在透射式头盔中,又分为两个小类,视频透射式头盔和光学透射式头盔。视频透射式头盔显示器是利用摄像头捕获场景的视频流,并将虚拟的信息叠加到视频流中,最后把加工后的视频流逐帧渲染在显示器上供用户观看。这种显示器就如同手机一样。而光学透射式头盔显示器(有的地方叫“光学透视型头盔显示器”,英文为“optical see-through head-mounted display”),有一个半透半反的光学系统,它一方面像普通眼镜一样可以透过外部的环境光,使用户可以看到眼前的真实世界,另一方面可以反射来自微型显示器的图像,叠加到人的视野中。

      上图摘自一篇介绍光学透射式头盔显示器的论文,大致能表明这类显示器的基本结构。当然这款是自由曲面棱镜组成的,还有其他的类型如光波导镜片等。

之所以要应用光学透射式头盔显示器,是因为它可以将虚拟信息直接叠加到真实环境中,给人更加自然的交互体验,而不需要让人去看加工后的视频,如同看电视一般乏味无新意。

      理想情况下,佩戴上头盔显示器后应该看到如下的效果。

 

      上图截图自电影《钢铁侠》,主人公可以看到虚拟的物体叠加在空中。我们先不管电影中的效果可以用哪些现实手段实现(全息投影也好,真三维光学全息也罢),我们只考虑如何采用光学透射式增强现实来实现它。当然唯一不同的是,采用光学透射式头盔显示器以后,我们必须佩戴它才能从用户视角看到这些炫酷的效果。实际看到的可能是下面这样子的。该图选自一篇做人机交互的论文。

二、光学透射式头盔显示器的标定原理

(1)所谓标定,到底是标定什么,怎么进行?

      首先,必须明确几个用到的坐标系统。世界坐标系使用W表示,跟踪摄像机(跟踪摄像机用来建立本系统与外部环境之间的联系)坐标系使用C表示,头盔显示器的像面是一个2D的平面,采用S表示其平面坐标系,人眼与头盔显示器的像面组成一个针孔模型的虚拟摄像机,坐标系使用V表示。如果读者没有计算机视觉基础,可以参考清华大学出版社出版的《计算机视觉:算法与应用》一书,或者自行百度,也可搜索到相关介绍。针孔模型介绍可参考博文

http://blog.csdn.net/lixianjun913/article/details/10032019

      标定主要是通过一些测量和计算,来确定一些参数。这里主要标定的是跟踪摄像机坐标系到头盔显示器屏幕坐标系的映射关系。

假设空间中的任意一点P,在世界坐标系W中的坐标为Pw,在跟踪摄像机坐标系下的坐标为Pc,通过屏幕看该点,该点在屏幕上的坐标为Ps,则得到两个等式


      其中,Pw,Pc是三维位置的齐次坐标,因此都是四维向量。Ps是二维位置的齐次坐标,因此是三维向量。每一个出现的R都是3*3的旋转矩阵,每个T都是3*1的平移向量,它是包含3个元素的列向量。K是表示包含人眼的虚拟摄像机的内参数矩阵,是3*3矩阵。令Ps = [u v 1]T,Pc = [xc  yc  zc  1]T,G=[g11  g12  g13  g14 ; g21  g22  g23  g24 ; g31  g32  g33  g34  ],则得到

 

 

      所以我们要标定的就是G。有了G就有了从跟踪摄像机三维坐标系到显示器屏幕二维坐标的映射关系,进而可以在屏幕上对现实中的物体做虚拟信息标注。当然,G可以直接分解成内参数矩阵和旋转、平移矩阵(平移向量看成是n*1的矩阵),这样,我们不仅可以进行文字标注,还可以根据虚拟摄像机和跟踪摄像机之间的空间位置关系,进行三维虚拟物体的叠加。这也就是最后我们看到的在真实世界中叠加一些虚拟的人物、建筑等物体的效果了。

(2)软件怎么写?

      了解了标定原理之后,你也许就迫不及待地要进行实验了。

      其实要想求解上述的G,还是比较容易的。首先观察Ps=G Pc,左边是三维的,右边是四维的,很明显G应当是3*4的矩阵。对于这12个未知数(实际上只有11个独立的,剩余一个是尺度缩放因子,在齐次坐标系统中不影响最终结果),可以由至少6组对应点求解得到。因为每组对应点是可以得到两个独立的方程的。忘了说了,每组对应点指的是某一个头部位姿状态下,P点的跟踪摄像机坐标Pc和屏幕坐标Ps。

      软件只需要获取不同的至少6个头部位姿下的6组对应点即可。在求解时,所有的未知数移动到等式左边,那么右边全是0,直接求解可能得到零解。因此我们对系数矩阵进行奇异值分解。假设取了n组对应点,则只需要把2n*12的矩阵使用matlab的SVD函数进行分解就行了。右奇异矩阵中对应最小特征值的向量就是要求的解。直接拷贝出来就是要求的G。

      具体的程序代码还需要各位读者自己写写看,只有两个步骤哦,第一步读取一系列(不少于6组,建议10组以上)对应点位置坐标,第二步使用matlab的SVD函数进行求解。之后,得到G就能知道任意的三维位置对应的屏幕位置了。这时,你还不能在你想要的位置上叠加想要的虚拟信息吗?

         看看,是不是很简单。其实很多事情都是看上去复杂难解,实则脉络清晰,求解容易。当然了,在实现的过程中还有很多小技巧。相信初次接触的朋友也会遇到很多难题。如果有问题可以在评论中留言进行交流。

       具体的实现过程在下一篇中介绍,地址是:

        http://blog.csdn.net/zzlyw/article/details/53217291

主要参考文献

[1] Tuceryan M, Navab N. Single point active alignment method (SPAAM) for optical see-through HMD calibration for AR[C]// IEEE and ACM International Symposium on Augmented Reality. IEEE, 2000:149.

原文地址:https://www.cnblogs.com/yanhuiqingkong/p/7770096.html