玩转3D视界:3D机器视觉及其应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 结构光3D相机

2.2节讲解了通过双目测距获取深度的方法,但是在双目测距中,基于图像匹配的方法有一个很大的难点,由于其光源是环境光或者白光这类没有经过编码的光源,图像识别完全依赖于被拍摄物体本身的特征点,导致匹配的精度和准确性很难保证。双目测距是一种被动测距方法,它获取的图像是被动接收物体反射的自然光得到的,因此缺少特征点,那么我们可不可以通过主动投射包含丰富特征的光源来解决这一问题呢?由此出现了结构光测距技术,这是一种主动测距技术,其对投射光源进行了特征化,解决双目视觉特征点难以匹配的问题。

2.3.1 结构光相机原理

顾名思义,结构光是一种具有特定模式、特定结构的光,即对投射光源进行结构化与特征化编码,简单的结构化包括点、线、面等模式图案,复杂的结构化涉及光学图案的编码。结构光测距技术的独特之处即是利用了这些经过编码与特征化的投射光源。如图2.3-1所示,投影仪将含有特定模式图案的结构光投射至物体表面,模式图案遇到物体表面会发生形变,相当于被物体表面高度所调制,图案的形变程度取决于投影仪与相机之间的相对位置和物体表面高度,再由相机捕捉这些被调制过的结构光,利用三角测距原理计算模式图案的形变程度,从而得到物体的深度信息。投影仪、相机和计算机系统构成了结构光3D视觉系统[4]

图2.3-1 结构光3D视觉系统示意图

结构光测距技术使用了三角测距原理,如图2.3-2所示,点P和点I分别是投影仪和相机的光学中心,它们之间的距离为d。相机光轴与投影仪光轴相交于点O,设过点O且与光轴垂直的平面为参考面XY平面,其与点P和点I之间的距离为L,物体的高度h为物体表面相对于参考面的距离。

图2.3-2 三角测距原理示意图

利用投影仪将特定的结构光投射到参考面上,然后用相机捕获。当没有物体放置在参考面上时,投影仪投射的光在参考面上的相位值是沿X轴单调变化的[4],对图像进行相位展开,即可求解参考面上各点的绝对相位值。当没有物体存在时,对于参考面上的点A、点B,其在相机成像平面上的位置为A′B′,相位值为φAφB;然后,将被测物体放置于参考面上,则投影仪的投射光线PA与物体表面相交于点H,且其在相机成像平面上的位置为之前B′的位置,其相位为之前点A的相位,即φH=φA,从相机捕获的图像来看,相当于参考面上的点A移动到了点B的位置,即由于物体的存在,投影仪投射的光受到了相位调制。图中的△ABH与△PIH为一对相似三角形,若我们知道AB的距离,则可以利用三角形的相似原理,得到点H的深度h

其中,h为被测物体表面的点H相对于参考面的高度,Ld为该测量系统的参数。

在相机成像平面上,点B′的相位从参考面上捕获时为φB,而从物体表面捕获时为φH=φA,由此可以求得该像素在被测物体放置前后的相位差Δφxy。可以证明,Δφxy之间的关系为f0为所投射的结构光的频率,则可以得到被测物体表面高度:

2.3.2 结构光的分类

根据投射的光模式的不同,结构光法又可分为光点式结构光法、光条式结构光法和光面式结构光法。

2.3.2.1 光点式结构光法

光点式结构光法又称为点结构光法,类似于激光三角法,其利用激光器等设备投射一个点光源到物体表面上,通过相机获取光点的2D图像坐标。由于相机光线和激光光束在光点处相交,这样就形成了三角几何关系,从而可以获得光点在3D空间中的位置,如图2.3-3所示。

图2.3-3 光点式结构光法示意图

光点式结构光法需要通过逐点扫描物体进行测量,每次获得的信息量少,当被测物体增大时,图像获取时间和图像处理量急剧增加,不适合进行实时测量;而且机械扫描机构增加了系统的复杂性与不稳定性;测量精度随测量范围变化而变化,从几微米到一毫米不等;测量精度随入射角(光束与被测点法线的夹角)的增加而降低,有时甚至会出现测量失效的情况。

2.3.2.2 光条式结构光法

光条式结构光法又称为线结构光法,其示意图如图2.3-4所示,其基本原理是利用线光源产生的光平面照射被测物体,由于被测物体表面凹凸不平,可形成受表面轮廓调制的光条纹,通过CCD摄像头及数字信号处理器(DSP)可获得光条纹的数字图像,在计算机处理过程中,依次提取光条纹的轮廓线,一次轮廓提取能完成一个截面的2D轮廓测量,移动被测物体或激光测量系统,让光切面按一定间隔扫描物体表面,将一定间隔的2D截面轮廓组合起来,即能得到该目标物体表面的3D轮廓信息。

