基于双目视觉的增强现实系统设计与实现
2018-12-15郭子兴张晓林
郭子兴 ,张晓林 ,高 岩
(1.中国科学院上海微系统与信息技术研究所,上海200050;2.中国科学院大学北京100049;3.上海科技大学信息学院,上海201210)
增强现实利用图像传感器和计算设备感知真实环境,并在真实环境中添加虚拟内容,增强用户对现实世界的理解和体验。它主要包括3个特征:虚拟和真实内容融合、实时交互和三维注册。受益于计算能力的提高和计算机视觉、图形学、光学等学科的快速发展,增强现实在工业[1]、教育[2]、军事[3]、医疗[4]等领域取得了重要的进展。
按照所依靠的硬件平台分类,增强现实系统大体分为光学透视式显示系统[5]和视频透视式显示系统。光学透视式显示系统利用半反射镜结构,真实世界通过镜片透射被用户感知,虚拟世界渲染结果被投影到镜片上,通过反射被用户感知。代表产品有微软的HoloLens,这种结构的关键缺点在于虚拟视场角过小,只有三十多度。视频透视式显示系统利用摄像机捕捉真实世界,然后将渲染得到的虚拟世界图片与之混合,得到增强现实结果。目前主流的系统是基于手机等移动平台的增强现实系统,该系统的缺点在于单目结构无法提供真实的尺度信息,并且无法使用户体验立体内容。
面向不同的应用场景,增强现实系统可以分为基于特殊标记的系统和基于自然特征的系统。基于特殊标记的系统利用人工设计的图形标记或图像模板,计算相机的运动轨迹,然后叠加相应的虚拟内容。例如高通Vuforia引擎,该类系统的主要问题在于人工标记必须在相机视野内,极大的限制了相机的运动范围,应用场景小。基于自然特征的系统通过追踪图像中的特征,计算相机的运动轨迹。该系统应用场景广,可在较大空间实现增强现实效果。该系统的缺点在于初始化复杂,没有真实的尺度信息。
针对上述问题,文中设计了一种基于双目相机的增强现实系统。该系统利用双目相机采集真实世界图像并通过图像处理算法感知真实世界的平面、深度等信息,利用双目视觉里程计追踪相机运动,叠加虚拟双目相机渲染得到的虚拟图像,最后将合成的左右图分别传入头戴式3D眼镜的左右屏幕,得到一个视场角大、运动范围广、具有立体信息的增强现实系统。
1 系统框架
系统框架如图1所示。硬件上采用ZED双目相机采集真实世界,其参数如表1所示。为了保证虚拟和真实世界的几何一致性,虚拟双目相机的参数与真实相机的参数设为相等。算法上采用自主设计的基于特征点的平面检测算法,自动检测自然平面,完成系统的初始化;采用基于双目视觉的立体匹配算法[6],获取真实场景的深度信息,实现真实和虚拟世界相互遮挡的功能;采用基于特征点的定位算法[7],追踪真实相机的运动,实现真实和虚拟世界的配准。渲染时,利用泊松分布[8]进行天空盒光源采样,利用冯氏光照模型计算像素值,利用OpenGL加速。
图1 系统整体架构图
表1 双目相机参数表
2 三维注册
三维注册是将虚拟世界中的物体转换到真实世界空间中,形成统一的混合空间的过程,如图2所示。
图2 虚拟物体注册示意图
设在真实世界坐标系OXYZ中一个三维点P齐次坐标为(x,y,z,1)T,其对应的真实相机图像坐标系中的齐次像素坐标为p=(u,v,1)T,则有:
其中:
s为比例系数;K为相机内参矩阵,由相机标定得到;R为真实世界坐标系相对于真实相机坐标系的旋转,t为两个坐标系之间的平移。
相应的,设三维点P在虚拟世界坐标系齐次坐标为(xv,yv,zv,1)T,其对应的虚拟相机坐标系中的齐次像素坐标为pv=(uv,vv,1)T,则有:
Rv为虚拟世界坐标系相对于虚拟相机坐标系的旋转,tv为两个坐标系之间的平移。
设虚拟世界坐标系和真实世界坐标系重合,虚拟相机和真实相机重合。则有:
在图形渲染管线中渲染虚拟物体时,物体上所有顶点需要经历局部空间、虚拟世界空间、虚拟相机空间、裁切空间、屏幕空间的转化。其过程由公式(5)描述[9]:
其中Model矩阵表示自定义的虚拟物体在虚拟世界中的位置姿态。view矩阵表示从虚拟世界空间到虚拟相机空间的转换,结合公式(3)可得
projection矩阵表示从虚拟相机空间到裁切空间的转换,和内参矩阵K具有相同的物理意义,但具有不同的表达形式。其关系由公式(7)描述[10]:
其中w和h分别表示图像的宽和高,n和f分别表示近平面和远平面。
3 运动追踪
为了保证虚拟世界和真实世界的几何一致性,需要实时追踪相机在真实世界中的位姿。基于自然特征的追踪算法无需知道场景的先验信息,仅依靠提取和匹配双目图像序列中的特征,利用相邻图像之间的对极几何约束,即可计算相机的位置和姿态信息。
3.1 特征提取与匹配
为了保证在自然场景下特征匹配的准确性,特征点需要具有光照不变性、尺度不变性、旋转不变性等,同时也要兼顾实时性。SIFT、SURF、ORB[11]等特征被广泛应用于图像处理中。对24幅分辨率为640×480的图像提取同样数量的特征点,其算法耗时如表2[11]。
表2 特征提取时间对比
ORB特征提取速度远远超过其他两种特征,并且具有相近的准确度,因而本文选取ORB特征进行追踪。
获取双目图像序列的ORB特征点之后,计算其特征描述子,通过比较特征描述子的汉明距离,确定特征点之间的对应关系。特征匹配包括前后帧匹配和左右帧匹配。前后帧匹配时,需要在全图范围内找出所有匹配之间的最小距离和最大距离。当描述子之间的距离大于两倍的最小距离时,即认为匹配有误,但有时候最小距离非常小,设置一个经验值作为下限[12]。左右帧立体匹配与上述过程相似,但对应的特征匹配点基本处于同一行,因而只在另一幅图同一行和相邻若干行搜索。
3.2 运动估计
如图3所示,设两个连续帧分别为Fk-1和Fk,在两帧中检测到的关键点分别为P={p1,p2,...,pn}和,由3.1中的匹配方法,得到三维点之间的匹配关系。运动估计问题可转换为求解变换R,T使得:
图3 帧间运动估计示意图
由于噪声干扰,等式不可能严格成立,定义每对匹配点的误差项:
然后公式(8)可转化为最小二乘问题:
假设两组点的质心为:
则每组点的去质心坐标为:
优化函数可以转化为:
等价于:
即可得到从FK-1到Fk帧的位姿R,T,从第一帧开始不断的两两计算位姿变换,得到每一帧相对于世界坐标系的位姿。
3.3 局部优化
只依靠相邻两帧得到的位姿误差较大,本文利用数量可调的多帧图像,计算路标点,形成多帧之间的约束,计算当前位姿,提高运动估计的准确性。
图4 局部优化示意图
如图4所示,设从连续L+1帧图像中提取的特征点三角化后为路标点集合{Pi,i=1,2,...n},把路标点Pi在第k帧的观测,即像素坐标,记为zk,i。则观测误差方程为:
h为观测方程,ξk为从第k-1帧到第k帧的相机位姿R,T的李代数表示,ek,i为路标点Pi在第k帧时的观测误差。整体的代价函数为:
利用高斯-牛顿法求解上式,即可得到更准确的相机位姿。
本文算法实验环境为windows10系统,CPU为i7-6700,GPU为GTX 1080。上述视觉定位算法运算速度为29.4 fps,满足实时性要求,运行结果如图5(a)(b)(c)所示。图5为算法运行过程中截取的相机3个不同位置的混合图像。可以看到虚拟物体与真实世界保持几何一致性,说明相机定位精度满足要求。此外,以图5(a)为例,图像左半部图像为真实相机左目和虚拟相机左目图像混合而成,将其输入3D显示头盔左目,同理右半部图像也做相似处理,即可产生立体视觉效果。
4 平面检测和虚实遮挡
4.1 平面检测
图5 运动追踪结果示意图
为了产生更符合用户直观感受的虚拟内容,增强现实系统需要检测真实世界中平面的位置,使虚拟物体与真实平面接触区域自然平滑。系统初始化时,在真实世界平面上建立世界坐标系,需要计算真实相机和平面之间的位置关系。增强现实中的平面检测可以分为两类。基于点云数据的平面拟合方法[13],利用随机采样一致性模型(RANSAC),求具有最多内点的平面。然而由于立体匹配得到的点云数据不可靠,使得求解结果不够准确,并且由于点云数据量大,平面求解耗时长,无法满足实时性。基于特征点的平面检测方法[14],利用前后帧匹配得到的特征点计算平面。但是此方法对初始化操作有一定要求,例如纯旋转会造成初始化失败。
针对上述问题,本文设计了一种利用特征点立体匹配和RANSAC的平面检测方法。首先利用3.1中的方法,匹配同一时刻左右帧的特征点,继而利用平行式双目相机三角化[15]的方法计算特征点的三维坐标,如图6所示。设物理坐标点P(XC,YC,ZC)在左右相机成像点的横坐标分别为ul和ur,视差d=ul-ur,则:
f为相机焦距,T为基线长度。根据投影模型可得:
图6 特征点三角化示意图
计算得到所有特征点的三维坐标值。
采用RANSAC求解稀疏特征点集合中的平面主要步骤如下:
1)随机采样任意3点,计算平面参数。
2)计算所有特征点与该平面的垂直距离,若小于给定阈值,则判定为内点。
3)若内点数大于一定的比例,则终止采样,否则继续采样。
4)重复上述步骤k次,取内点数最大的集合。
5)利用最终得到的内点集合,重新计算平面参数。
设计算所得的平面法向量为n→(nx,ny,nz),截距为d,内点集合为{Si,i=1,2,...n}。计算内点集合的中心位置作为世界坐标系原点O(Ox,Oy,Oz),计算公式为:
将平面法向量n→设为世界坐标系的z轴,记为。计算内点集合中距离平面最近的点P,则令。则世界坐标系和真实相机之间的变换为:
利用Tcw即可将虚拟物体注册到真实世界中的平面上。
以虚实双目相机的左目为例,结果示意图如图7所示,算法对比如表3所示。算法先检测平面参数,然后利用得到的平面参数渲染虚拟平面并自动注册虚拟物体,如图7深色平面所示,该结果表明,两种方法计算得到的平面参数都比较准确。表3表明两种方法得到的平面参数相近,但基于特征点的平面检测算法速度超过了基于点云的平面检测算法。
图7 平面检测效果图
表3 平面检测算法对比
4.2 虚实遮挡
在混合空间中,理想状态虚拟物体和实际物体应当遵循正确的前后遮挡关系。然而在当前增强现实系统中,一般是直接把虚拟图像叠加到真实图像上。当虚拟物体应当被真实物体遮挡时,上述处理方法会造成视觉感知错乱。文献[16]采用三维重建方法,通过预先对场景进行几何建模解决遮挡问题。然而该方法操作复杂并且只适用于静态场景。本文选取半全局匹配(Semi-global Matching,SGM)方法[6],通过实时计算真实场景的深度图,处理动态场景虚实遮挡问题。
SGM方法是介于局部和全局算法之间的立体匹配算法,给定校正后的左右图,基于互信息计算得到每个像素的匹配代价,然后借助动态规划进行代价聚合。算法设计的全局能量函数,综合了邻域点的匹配代价和平滑性约束。同时为了抑制单独某个方向的拖尾问题,算法将多个方向的能量函数求平均。最后对得到的视差图进行左右一致性检验和后处理,得到最终的视差图。该算法可以通过并行计算进一步提升速度,满足实时性需求。
利用公式(18),可以将SGM算法得到的视差图转化为真实世界深度图。然后把深度图作为纹理,传入图形渲染管线片段着色器。渲染管线中的深度缓冲区的值是非线性的,设为D,则利用公式(22)将其线性化:
其中f为远平面,n为近平面,z为线性深度值。比较z和真实世界深度值,只保留z小于真实世界深度值的片段,最终实现虚拟和现实物体的正确遮挡。
以虚实双目相机的左目为例,结果如图8所示,图8(a)为利用SGM算法得到的真实世界相对于真实相机左目的深度图,速度为109 fps。图8(b)为利用公式(22)得到的虚拟世界相对于虚拟相机左目的深度图,图8(c)为处理遮挡关系后的结果,效果良好。图8(d)为不进行遮挡处理得到的结果,不进行遮挡处理会造成用户视觉感知混乱,影响体验。
图8 虚实遮挡示意图
5 结 论
文中设计的双目增强现实系统完成了虚拟物体三维注册、平面检测和虚实遮挡功能。相比于当前主流的增强现实系统,本系统功能更加完善。基于双目的平面检测方法,使系统初始化快速而可靠。基于立体匹配的虚实遮挡处理方法,使系统可以应对动态场景。特别的,基于自然特征的视觉定位方法,使系统可以在较大面积下有效。本文对增强现实系统的设计具有一定的参考意义。