立即下载 知乎日报 每日提供高质量新闻资讯

想明白 iPhone X 的人脸识别是怎么工作的,先得了解这道「光」

图片:《黑镜》

科普文 · 结构光发展简史

许翔翔,光学工程在读博士,永远保持旺盛的好奇心

背景知识

【针孔相机模型:射线方程】

我们把数码相机简化成针孔相机模型,光心为 O 点,传感器面为红色实线, O 点到传感器面距离 f 。那么我们可以这样描述成像的过程:三维空间中的 Q_0 点经过光心 O 点在传感器面上成像为 P 点,且 P 、 O 、 Q_0 三点在一条直线上。针孔相机模型是一个三维空间( Q 点所在空间)到二维面( P 点所在面)的变换, \overline{OQ_0} 线上的任意一点(如 Q_1 、Q_2 、Q_3 )所成的像都是 P 点,因此如果只知道 P 点,我们是无法反推出具体哪一个 Q 点点亮了 P 点,我们只能说点亮 P 点的点一定在射线 \overline{OP} 上。所以针孔相机模型本质上是射线方程,也就是说知道了 CCD 上的点,就可以得到一条射线。

为了方便描述,我们之后将把针孔模型对称翻转过来,如上图虚线所示,从数学的角度,它们是等价的。

【针孔相机双目确定物点模型:射线相交得到点】

为了确定到底是哪一个 Q 点点亮了相机 0 上的 U 点,我们引入了另一个相机,通过相机 1,我们可以得到 Q 点在相机 1 中的像点 P ,联立 \overline{O_0U} 和 \overline{O_1P} 我们就可以唯一的得到空间中Q 点,上图表达了这个关系。

被动测距

【双目测距:匹配特征】

图中上部左右两幅照片是两个标定好的相机对同一个场景拍摄并对准后的,图中下部是上图场景中的高度分布,颜色越深离相机越远。

我们把上面的场景抽象成草图,举例而言,显示器在相机 0 和相机 1 中不同的像位置是确定显示器空间所在位置的关键,那么为什么高度分布是块状的?

这是因为由于拍摄的场景缺少特征点,以下图为例,如果说左图中白色盒子顶上的四个点我们还可以在右图中找的到,那么图中红色点在右图我们就根本找不到对应的点。由于特征点的稀缺,双目测距中是不可能实现像素级点对点的匹配的。

主动结构光

【结构光:匹配拓扑网格】

如果说特征点的缺失是双目测距的一大痛点,有学者就提出,既然缺少特征点不如我就造一些特征点出来,这就是结构光。iPhoneX 的人脸识别用的就是这一项技术。

iPhoneX 中有两个与此相关的传感器,分别是 Infrared camera 和 Dot projector,前者是相机,而后者是一个点阵投影仪。从数学上说,一部分投影仪是可以用逆向针孔相机模型描述的,也就是说如果我知道投影面上的某一个点,我就可以知道由这个点投影出的一条射线,这条射线遇到一个面,线面相交的点就会被投影仪点亮。这里我们为什么说“一部分”投影仪可以等价于针孔相机,这个问题在后面会谈到。

为了确定这个线面相交的点的位置,我们用一个相机观察,如上图所示,我们可以在点阵投影仪的投影面上找到点亮点的投影点,也可以在相机 CCD 面上找到被点亮的成像点。上面的草图中,一共有五个投影点,而相机拍到的五个投影点,会因为面形的存在改变相邻两点之间的距离却不会因为面形的存在导致五个投影点相对顺序的改变,因此我们说相机是通过拓扑网格的标号来确定 CCD 面上点和投影仪投影面上点的一一对应关系。

在实际的应用当中,会根据待测面形的特点确定拓扑网格的结构。举例而言,对于 iPhoneX 的结构光主要测量的人脸,因此它的结构光在设计过程中,加密了人脸中眼、鼻、口的光点数量,使得在人脸识别中更具有特征的眼、鼻、口的采样率更高,深度数据真实性更强。主动结构光拓扑网格匹配已经远远强于被动双目测距的特征匹配,但是即便如此依然无法实现像素级点对点的匹配,无法实现的原因我们会在下一节讲到。

主动投射结构光和被动双目测距相比既有好处也有坏处,好处是大大提高了测量准确度和分辨率,坏处则是需要有主动式投影光源。举个很显而易见的例子,由于投影光源在远距离的情况下就失效了,远距离的测距主要还是用被动双目测距的方法。当然远距离的测距还有很多别的更可行的方案,比如激光雷达,但是本文只讨论结构光体系内的技术。