图2.3-4 光条式结构光法示意图

线结构光法的精度略低于点结构光法,但精度也可达到微米级。其光学与机械结构简单,费用低廉。与点结构光法相比,线结构光法采集的信息量大大增加,测量速度大大提升,而实现的复杂度并没有增加。它只需要在一个方向上进行扫描,因此只需要一个位移平台就可以完成对整个物体3D表面的扫描,不仅缩短了扫描时间,而且降低了仪器的成本和扫描控制的复杂度。

但是线结构光法也有一些不足。线结构光法缺乏随意性,因为其大多采用台架式结构,只能对放置在特定载物台上的物体进行测量。由于光线行进的直线性,被测物体不一定全部处于结构光场中,导致物体的两头容易出现截头现象。

2.3.2.3 光面式结构光法

光面式结构光法又称为面结构光法,其示意图如图2.3-5所示,该方法主要通过投影仪投射结构图像到被测物体表面上,通过CCD接收,在计算机中对接收图像进行解码,就可得到每个透射光点的角度,再根据三角测距原理就能计算出物体表面的深度信息。

图2.3-5 光面式结构光法示意图

在该方法中,由投影仪一次性向物体表面投射多条光条,从而形成2D结构光图案,这样不需要进行扫描就可以实现3D轮廓测量。一方面,提高了图像处理的效率,加快了测量速度;另一方面,增加了被测物体表面的信息量,能够获得物体表面更大范围的深度信息。与线结构光法相比,面结构光法的测量效率和测量范围大大提高和增加,但同时引入了光条识别的问题,而且增加了标定的复杂度。

2.3.3 结构光的标定与匹配

通常来说,在构建结构光3D视觉系统时需要解决的两个重要问题是标定和匹配。标定是为了确定结构光相机系统的结构参数,匹配是为了确定投影图像与编码图案对应点的对应关系。

2.3.3.1 标定与补偿

标定是构建结构光3D视觉系统的关键一步,它建立了3D空间的物像关系,直接影响后期3D测量的精度。结构光系统的标定包括相机标定和投影仪标定,具体来说,就是要确定相机和投影仪的内部几何参数、光学成像参数及其相对于世界坐标系的方向和位置参数[5]。经过多年的广泛研究,相关的标定原理和方法已经非常成熟,包括线性变换法[6]、两步标定法[7]等,基于两步标定法的思想,张正友提出了平面标定法[8],通过采集平面标定板在不同位置的多幅图像,利用奇异值分解和极大似然准则求解标定参数。该标定方法过程简单,易于操作,灵活性高,标定板制作简单、成本低廉,因而得到了广泛应用。

在结构光系统中,多种因素都会引起测量误差,其中最主要的是镜头非线性畸变、相移误差和非正弦波形误差。镜头非线性畸变在含有光学镜片的系统中普遍存在,这类误差可通过对相机镜头进行标定来解决。相移误差是由相移步距的不准确性导致的,它常常是不可避免的,但可通过采用精密的相移装置和实时相移校正技术来减弱其影响。而随着数字显示技术的发展,数字投影仪广泛应用于结构光系统,在数字投影仪中,可以通过数字相移消除相移误差,此时非正弦波形误差成为影响测量精度的主要因素。非正弦波形误差是由投影仪和相机系统中存在的Gamma非线性畸变引起的,投影仪和相机的亮度传递函数是非线性的,导致采集到的光栅条纹并不是理想的正弦波形,而是带有畸变的。为了补偿非正弦波形误差,通常采用查表法来修正[9],通过事先计算系统的Gamma值,预先计算误差值,生成系统误差查找表,根据查找表来补偿修正误差。

2.3.3.2 匹配与编码

我们之前讲过,结构光的优势在于其光源提供了很多的匹配角点或者直接的码字,可以很方便地进行特征点的匹配。那么这些特征点或者码字具体是如何进行对应与匹配的呢?这就依赖于结构光的编码。结构光编码主要是指对投射到物体表面的投射图案进行编码,通过对包含编码的照片进行解码和3D重构,对特征点进行提取,实现投影图像与编码图案的匹配。编码方法的选择关乎解码的准确性,并且对投影物平面和相机图像平面的匹配有重要影响,直接影响系统的测量精度和测量效率,是结构光3D视觉的核心技术和研究重点之一。为了实现准确的匹配,需要采用有效的结构光编码方法。

