凌雄娟,周云郊,彭建喜
(1.佛山职业技术学院电子信息学院,广东 佛山 528000)(2.华南理工大学机械与汽车工程学院,广东 广州 510640)(3.广东省汽车工程重点实验室,广东 广州 510640)
目前,国内外进行乘员姿态动态测量的方法主要包括基于深度学习的方法和基于几何的方法[1]。基于深度学习的方法需要使用大量的RGB序列图像数据集进行学习,基于几何的方法主要通过获得面部特征点的分布与头部旋转角度的关系确定乘员姿态。关于乘员姿态动态测量的研究主要集中于对驾驶员的疲劳检测,利用驾驶员频繁点头、闭眼等反常动作综合判断其疲劳程度,大部分研究均是通过RGB彩色图像实现2D姿态分析。如果涉及到空间测量,则需要使用特殊摄像头,成本较高,且无法满足碰撞实验冲击环境下对乘员运动姿态的3D测量要求。
本文对碰撞实验中乘员姿态进行动态测量,通过平行放置的相同规格相机构建双目立体视觉系统,在乘员上半身关键部位——头、胸、肩粘贴明显的Marker标识,利用块区域匹配法检测和跟踪Marker标识,并结合优化后的半全局匹配(semi-global block matching,SGBM)算法进行立体匹配,获得乘员关键部位在时间序列下的三维空间坐标和空间移动距离,实现乘员姿态非接触、动态的空间测量。
普通单目相机获得的视频信息是二维平面信息,无法测量目标在深度方向上的距离,为了获取乘员姿态的三维空间信息,需要使用两部相机组成双目立体视觉系统,如图1所示。当双目相机从不同的视角拍摄同一个目标点P时,点P在左、右像面上的投影点分别为PL和PR,坐标分别记为(XL,YL)、(XR,YR)。OL和OR为平行放置的左、右相机光心,光心之间的距离记为B,相机焦距为f。
图1 双目立体视觉测距原理图
图中,△PPLPR∽△POLOR,根据相似三角形的性质可以得到下式:
(1)
化简后得到目标点的深度D为:
(2)
式中:|XL-XR|为特征点在左右相机成像平面上的视差。相机的光心间距离B和焦距f通过相机标定获得,特征点的视差利用立体匹配算法计算,就可以得到目标在深度方向的信息。
本文基于上述原理,自主搭建了双目立体视觉系统,使用张正友标定法对双目相机进行标定,然后利用标定结果对图像进行立体校正和畸变消除,最后使用优化后的SGBM算法对左、右相机的视频帧立体匹配,测量乘员的头、肩、胸特征点的空间位置。乘员姿态测量流程如图2所示。
图2 乘员姿态测量流程
采用Q1m相机搭建双目立体视觉系统,将相机固定在仪表板上,如图3所示。两部相机的摄像头型号相同,均为NAC Q1m,帧速率为1 000帧/s,分辨率为1 280像素×1 024像素,可以捕捉到碰撞实验中肉眼无法看到的运动过程,满足碰撞实验冲击环境对硬件的要求。两部相机在采集图像时保证同步。为便于测量乘员的姿态,在乘员的头、肩、胸等关键部位粘贴特征明显的Marker标识,如图4所示。
图3 双目立体视觉系统
图4 乘员关键部位粘贴标识
相机标定是利用物体的三维空间位置与其在成像面上位置的关系来计算相机内部参数与外部参数的过程,通常使用张正友标定法进行标定。其标定原理如下[2]:
(3)
(4)
式中:r1、r2、r3分别为旋转矩阵R在X、Y、Z3个方向上的向量。
使用双目相机同时对同一个位置的棋盘图拍照,利用棋盘图在双目相机中的成像特点,求解出两部相机内部参数矩阵与外部参数矩阵。本文在相机标定时使用自制的10×7规格棋盘图。其中内部参数矩阵用来描述相机的焦距、传感器尺寸、分辨率以及畸变情况,标定后的相机内部参数见表1。
表1 相机标定后的内部参数
使用三坐标测量仪实际测量两部相机X方向距离为309 mm,与平移矩阵t中的X方向距离308.84 mm基本一致。
由于制造与装配误差,两部相机不可能完全相同,其视频帧边缘区域会存在畸变,而且各特征部位不在同一水平线上,没有极线对齐,如图5所示,因此需要对双目相机拍摄的图像进行立体校正。立体校正是利用相机标定后的内部参数矩阵消除透镜的畸变,利用外部参数矩阵将双目相机拍摄的图像极线对齐。立体校正后的图像如图6所示。
图5 立体校正前的原始图像
图6 立体校正后的图像
从图7中可以看到,经过立体校正后的图像基本消除了畸变,而且左、右相机拍摄的图像中各个特征区域均处在同一个水平线上,各个特征位置的Marker标识也在同水平线上,实现了极线对齐。校正后图像的四周存在黑色区域,是由于图像立体校正后未裁剪的原因,不影响后续的姿态测量,属于正常现象。
图7 基于邻域的SGBM单参数优化算法流程
立体匹配是双目立体视觉测量中的关键环节,是左、右相机成像点的像素特征匹配并获取视差计算空间信息的过程。目前常用的立体匹配算法有局部匹配(BM)算法、全局匹配(GC)算法和半全局匹配(SGBM) 算法[3],3种立体匹配算法的优缺点对比见表2。
表2 不同立体匹配算法的优缺点对比
综合考虑,选择SGBM算法作为本文的立体匹配算法。SGBM算法根据视差图和多个方向上扫描线的平滑约束条件,建立能量代价函数,其表达式为:
(5)
式中:E(D)为能量代价;C(p,dp)为像素点p在视差数值为dp时的匹配代价;Np为点p的邻域范围;I为判定函数,分别用0和1代表内部参数的假和真;P1和P2为惩罚系数;q为邻域Np范围内的像素;dq为像素点q的视差数值。使用赢者通吃的方法最小化能量代价函数,计算每个像素点的最优视差值。1个像素点其邻域有8个相邻像素点,可以将二维问题转换为8个方向上的一维问题,每个方向上的像素点匹配代价函数表示为[4-5]:
(6)
式中:Lr(p,d)为像素点p沿r方向上视差值为d时的最小能量代价,k为像素点p左侧的像素点。8个方向上的最小能量代价和S(p,d)为:
(7)
对所有像素点按照上述步骤计算得到最终的视差图。在使用SGBM算法时发现存在以下问题:1) 特征点邻域内的深度变化较为敏感,数值存在突变,匹配特征点时若发生较小偏离,深度可能会差异较大,尤其是弱纹理区域无法得到准确结果;2) SGBM算法在OpenCV中的参数有十几个,每个参数数值的设置原则较为宽泛,逐个调试耗时较长,多次实验后发现视差搜索范围对结果影响较大;3) 当视差搜索范围从较小数值增加到合理范围时,特征点的深度数值开始会发生变化,最终几乎不变,但是无限制增加视差搜索范围会缩小有效搜索窗口的大小,导致特征点深度信息丢失。
针对SGBM算法存在的问题,提出基于邻域的SGBM单参数优化算法,算法步骤如下。
1)输入校正后的视频帧,对视频帧滤波降噪。
2)选择需要计算三维空间位置信息的特征点,比如头部Marker标识,每一视频帧中自动匹配特征点,如果特征点匹配失败,支持手动选择特征点。本文中使用块区域匹配法自动跟踪Marker标识。
3)初始化SGBM参数,判断特征点的深度数值是否合理,规则为:①判断在当前SGBM参数下的深度数值是否超过自定义的阈值;②与上一视频帧中特征点的深度相比是否发生改变,因为乘员在短时间内移动距离不会太大。
4) 若特征点处的深度数值不合理,搜索特征点附近的邻域内深度数值,根据步骤 3) 判断深度是否合理,如果合理则替换为特征点的深度信息。
5) 对所有视频帧重复上述操作。
基于邻域的SGBM单参数优化算法流程如图7所示。
基于邻域的SGBM单参数优化算法可以有效解决邻域内深度的敏感问题,减小深度方向的误差,而且在增加精度的同时,采用SGBM单参数优化能够大大缩减算法的迭代运行时间。使用优化后的SGBM算法对左、右相机的视频帧进行立体匹配,计算各个特征点的三维坐标并计算空间移动距离,结果分别如图8和图9所示。
图8 正向移动过程
图9 各特征点的空间移动距离
实验结果证明,利用双目立体视觉系统结合优化后的SGBM算法,可以测量乘员头、胸、肩位置上Marker特征点在运动过程中的三维空间坐标,并计算移动过程中的空间距离变化。根据上半身关键特征点的空间移动距离判断乘员的运动姿态变化,从而为乘员保护策略的决策与执行提供有价值的信息。
为了验证本文提出的基于邻域的SGBM单参数优化算法的准确性,以头部特征点的空间移动距离为例,对比分析SGBM算法优化前、后测量的空间移动距离,结果如图10所示。
图10 头部特征点算法优化前、后空间移动距离
通过对比发现,本文提出的基于邻域的SGBM单参数优化算法与未优化前测量的空间距离基本一致,但算法优化后测量的空间距离曲线在时间序列上更加平滑。这是因为SGBM算法未优化前对邻域内的深度变化较为敏感,计算的深度数值容易发生突变,尤其是对弱纹理区域无法得到准确结果。
为进一步验证本文算法在空间距离计算上的精度,对本文算法计算结果与实际空间距离测量结果进行对比分析。由于乘员在运动过程中其空间位置很难通过实验室现有的方法有效测量,因此本文使用三坐标测量仪测量各个特征点初始位置即静止时各个特征点的坐标,见表3。
表3 测量的各个特征点初始位置坐标
考虑到三坐标测量仪与双目立体视觉系统的坐标原点不同,因此为了验证双目立体视觉系统对乘员姿态测量的精度,根据表3中各个特征点的坐标,与图9(a)中利用本文提出的SGBM优化算法在初始帧时测量的坐标,计算不同特征点之间的空间距离,见表4。
表4 双目立体视觉系统空间距离测量误差
由表可知,使用双目立体视觉方法测量各个特征点位置的最大误差仅为2.34%。
本文通过搭建双目立体视觉系统,并结合基于邻域的SGBM单参数优化算法,检测和跟踪汽车乘员上半身关键部位头、胸、肩的Marker标识,获得乘员关键部位运动时的三维空间坐标,实现了在实验室中对乘员姿态的非接触、动态测量,为乘员非标准坐姿下的乘员保护提供输入策略,在汽车安全产品的前期研发试验中具有重要的参考价值。该方法虽然测量精度较高、成本低廉,但在实时性上还需继续优化,且在使用时需要粘贴Marker标识,后续研究中可结合身体关键部位的深度学习进行优化,实现自动化识别。