【结构光:匹配相位分布】

我们为了测量的面形保真,必须尽可能的提高采样点的数量。上一节拓扑网格匹配结构光里采样点的提高有一个上限,那就是 CCD 必须可以区分采样点,否则在 CCD 中采样点糊成一团,也就失去了拓扑网格标号。因此这里有一对矛盾,一方面要尽可能的提高采样率,一方面又不能超过 CCD 的分辨能力。

上图中,测量面上最左边的点,相机却无法分辨最左边的点与和它相邻的点。为了解决这个问题,学者就提出采用相位的方法实现像素级点对点匹配。在前面的介绍中,被动双目测距用“特征点”作为“相机 0-- 物 -- 相机 1”这个过程的传递不变量,主动拓扑网格结构光中,以“拓扑网格标号”作为“投影仪 -- 物 -- 相机”的传递不变量。在这里我们以相位分布作为传递不变量。

以四步相移为例,上图右图是投影仪投出的 X 方向相移正弦条纹,左图是 CCD 拍摄到的由于面形引起的 X 方向变形条纹。对这两组图求包裹相位,并解包裹得到 X 方向相位分布情况。

举例而言,投影面和 CCD 的像素数都是 512*512,对于投影面上的一个像素(下图右图红点),我能找到它的 X 方向相位值,根据这个相位值,能够找到 CCD 面上具有这个相位值的所有像素(下图左图红线),通过这个 X 方向相位值,能够把投影面上的点和 CCD 面上的线关联起来。

同样的道理,投影仪投影 Y 方向正弦条纹,我们就能够在 CCD 面上唯一确定与投影面上红点对应的像素,通过 X 方向相位和 Y 方向相位,我们找到了“投影面像素标号CCD 面像素标号”的对应关系,实现了像素级点对点匹配。

【结构光:匹配编码】

肯定有读者会问上面都已经实现了像素级点对点匹配,分辨率的提高都已经到头了,那么这项技术还可以怎么演进呢?这里我们就要谈一谈相移法的优缺点了,相移法是属于一种优点和缺点都极为显著的方法,优点是,通过相移解相位的方法,牺牲了时间(多幅条纹投影),以粗的条纹获得了细的分辨率,缺点是正弦条纹极易被干扰,这就导致了相位图失真,CCD 像素和投影面像素的一一对应性被破坏。

因此,学者就提出,能不能把步子迈得小一点,我们不要求像相移法那样高的分辨率,但是 CCD 像素和投影面像素的一一对应性必须要保证。由此就提出了以编码作为传递不变量,确定像素的对应性。

以下图为例,我们对蓝色点进行编码,通过 XY 两个方向一共 6 幅由疏到密的二值条纹,我们能够得到一串表明蓝色点位置的 6 位编码,101101,其中 1 代表在这一位上是白色,0 代表黑色。编码位数越高越能准确的描述蓝色点的位置,当然位数越高同样意味着条纹越密,位数的上限取决与 CCD 能够分辨的最小二值条纹粗细。二值条纹的抗干扰能力显著高于正弦条纹。

下图是慕尼黑光博会上某个展商的装置,用一个投影仪一个相机以及编码图样实现了三维测量,实际上它所用的图样(编码位数)最后远远高于我截的这 6 幅图。

【双目结构光:不能或者不想标定投影仪】

还记得我们前面有一节讲到只有一部分投影仪可以用逆向针孔相机模型来描述,受限于投影仪的凸透镜成像法则,大多数情况下很难用一个通用的模型来描述投影仪整个群体,比如说,投影面放在投影仪透镜焦面上的准直投影就不能用逆向针孔相机模型来描述。

这意味这投影仪不能用射线方程来描述,也就意味着又要解决一个相机解欠定的问题,自然我们想到了再引入一个相机。

请注意,因为这里的投影仪不是射线模型,因此我也就不画成前文投影仪的样子了。

和前面的结构光匹配编码类似,只是我们现在匹配的是两台相机当中的编码而不是匹配投影仪和相机的编码。

【交叉偏振结构光:解决反光问题】

反光是所有结构光的大敌,包括被动双目测距,主动结构光扫描。因为反光会造成采集信号丢失,相当于双目测距失去一目,方程欠定有无穷多解。

