Xungerrrr's Blog

单镜头也能测深度?

深度感知技术介绍与对比

Word count: 3.4kReading time: 11 min
2019/10/11 Share

传统的相机只能捕捉二维画面,丢失了环境的深度信息。而且,仅凭照片无法获得任何尺度信息。深度相机是一种新式的传感器,它能感知场景的立体结构,相比于普通相机多获取了一维的信息,从而能进行距离测量、速度测量等。利用这些额外的信息,还能做出非常多的应用,例如实时背景虚化、增强现实、人体追踪等。深度信息的获取在很多领域都具有重要的意义,如自动驾驶、机器人等等。

不过,这些事情离开了深度相机就没办法完成吗?目前,深度感知受到了越来越多的关注,已经有非常多的方法可以用于获取场景的三维数据,其中当然不乏使用普通相机的例子。苹果的ARKit就是一个非常成功的例子。今天,我们就来看看深度感知都有哪些技术,探讨一下深度相机与苹果ARKit技术的异同,并且对它们的利弊进行分析。

深度相机

顾名思义,深度相机就是能够测量物体到相机距离(深度)的相机。我们之前介绍过的Azure Kinect就配备了一台深度相机。

原理

首先,我们来简单了解一下深度相机的原理。从原理上将,深度相机可以分为两大类:

  1. 基于特征匹配的深度相机。

    这种相机使用了三角形的几何性质来计算深度信息。简单来说,这种相机会得到一左一右两个图像,首先,相机对两个图形进行特征点匹配,然后利用匹配点的坐标差异,用三角测量计算出深度信息。根据实现方法不同,这种相机可进一步分为以下两种:

    • 主动投射结构光深度相机

      为了令特征点的匹配更简单,这种相机采用了投射编码条纹或点阵的方法,主动向场景投射自定义的特征点,然后使用另一个视角的相机进行拍摄,将照片中的特征点与投射的特征点进行匹配。苹果推出的FaceID人脸识别就是使用这种技术。FaceID将红外点阵投影到人脸上,然后通过红外相机进行捕捉,通过特征匹配计算出人脸的深度信息,从而获得人脸的三维模型。微软的Kinect也曾使用过这种相机。

      由于采用投射光源,这种相机可以在黑暗环境下使用,而在户外使用则需要有足够的功率去克服强光的影响。同时,如果场景存在较强的反射现象,则会影响测量的精准度。通过合理设计投射的特征,这种相机可以获得较高的精度。

    • 被动双目深度相机

      与主动投射结构光深度相机不同,这种相机不向外投射特征点,而是模拟人眼的结构,使用一左一右两个相机,拍摄两个视角的图像,然后直接匹配图像中的特征。特征匹配完成后,深度的计算过程与结构光相机是类似的。

      双目深度相机仅依赖实时图像进行特征匹配,所以只能用于特征明显、光线充足的条件中。由于图像特征匹配是一项很难的任务,需要大量的计算量,因此这种相机的测量准确度可能随着场景的变化而有所波动。

  2. 基于反射时间的深度相机。

    这种相机就是我们常说的ToF相机,原理是利用光线的飞行时间 (Time of Flight) 来获得距离信息。这种相机首先将调制光投射到物体上,然后测量光线经场景反射后返回的时间差,得到深度信息。微软推出的Azure Kinect使用了这种深度相机。

    大家都知道,光速是非常快的,少量的时间误差就会导致严重的距离误差,因此ToF相机对时间测量的精度要求非常高。受制于电子元件的精度,目前ToF相机的精度一般只能达到厘米级,不能应用在高精度测量的领域。

优缺点

下面的表格比较了不同种类的深度相机的一些特点。

结构光深度相机 双目深度相机 ToF深度相机
测量精度 近距离能达到0.01mm-1mm 近距离能达到毫米级 最高可达厘米级
测量范围 一般在10m内 一般在2m内 较远,一般在100m内
分辨率 中等 最高 较低
功耗 中等 较低 较高
户外影响 有影响 无影响 影响较大

结构光深度相机的测量精度是三者中最高的,因此它能用在人脸识别等精细的领域上。而ToF只能做到厘米级,不能用于高精度的工业生产中。

由于结构光相机和双目相机都是基于视觉特征匹配进行深度测量,所以它们的测量范围比较近,而且随着距离的增大,误差也会增大。ToF相机则是通过测量光线传播时间来测量深度,相对来说能测量更远的范围。

受限于电子元件的大小,ToF相机的分辨率一般不高,而结构光和双目相机是采用视觉特征识别,分辨率会相对高一些。不过随着技术的进步,ToF相机的分辨率已经在逐步提高。Azure Kinect的深度相机就已经达到了1024×1024的分辨率。

在功耗方面,由于结构光相机和ToF相机都需要主动投射出光源,所以功率会较高。双目深度相机主要使用软件进行计算,功率相对较低。同样,结构光相机的ToF相机在户外使用时会受到外界强光和外界反射的干扰,所以更适合在室内使用。

ARKit

从前面的内容来看,深度相机需要使用多个摄像头捕获不同视角的照片,或者使用特殊的红外光发射器和接收器。只用一个摄像头能不能实现三维的感知?答案是肯定的,而这里不得不提及苹果的ARKit。

