本文作者胡金晖,UCVR联合创始人,CTO,英国King's College London电子工程系博士,专攻计算机视觉、图像处理。
Project Tango发布初期曾经一度被称为黑科技,但现如今已慢慢走进我们的生活。如果说Kinect是3D感应技术的开创者,那么Project Tango就算是3D感应技术领路人了。Project Tango将光学传感器、惯性传感器与计算机视觉技术进行了完美的结合。
Project Tango诞生记
说到Project Tango就要说起ATAP(All Things Are Possible,ATAP是Google收购Motorola(后来又卖给了联想)后保留的一个重要部门),更要说起Johnny Lee。
如果你打开Project Tango的介绍视频,第一眼看到的一个面目和蔼的胖子,就是那个在2007年底把Wii玩出花的大神。07年12月John神在YouTube上传了一系列视频,记录了用Wii遥控手柄追踪人的手指,通过改装后的Wii遥控手柄和投影仪制造出多点触摸电子白板,还有用Wii遥控手柄追踪人的头部位置,与此同时,游戏画面也为了适应观众的视角而发生改变。从这几个实验中,我们可以看到当下Leap Motion、Oculus Rift等下一代人机交互方式的影子。
之后他加入了微软的Project Natal(该项目的成果是风靡全球的Kinect),后来跳槽到Google X,再之后加入Motorola ATAP(All Things Are Possible),最终带领团队在2014年6月5日启动Project Tango。
Project Tango三大核心技术
众所周知Project Tango包含三块技术:运动追踪(Motion Tracking),深度感知(Depth Perception)和区域学习(Area Learning)。我们可以通过John神的职业道路,由简入繁来看看Project Tango里面的黑科技是如何一步一步实现的。
首先就是John神的成名之作:Wii实现头动追踪。他将Wii捕捉系统翻了个个,将含有IR相机的Wii手柄作为接收器,并把Wii的“感应棒”作为一个含有两个红外点光源的发射器,如下图:
这就形成了一个典型的单目视觉系统。接收器拍摄到的图像是三维空间的场景在二维空间的投影,要识别场景的“深度”信息,就是一种逆向求解的过程。单目视觉系统一般采用对应点标定法,即通过不同坐标系中对应点的对应坐标求解坐标系的转换关系,说起来很绕口,但是简单解释就是好比你一只眼睛看一根木棍(我们假定木棍不会在水平面旋转),虽然没有了双目的立体视觉,但是通过观看木棍的长度和位置变化你就可以判断木棍的大概位置。同理John神的Demo中接收器拍摄到的图像大概是这个样子。
可能这个例子里面的原理非常之简单,但要知道他提出的这个VR Display概念要比Oculus早了近5年。
运动追踪
Project Tango的第一个核心技术“运动追踪”的三维动态捕捉就是利用了上面提到的单目视觉技术的升级版Feature Tracking(Google称为特征捕捉)。特征捕捉如何理解呢?再回到John神的例子里,我们不再固定接收器的位置了,反而是拿着接收器(这里我们不再叫它接收器了,叫采集设备或相机)移动;而对面只有两个光点的发射器也变成一个一个的光点贴在John神家里屋子的各个角落。
当我们移动相机时不断地一帧一帧进行拍摄,因为拍摄到的光点的相对位置在不断变化(这里“变化”是指拍摄到的两帧之间同一个光点的相对位置变化),通过计算我们可以得到相机的移动距离。简单来说Tango设备在不断循环的一个过程就是:拍摄——识别特征点(个人估计是SIFT点)——匹配特征点——筛去错误匹配——坐标换算。当然Project Tango的运动追踪不仅如此,他还能通过一个内置的6轴惯性传感器(加速度计和陀螺仪)来捕捉相机的加速度和运动方向。
当融合了以上两类传感器的数据之后Project Tango就“完美”(其实还有瑕疵)实现了三维运动追踪。
区域学习
为什么说还有瑕疵的?因为运动追踪只是单纯得到了相机移动的轨迹,然而对于相机所处的场景是零认知。所以一旦设备被关掉,它之前的运动轨迹就会被“忘掉”。最大的问题还是运动追踪中所累积的误差,或者叫漂移,在长距离使用后真实位置会和运算位置有很大差异。
为解决这个问题,John神团队为Tango设备设定了一种学习模式。这应该是他在Google X里面无人驾驶汽车研究成果的冰山一角。这种学习模式理解起来就简单很多了,为了让Tango设备具有一定记忆,而不再像一个被蒙着眼睛的人一样需要靠数自己走了多少步来计算距离,Project Tango可以让用户预先录入某个场景(这里要特别提醒的是,录入的数据不光包括了运动追踪里面所识别的特征点,还包含了场景本身),当用户重回这个场景的时候Tango设备会自动用录入的数据来纠正运动追踪的数据,这个纠正的过程中录入场景里的那些特征点会被当作观测点,一旦发现与当下特征点匹配的观测点,系统便会修正当下的追踪数据。这就是Project Tango的第二大技术核心——区域学习。
深度感知
如果说把深度感知作为Project Tango的第三大技术核心,我觉得有点虚,毕竟Google也是采用的第三方的深度传感器。不过对此Google并没有掖着藏着,而是很大方的表明Tango设备可以选择任意一种现今流行的深度感知技术。而对这项技术的顺利应用多半也要归功于John神在Project Natal的经历了。Kinect一代的推出震动了业界,震动了学术界,同时也把结构光(Structured Light)的概念推广了出去。那么他到底是怎么实现深度检测的呢?检测到的“深度”又是什么概念呢?
结构光顾名思义是有特殊结构(模式)的光,比如离散光斑,条纹光,编码结构光,等等。他们被投射到待检测物体或平面上,看上去就好像标尺一样。根据用处不同,投影出来的结构光也可以分为不可见的红外光斑,黑白条纹可见光,单束线性激光,等等。比如Kinect投射出来的就是红外光斑,设想你玩游戏的时候要是一片黑白条纹光打到你身上,这画面感岂不是很怪。
本文来源:不详 作者:佚名