王慧颖吴琦鸣王兆强
(1.中国消防救援学院基础部,北京 102202;2.火箭军工程大学基础部,陕西 西安 710025)
视觉SLAM 技术可以实现智能机器对场景环境的观测确定自身的运动轨迹,同时构建出场景地图[1]。 SLAM 技术的实现方式与难度和传感器的形式与安装方式密切相关。 比较成熟的视觉SLAM 系统有ORB-SLAM[2]、LSD-SLAM[3]、DSO[4]等。 基于目前的视觉SLAM 在静态环境下技术已发展较成熟[5],但离实际应用还存在着距离,因为往往在实际场景中,尤其是室外存在着可移动的人、汽车和自行车等,那么针对于静态环境的SLAM 应用于动态场景中会被误认为是相机在运动,从而大大降低了其定位和构图的精度。 动态场景中的运动物体会打破视觉SLAM 的静态环境假设,因此动态场景下提高视觉SLAM 精度成为一个重要的研究方向[6]。
运动着的物体行为相对比较复杂和具有不可预测性,目前研究对动态场景中的运动物体进行建模是先找出场景中动态区域,然后在位姿估计中滤除这部分。 因此动态场景区域的正确分割对于视觉SLAM 在动态场景下的定位与构图精度的提升是非常重要。 动态场景区域的分割往往采用多传感器融合或者单个视觉传感器来完成。 然而多传感器融合[7-8]可以增加数据的维度,但在数据融合、传感器标定、搭载小型设备等方面还存在多个难题。 单个视觉传感器方案中存在运用深度学习检测运动物体[9-10],但深度学习方法仅仅能够识别出移动的人,无法与同样移动的椅子进行区分,该方法对计算机硬件有着较高的要求。
动态场景下,稠密光流算法也可以对动态场景进行分析[11-12]。 欧阳玉梅[13]将稠密光流法应用于运动物体检测,采用Gunner Farneback 稠密光流法计算各像素点位移矢量的光流矩阵,从而检测运动物体,但该算法的计算量大,难以实现实时计算。
掩模[14]是指用选定的图像、图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。 用于覆盖的特定图像或物体称为掩模。 掩模可以用于提取感兴趣区域、屏蔽某些区域或结构特征提出等用途。
基于上述分析,本文提出动态场景下基于图像掩模技术的双目SLAM 算法,该算法可以保证实时性,其硬件成本低,便于携带,并方便搭载在其他设备上。 动态区域掩模分割算法不受视觉SLAM 定位结果影响。
本文提出的改进的ORB-SLAM 算法采用双目视觉SLAM 系统,利用ORB-SLAM 算法检测出运动物体提取动态特征点,将检测出的运动物体区域作为图像掩模并对该区域进行分割,然后剔除特征匹配中动态特征点,保证相机的定位和构图不受动态场景中的运动物体的影响。 算法流程如图1 所示。
图1 基于图像掩模技术的双目SLAM 算法
式中:σ0,σ1分别为前景和背景的像素数目在整个图像像素数目中的占比;ω0,ω1分别为前景和背景的平均视差值;h 的最大值为分割阈值。 前景和背景分割如2(b)。 将错误分类的静态点剔除后,得到动态特征点检测结果,使用白色点标出,如图2(c)。并将动态特征点所在区域视为运动物体区域,这里将运动物体区域作为图像掩模。
图2 运动物体检测
运用图像分割方法(simple linear iterative clustering,SLIC)[15]和SPS(slanted plane smoothing)[16]算法,对场景区域进行分割,目的是为了获得前景所有动态掩模区域。 对于视差图初始值的计算,利用SGBM(semi-global matching)算法可以得到更快速计算的方案,时长可以从2 s/frame 提升到80 ms/frame,满足实时的计算要求。
输入双目图像。 利用超像素分割算法对图像初始分割,如图3(a)。 为了弥补RGB 图像色彩分布不均的情况,将RGB 转为Lab 色彩空间图像。 每个像素i,利用其颜色(Li,ai,bi)和坐标(xi,yi)得到一个5 维向量(Li,ai,bi,xi,yi),每两个像素的相似性可由它们的向量距离来度量,距离越大,相似性越小。 该算法首先初始化种子点,然后每个种子点的周围空间里搜索距离该种子点最近的若干像素,将它们归为与该种子点一类,通过多次迭代直到所有像素点都归类完毕。 如图3(a)分割结果,其中图像的分割边界对物体轮廓的描述较好。
图3 场景区域的超像素分割
以总代价函数作为目标函数,采用块坐标下降算法优化该目标函数求解最小值,经迭代最终给出每个超像素块对应的斜面视差模型和边界类型,边界类型有相互遮挡型、共面型以及铰链型,共3 种类型。 建立总代价函数,如下:
①当前像素的颜色与分割块中的平均颜色越接近,则其代价值Ccolor越小,其计算公式为:
式中:ϕl为当前像素p在当前分割块l上的斜面参数,ϕi=(Ai,Bi,Ci),fp为当前像素p的局外点所在的位置,如果符合当前分割块的斜面参数,则fp=0;如果不符合则fp=1,视差代价为λd。
④相邻间的分割块lp与lq像素点的数量越少则边界长度代价Cbou越小,其计算公式:
如果两个分割块li和lj边界为共面或铰链型,则边界上像素p的视差值可以近似由斜面参数ϕi和ϕj得出相邻的两个分割块li和lj的视差值;如果两个分割块li和lj边界为遮挡型,其遮挡块的视差值大于被遮挡块的视差值,这里γpen=0。
场景分割优化结果如图3(b)所示,图中标的分割线为场景分割后的遮挡边界,可以看出场景中主要区域轮廓都能得到正确分割。
基于上述成果,接下来图像进行动态区域掩模分割,本文利用种子点生长的方法,把运动物体的特征点与区域轮廓进行关联,用矩形框标记出运动物体所在的区域,该关联算法如算法1 所示。
算法1 Rectangular box of dynamic region selection
算法将场景动态区域掩模与区域中的动态特征点进行对应实现关联,结果如图4(a)所示,其中圆点和三角点是动态特征点和生长交点,分割线为场景分割后的遮挡边界。 本文通过动态特征点和生长交点来拟合最小多边形,给出最小包围矩形框,进而得到场景区域中动态区域掩模分割结果,如图4(b)所示,白色框为动态区域掩模。
图4 动态区域掩模分割
提升动态场景中双目SLAM 算法定位和构图的精度,本文在ORB-SLAM 算法中引入场景中动态区域掩模分割和剔除动态区域的功能,从而降低场景中运动物体对算法精度的影响。
ORB-SLAM 算法主要使用跟踪、地图构建、闭环检测三个线程[17-18]。 ORB-SLAM 算法将ORB 特征点输入,利用光束平差法剔除误差较大的特征点,从而减少场景中较远的运动物体的影响,但此方法对离相机较近的运动物体,其动态特征点较多对相机位姿的估计精度会大大降低。 因此,本文在跟踪线程中,为每一帧场景图像都建立图像掩模,那么ORB-SLAM 在输入关键帧时也将与其对应的图像掩模保存下来,运用这些关键帧形成点云地图时,便可以利用图像掩模将动态区域剔除,从而绘制出静态背景环境,最后利用静态特征点进行场景定位和构图,该操作大大降低了运动物体对双目视觉SLAM系统的影响。
通过实验来验证本文提出算法的定位和构图的精准度。 采用室外双目相机和pioneer 移动机器人小车一体化实验平台在某小区获取实拍数据。 采用计算机硬件为惠普笔记本电脑(CPU 为Intel i7-4720HQ,主频最高为2.6 GHz,内存8G,Windows 系统)对双目实拍场景图片进行处理实现室外机器人移动状态下的动态区域掩模分割,例如对行走的人、行驶的车或其他运动物体,算法能够实时用矩形框将场景区域中动态区域掩模完整框选出。
图5(a)为实拍室外场景中出现行走的人(左)和静止的人(右),图5(b)为实拍室外场景中出现骑车的人。 采用本文算法对实拍室外场景图5 进行动态区域掩模分割,算法检测结果采用白色框标出,黑色框为手动标出真实动态区域。 从图中可以得出本文提出的算法能够准确标注出场景区域中的动态区域掩模部分。
图5 室外动态场景的动态区域掩模分割
本文设计3 个实验将双目相机的场景定位和构图的实验结果看作改进SLAM 算法精度提升的检验标准。 实验一设计双目机器人处于静止状态,双目相机视野中存在运动物体(行人)。 实验二设计的方案是双目机器人直线行走,视觉场景中始终有运动物体(行人)。 实验三设计的方案是双目机器人行走轨迹是一个12 m×10 m 的矩形轨迹。 通过上述实验来验证本文提出的改进SLAM 算法在动态场景下的效果。
实验一设计的方案是行人在静止的双目机器人前方来回行走。 如图6(a)所示,由于场景中动态特征点导致相机定位轨迹出现漂移,场景构建误差大,跟踪481 帧,平移RMSE 为0.128 7 m。 图中场景构建中黑色点为稀疏地图,灰色点为双目相机当前位置,灰色曲线为漂移轨迹,场景构建失真且存在动态特征点。 如图6(b)所示,通过本文算法采取动态区域掩模分割和完全剔除动态特征点,并利用环境中静态特征点进行定位,可以得到相对较准确的定位结果,显然图中点云地图与场景环境相符。
图6 双目相机静止条件下的定位误差对比图
实验二设计的方案是双目机器人直线行走,视觉场景中有持续运动物体(行人)。 图7(a)为相机在动态场景下分别采用ORB-SLAM 算法和本文算法进行直线运动轨迹的定位结果,图中给出的真实数据是以导航系统RTK(real-time kinematic)信号输出的定位结果并作为参考数据;图中ORB-SLAM 算法定位的结果,从图7(b)中重建出的点云地图出现较多杂点,相机定位产生严重漂移,该算法受到运动物体的影响较大;图中本文算法定位轨迹,其定位轨迹漂移现象大幅度减少,图7(c)中地图重建杂点较少,点云地图创建较准确。 两种算法直线定位轨迹绝对误差如表1 所示。
图7 室外机器人在实验1 中定位结果
表1 直线定位轨迹的绝对误差
从实验一中,本文算法在动态场景中的定位精度能够提高76.1%,该值的计算公式如下:
式中:κ为定位精度提高值,τ和m分别为ORBSLAM 算法和本文算法在实验一中的定位误差。
实验三设计的方案是双目机器人行走轨迹为12 m×12 m 的矩形轨迹,视觉场景中有持续运动的多目标(行人)。 根据本文提出的算法需要将动态场景中的动态区域掩模分割,然后剔除ORB 特征点,如图8 所示。
图8 实验二动态区域处理结果
为了更好的验证本文算法的可靠性,实验对动态场景下双目机器人行走定位轨迹进行5 次重复测量,如图9 所示。 图中“Δ”为轨迹真实数据,黑色粗线(本文算法)定位轨迹相比黑色细线(ORB-SLAM算法)的定位轨迹误差小,定位更准确。
图9 本文算法与ORB-SLAM 算法的重复5 次实验定位轨迹对比
利用本文提出的改进SLAM 算法对双目机器人在动态场景下采集的前后帧图像的处理时间进行测试。 测试步骤包括:①动态特征点检测;②场景区域分割;③动态区域掩模分割。 算法运行时间测试结果如表2 所示,总体平均下来耗费时间为85.2ms,该算法在跟踪线程上处理速度可达4.7 frame/s。
表2 改进SLAM 算法图像处理时间测试结果
本文提出了基于图像掩模技术的双目SLAM 算法能够提高室外定位和构图精度。 该方法以前后帧的特征点到极线的距离与阈值之间关系作为动态特征点的判断依据,从而在图像中得出动态特征点,再者利用图像分割法和SPS 算法对场景区域进行分割,融合上述图像处理成果,通过计算在图像中准确标出动态区域掩模分割框,再利用图像掩模剔除图像中动态特征点,利用得到的静态环境来获得场景定位及构图结果。 通过对改进算法的实验测试结果得出,在双目相机按照设定轨迹移动的情况下,在动态场景中的定位精度提高76.1%,构图精度显著提高,改进SLAM 算法图像处理整体耗费时长符合实时性要求。 因此,本文提出的改进SLAM 算法在动态场景下是有效的。