从大类上,结构光编码可以分为直接编码、时间编码和空间编码。直接编码利用投射光线的特性,直接为编码图案的每个像素设定一个码字;时间编码按时间顺序依次投影多幅图案,每次投影为每个像素产生一个码值,从而生成与每个像素一一对应的码字;空间编码则只需投影一幅编码图案,利用相邻像素的信息来产生码字。

1.直接编码

直接编码分为直接灰度编码和直接彩色编码。直接灰度编码根据图像灰度的不同形成编码,其原理示意图如图2.3-6所示,每一个灰度级别对应一个码字;直接彩色编码则使用许多不同的颜色形成编码图案,每一种颜色对应一个码字,为了提高投影图案的分辨率,需要利用较多颜色。然而,在直接编码中,相邻像素的色差很小,往往对噪声相当敏感。此外,图像颜色会受测量表面颜色的影响,因此直接编码法的应用范围通常仅限于中性色或灰白色目标物。直接编码法对每个像素都进行了编码,在理论上可以达到较高的分辨率。但由于受环境噪声影响较大,测量精度较低。

图2.3-6 直接灰度编码原理示意图

直接编码在解码时,使用相机获取两幅不同光强下的场景图像,一幅为编码投影下的图像,另一幅为均匀光照下的图像,利用两幅图像中每个点的像素值之比,建立投影图像与各像素的对应关系。由于要投影两幅图案,直接编码法不太适用于动态场景。

2.时间编码

时间编码是将多幅不同的编码图案先后投射到物体表面上,形成图案序列以获得编码值,从而得到3D信息,其原理示意图如图2.3-7所示。编码值是由通过N个图案得到的“0”和“1”序列组成的。如果有N幅图像,那么每一个条纹都对应唯一的N位编码值。将预先设计好的编码图案由投影仪一次性投射到被测物体上,然后由CCD相机按顺序拍摄畸变条纹图像。每经过一次这样的投影,图像中的每一个像素就获得一个二进制“0”或“1”的码值,在N幅投影图案全部投影完后,将每个像素所获得的二进制数按顺序组合起来,即得到该像素对应的编码值。具有相同编码值的像素就构成了一个窄的带状区域,这样被测物体被分割成很多可以唯一确定的区域。该方法要求每次投射图案时,投射空间位置和景物位置不能有变化。该方法易于实现、空间分辨率高、3D测量精度高,但由于需要投影多幅图案,因而比较适合静态场景,不适用于动态场景,同时,因为识别一个编码点需要连续多次投影,其计算量较大。

图2.3-7 时间编码原理示意图

时间编码在解码时,在时间t内连续采集N幅投影图案,每个像素位置的像素值即形成一个序列,每个序列对应一个码字。

3.空间编码

空间编码是将一幅具有特定空间分布特征的编码图案投射到物体表面上,根据周围邻近点的像素值、颜色、几何形状等分布特征来识别码字,其原理示意图如图2.3-8所示。空间编码利用投影图案中每个点和其相邻点的关系进行编码,一般只需要单帧投影图案,因此可以较好地处理动态扫描问题,比较适合动态场景。但如果空间信息丢失,在解码时易产生误差。与时间编码相比,该方法分辨率、测量精度较低。

图2.3-8 空间编码原理示意图

空间编码在解码时,需要利用周围邻近点共同确定中心码字的位置信息,根据周围邻近点的信息,如像素值、颜色、几何形状等得到每个像素的码值。

相比较而言,时间编码需要投影多幅图案,空间分辨率和测量精度较高,但一般只适用于静态场景,拍摄运动的物体时会造成拖影。空间编码往往只需要投影一幅图案,可用于动态场景测量,但空间分辨率相对较低,并且重建精度低。直接编码对每个点都进行编码,在理论上能达到较高的分辨率,但投影仪颜色带宽、测量表面颜色或深度的变化、相机误差及噪声敏感性等会制约系统的测量精度和应用场景。

正是因为结构光使用了这些编码方法进行特征点的匹配,不需要利用被测物体本身的特征点,因此可以提供更好的匹配结果。相比于双目视觉,结构光主要的优点在于解决了匹配问题。双目视觉在匹配时,依靠物体本身的特征点,即需要找到物体表面的特征点进行匹配。而结构光光源带有很多特征点或者编码,其本身就提供了丰富的匹配角点和特征点,不要求被测物体本身具有特征点,可以很方便地进行匹配,结果也更加准确。

此外,由于被拍摄的物体多种多样,在不同的场景中,双目视觉每次都需要重新提取不同的特征点进行匹配,而结构光投射的模式图案是固定的,特征点不会根据场景的不同而变化,从而降低了匹配的难度,同时提高了精度。

结构光测距技术是基于双目测距原理发展而来的,但其巧妙地解决了双目匹配中图像匹配的难点,因此比单纯的双目匹配更加有效。