一、技术路线
1. 硬件设备构成
(1)双目相机:追求性价比可以使用国产的相机,分辨率100w-500w均可;
(2)DLP投影仪:推荐DLP2010、DLP3010、DLP4500,售价3000-10000;超高精密推荐DLP4710和DLP6500,售价15000-40000不等。
如图1所示,双目结构光三维测量的硬件通常由单个DLP投影仪和一对双目相机组成,DLP用于投影光栅条纹到测量物体表面,然后通过触发信号至双目相机,并采集反射的条纹图像。
2. 测量原理
(1)编码方式通常采用相移+时域相位解包,目的是为了获取绝对相位信息。其中,相移方法为了获取包裹相位,时域相位解包方法,例如格雷码方法、多频外差方法、倍频方法、Phase-coding方法,对相移方法得到的包裹相位进行解包,获取绝对相位信息。
(2)传统双目实现点与点的匹配依赖于物体的纹理特征,当物体表面纹理过于单一时,匹配的点稀疏且精度较差,结构光编码主动提供了相位信息,因此双目匹配过程中寻找相位相等的点便可以实现同名点确定,达到点与点成功匹配。
(3)如图2所示,同名点匹配之后便可以通过双目立体视觉结构并结合系统标定参数重建物体的三维坐标点。
二、相位编码与解码原理
如前所述,双目结构光的编码通常采用相移法+时域相位解包算法实现绝对相位获取,其中相移法投影相移条纹可以计算得到包裹相位 ,时域方法则投影对应的时域条纹图像得到条纹序列 ,具体形式如图3所示。
当使用时域条纹获取到条纹序列 之后,便可以对包裹相位进行展开得到绝对相位 ,具体通过下述方程:
1. 四步相移法获取包裹相位
由于四步相移的高速和高精度性能,因此通常采用四步相移获取包裹相位信息。四步相移为四张相移互为 /2 的光栅条纹构成,其具体的数学表达式如下所示:
然后根据最小二乘法便可以求取包裹相位信息,具体如下:
由于包裹相位为一对多的函数形式,因此在进行双目匹配的时候会出现多个候匹配点,因此需要进行包裹相位展开得到单调递增的绝对相位。
2. 时域相位解包获取条纹序列
目前,主流的时域相位解包方法有格雷码方法、多频外差方法、倍频方法等等。如前所述,这些方法的目前是为了获取条纹序列,对包裹相位进行展开。但这些方法均各有优缺点,如图4所示,格雷码方法由于二值分割的误差会导致条纹序列与包裹相位的周期边界错位,解包之后绝对相位解包会出现相位跳变问题,传统的滤波方法难以完全滤除干净,且会污染非相干区域的相位精度。为了解决该问题,学者们发展出一系列改进的格雷码方法。但用于稳定测量的当属补码格雷码方法,该方法多加一张格雷码光栅投影,可以很好的解决相位跳变问题。如有需要,相移+补码格雷码方法的代码可以在四步相移+补码格雷码代码获取。
多频外差的解码原理如图5所示,利用不同频率的包裹相位进行差值得到更低频率的相位,然后再进行相位解包。在条纹的最初段和尾端,频率不同条纹的相位差最大,为或 。由于噪声的影响,包裹相位也包含误差,当受到噪声干扰,相位差为的区域可能小于,相位差为的区域可能大于。由于相位分布范围为(或者为),因此小于的区域会变为左右,大于的区域会变为左右,便出现跳变情况,如图5的粉红色区域,该问题同样存在与倍频方法中。实际使用中,首尾两端的区域通常被舍弃使用便可以避免测量误差的问题。如有需要,基于多频外差的三频四相代码可以在三频四相代码中获取。
三、双目点云重建
获取绝对相位信息之后,便可以利用双目视觉进行对应点匹配,基于相位的双目匹配需要使用双目系统参数,此外三维点云重建也需要双目系统参数,因此在测量之前需要对双目系统进行标定。
1. 双目标定
目前常用的双目标定方法为张氏标定法,Matlab、Opencv和Halcon等工具均提供了直接使用的标定函数,以Matlab为例,如图6所示,可以在命令行直接输入stereoCameraCalibrator或者直接在APP中找到该功能,打开之后直接点击Add Images上传自己采集的标定图像可以标定出双目系统参数。注意该功能暂时只支持棋盘格标定板的标定,如果使用圆形标定板,则需要自己配置找圆函数或者利用现有的圆心提取函数,并自己调用工具箱的标定函数。多年标定经验所得使用圆标定板的标定误差仅为棋盘格的一半左右,但当棋盘格的标定误差达到0.1像素之内,对于重建精度影响很小,因此棋盘格也是一种不错的标定方式。
标定之后得到的主要参数为两个相机各自的内参,既主点坐标,焦距和镜头畸变,此外还有两个相机之间的外参,既旋转矩阵和平移矩阵。
2. 基于相位的双目匹配
如图7所示,双目视觉中存在一个重要的理论,极线定理,既左相机成像中的一点,对应在右相机中的一条线,同样右相机的该条线上的一点对应在左相机成像点所处的某一极线。此对极线存在着对应的匹配点,利用极线可以极大缩小同相位点匹配的计算。由于绝对相位是单调递增的,因此在该对极线上可以找到相位值相等的点,也就是对应的同名点,遍历图像中的所有点,便可以快速和有效的实现双目匹配。
3. 三维坐标计算
利用双目极线和绝对相位信息实现双目匹配后,便可以求取三维坐标,假设空间中有一个点P,在左相机坐标系下的三维坐标 为,在右相机坐标系下的三维坐标为,其成像于左相机图像的点,通过相位匹配得到其对应在右相机图像的匹配点为。根据相机的小孔成像模型,可以得到与的如下:
其中,为比例因子,和分别为方向和方向的焦距,为主点坐标,同理可以得到右相机图像坐标与三维坐标的关系:
通过标定之后可以得到两个相机之间的外参关系,因此坐标与的关系便可以被得到:
其中和分别为旋转矩阵和平移矩阵。联立上述三个方程便可以根据点和以及标定参数求取三维坐标点 ,具体公式如下:
四、实验测试
本次实验使用的双目相机均为海康威视的200w像素工业相机,投影仪为DLP 4500,触发为DLP发生信号同时触发双目相机。
1. 双目标定(基于棋盘格)
本次测试使用棋盘格进行双目系统的标定,一共标定了7组不同姿态的标定板,通过Matlab的工具箱得到标定的重投影误差为0.06 pixel。
2. 相位计算(基于相移+补码格雷码)
本次测量使用四步相移+补码格雷码的编码方式进行绝对相位的求取,双目图像的绝对相位求取如下图所示:
3. 三维点云重建
通过前述的三维坐标恢复公式,得到的三维点云如图10所示。测量通过评定误差1um的精度球,测量误差分布在0.02-0.05 mm。如有问题,欢迎交流。如有整套代码需求可以点击双目结构光代码。