近年来,苹果不断致力于完善自己的AR平台,鼓励开发者参与到AR开发中来。在2017年,苹果推出了ARKit。借助这套开发工具,开发者能够简单地在应用中添加AR功能,而不需要复杂的深度相机和场景标记。虽然今年推出的iPhone 11 Pro拥有了后置三摄,但是ARKit在仅有单个摄像头的苹果设备上也是能够使用的。使用ARKit不仅能够获取到3D信息,还能获取到计量尺度信息。这背后有什么秘密武器?下面我们简单了解一下ARKit的原理。

原理

ARKit的技术主要基于视觉惯性测量 (VIO)。顾名思义,VIO包含视觉系统和惯性系统两部分。也就是说,ARKit不仅用到了摄像头,还使用了手机的惯性测量单元 (IMU)。在视觉上,摄像头通过匹配帧与帧之间的特征点,追踪场景的变化;另一方面,加速度计和陀螺仪提供了手机运动的数据。

本质上来说,VIO在视觉上的原理和被动双目深度相机是类似的,都是通过特征点的匹配来计算深度。VIO的好处是采用了两套系统来同时追踪设备的运动信息,这两套系统相对独立,没有相互依赖的关系,而且在一定程度上能起到互补的作用。当设备剧烈运动,画面变化剧烈时,或者是图像特征不明显时,视觉系统很难进行特征匹配,这时候,惯性系统能够更好地判断设备的移动情况;当设备静止时,视觉系统受到的干扰会更小,能够提供更稳定的追踪信息。通过这两个系统的协调,可以追踪设备在空间中六个自由度的运动情况,包括沿xyz三轴的平移运动和绕三轴的旋转运动。

那么,既然视觉上的原理和被动双目深度相机类似,ARKit为什么能够在单镜头下工作呢?苹果靠的是镜头的移动。一个摄像头可以先拍摄一帧,移动后再拍摄另一帧,这样就获得了两个视角的画面。可是,双目深度相机能够计算深度是因为两个摄像头的相对位置是确定的,单目摄像头怎么获取两帧之间的距离呢。这个可以用惯性系统来计算,不过对精度的要求相当高。通过IMU给出的加速度和时间等数据,可以计算出速度,进而计算出两帧之间的移动距离。当惯性系统的误差非常小时,能够得到精准的测量值。苹果ARKit的强大之处就在于其很好地移除了IMU的误差,将计量尺度误差减小到10%以下。

实际测试

下面使用苹果推出的测距仪App来试试ARKit的测量效果。正如上面所说,ARKit靠镜头运动来计算尺度信息,因此ARKit需要移动设备来进行初始化。

经过短暂的移动后,就可以开始测量了。下面尝试测量三星S8手机的尺寸:

测量的结果显示,手机长15cm,宽7cm。手机真实的长宽为14.89cm和6.81cm。可以看出,ARKit的测量结果只有1~2毫米的误差,非常准确。

深度相机能被取代吗?

在ARKit这样强大的SDK的加持下,普通的手机摄像头也能实现深度感知了,那它们能否取代深度相机呢?我觉得,这在目前是不行的,也没有必要。

从原理来看,不同的相机有不同的优缺点,自然也会有不同的适用场景。单目VIO系统确实有其独特的优点,例如制造成本低、功耗低、准确度高、分辨率高等等,但它不能在昏暗的环境下使用,面对特征不明显的场景会出现很大的误差。而且,单目VIO系统需要的计算量是很大的,导致其实时性较差。这些都是单目VIO系统无法避免的缺点。下图是我用9.7寸iPad Pro进行的测试,它配备了A9X处理器和单摄像头。当测试的线条达到这个数量时,设备已经出现了明显的卡顿和发热,可见ARKit对设备的计算能力要求很高,计算能力不足会严重影响性能。相比之下,ToF深度相机是通过物理测量获得深度信息的,因此实时性很高,同时,它不依靠特征进行测量,所以能够在昏暗和特征不明显的场景中使用,对于边缘和尺寸的测量也会更加精准。双目深度相机可以捕获更多的视觉信息,并且计算量会比单目VIO系统要小,因为两个摄像头的相对位置是固定的。

从上面的角度来看,要是想提高测量的精度,将两者结合倒是一个不错的想法。深度相机能给VIO系统带来很多好处。对于特征点不明显的场景,ToF相机能辅助进行边缘检测、平面检测和尺度检测,能够增加测量精度的稳定性。反过来,在户外光照强烈的地方,VIO系统能够弥补ToF相机的不足。添加相机的数量能增加视觉范围,捕获更多的光学特征。现在许多手机都配备了多个摄像头,通过校准这些摄像头,能够优化近距离的深度测量精度。最近,也有手机厂商开始在手机上配备ToF镜头,用来提高相机的虚化能力,以及提升AR的准确性,例如三星Note 10和华为P30 Pro。

对于手机这样的小型设备来说,使用单目VIO系统已经能胜任很多使用场景了。而且,ToF深度相机的功耗相对较大,目前使用在手机上的都是小功率的型号,只能起到简单的辅助作用。这样来看,深度相机似乎可以被取代。然而,三维感知不仅用在消费级产品上,还要用在工业生产中。工业使用对环境、精度都提出更高的要求。像Azure Kinect就是一款针对商用领域的产品,其配备了高规格的ToF相机,能够提供比单目VIO系统更全面的深度感知能力。因此,即使单镜头VIO在手机上有足够多的优点,它仍无法在所有使用场景取代深度相机。

CATALOG
  1. 1. 深度相机
    1. 1.1. 原理
    2. 1.2. 优缺点
  2. 2. ARKit
    1. 2.1. 原理
    2. 2.2. 实际测试
  3. 3. 深度相机能被取代吗?