所以结构光只能用在粗糙表面测量上,下图表明了两种表面反射光的形态。左图是粗糙表面反射光形态,粗糙表面会讲投影光线均匀的散开,只要有一支被 CCD 接受我们就可以确定投影像素和 CCD 像素的对应关系。右图是类镜面反射光形态,反射光中,光强最强的主瓣沿着反射定律确定的反射光方向,而旁瓣则在主瓣周围散开,越远离主瓣光强越弱。结构光无法处理反光就是因为 CCD 接收不到光线。类镜面反射光形态和粗糙表面反射光形态并不是一成不变的。一些材质的粗糙表面在某些角度的光线或者光强大于一定的值之后也会表现出类镜面反射光的特点。

为了解决这个问题,学者就提出投影交叉偏振结构光的方法。其原理是反射光是 s 分量占优的部分偏振光,只有当入射角是布鲁斯特角时,反射光是 s 线偏振光。根据这个原理,大量的含水面的风光摄影都用到了与 s 光正交的偏振镜来抵消 s 光以达到减弱反光的效果。

通过给投影仪加装偏振镜的方法,我们可以得到一对具有正交偏振方向的投影光,下图两个蓝色圈中的即是两个不同偏振方向的投影仪。

通过交叉偏振投影结构光的方法,总有一个方向能够极大的降低反光,再通过拍摄到无反光的结构光的相机的位置,可以按照前文所述得到三维信息。

【此处插播一条广告:我的研究方向是 Deflectometry,即纯镜面的结构光三维测量,利用反光来检测镜面面形,欢迎同行不吝赐教。】

【Phase Measuring Profilometry:既不标定投影仪也不用双目】

Phase Measuring Profilometry,中文名为:相位测量轮廓术。

前文的所有测量包括被动双目和主动结构光都属于绝对测量,这里的 Phase Measuring Profilometry(PMP)是一种相对测量的手段。既不标定投影仪也不用双目,这势必意味着我们方程又回到了欠定无穷多解的问题上。好在相移干涉法给了一个思路,我们可以通过给一个绝对高度的参考面,测量的是待测面与参考面的相对高度,由此得到待测面的绝对高度。

相机拍摄参考面的四步相移正弦图样,解包裹相位得到相位分布,如下下图右图。

相机拍摄待测面的四步相移正弦图样,解包裹相位得到相位分布,如下图左图。

PMP的核心在于标定“相位--高度”的映射:

\frac{1}{h(x,y)}=a(x,y)+b(x,y)\frac{1}{\Phi(x,y)}+c(x,y)\frac{1}{\Phi^2(x,y)}

其中, h(x,y) 是在 (x,y) 处待测面与参考面的高度差, \Phi(x,y) 是对应的待测面相位分布和参考面相位分布的差, a(x,y) , b(x,y) 和 c(x,y) 是标定系数。

a(x,y) b(x,y) c(x,y) 需要采用别的手段进行标定。由于标定好“相位 -- 高度”的映射,因此 PMP 不需要在另一个方向测量相位分布。为了解决 PMP 中方程欠定的问题,需要引入参考面和其他的标定手段,肯定有读者会问这相对于之前的结构光好在哪里呢?其实方法没有好坏之分只有适合用在哪里的区别。虽然 PMP 增加了标定和设备的复杂性,但是好在这些工作只要做一次就可以,非常适用于有基准面的测量,比如电路板的三维测量等等。

【后 PMP 时代】

后 PMP 主要朝着这么几个方向,降低投影条纹数,提高三维重构算法,提高分辨率以及一些难测量面形的测量方案设计。

本文中外部引用的图片来源如下(按照顺序):

【OpenCV】双目测距(双目标定、双目校正和立体匹配) - CSDN博客

Stefano Mattoccia - Computer Vision LAB - Unibo

Apple 活动 - 2017 年 9 月主题演讲 - Apple (中国)

SexyCyborg 3D Body Scan - Album on Imgur

Tutorial 8 _ Basic shading

偏振镜、ND渐变篇 _ 影像视觉 _ 《影像视觉》杂志官方网站

电视剧里的婴儿都是哪里找来的? - 知乎

结构光的概念及其实现三维成像的主要原理是什么? - 知乎

欢迎分享,转载请注明出处。

扫描二维码下载知乎日报

支持 iOS 和 Android
二维码下载知乎日报
阅读更多 2019 年 9 月 19 日在德国发布的华为 Mate 30 系列有哪些亮点和不足? 下载 「知乎日报」 客户端查看更多