关键词:分割,三维激光,在线,深度图像,稀疏数据,点云
总结:在场景中提取单个对象的能力对于大量自主导航系统(例如移动的机器人或自主汽车)来说是关键。在动态环境中导航的这种系统需要知道可能改变或移动的对象。在大多数感知线索中,将当前图像或激光扫描预分割成单个对象是执行进一步分析之前的第一个处理步骤。在本文中,我们提出了一种有效的方法,首先从扫描中删除地面,然后分段的三维数据在一个范围内的图像表示成不同的对象。我们工作的一个重点是几百赫兹的快速执行。我们的实现有小的计算需求,使它可以在大多数移动的系统上在线运行。我们明确避免了3D点云的计算,直接在2.5D范围图像上操作,这使得每次3D扫描都能快速分割。这种方法还可以很好地处理稀疏的3D数据,这对于新型Velodyne VLP-16扫描仪等扫描仪非常重要。我们用C++和ROS实现了我们的方法,使用不同的3D扫描仪进行了彻底的测试,并将发布我们实现的源代码。我们的方法可以在帧速率,大大高于传感器,同时只使用一个单一的核心的移动的CPU,并产生高质量的分割结果。
图1:左:从Velodyne VLP-16扫描仪记录的稀疏3D范围数据生成的对象(如人、汽车和树木)的分割。颜色对应于不同的部分。右:用于实验的Clearpath Husky机器人。
1、引言
RGB和多光谱数据中的图像分割是摄影测量图像分析、计算机视觉和遥感中的常见问题。分离三维激光测距数据中的单个物体也是移动的机器人或仪表汽车自主导航的重要任务。在未知环境中导航的自主车辆面临推理其周围环境的复杂任务,参见(GOLOVINSKIY & FUNKHOUSER,2009; HEBEL & STILLA,2008; HIMMELSBACH等人,2010年; KüUMMERLE等人,2013; STEINHAUSER等人,2008; TEICHMAN & THRUN,2012; WANG & SHAN,2009;乌尔姆等人,2008年)。可能存在限制机器人可能的动作或可能干扰机器人自身计划的对象。因此,机器人周围环境的解释是鲁棒操作的关键。虽然一些方法专注于在动态场景中找到特定对象(HANEL等人,2015; MENZE等人,2015; LEIBE等人,2008),大多数感知流水线在执行进一步的解释之前将环境分割成单独的对象。因此,我们认为需要一种有效的3D范围数据在线分割方法,因为这允许机器人直接对其周围的单个物体做出反应。这种分割应该是真实的,因为系统需要在数据可用时对其所看到的内容进行推理,以便做出适当的反应。
从原始传感器数据中进行对象分割在动态环境中映射或操作时尤其相关。例如,在有汽车和行人的忙碌街道中,地图可能受到由环境的动态性质引起的错误数据关联的影响。在扫描配准和映射期间实现关于这些对象的更好推理并且潜在地忽略动态对象的关键步骤是将3D范围数据分割成不同的对象,使得它们可以被单独跟踪,参见(DEWAN等人,2016年)。
除了相当昂贵的地面激光扫描仪外,还有针对移动的机器人应用的精度较低且较便宜的扫描仪。一个例子是Velodyne的16光束激光雷达,它越来越受欢迎,可以安装在相对低成本的平台上。如果我们将16波束激光雷达提供的数据与64波束变体甚至地面扫描仪提供的数据进行比较,我们观察到垂直角分辨率大幅下降。这对在这样的3D数据上操作的分割算法提出了若干挑战。稀疏的点云导致相邻点之间的欧氏距离增加,即使它们来自同一对象。因此,这些稀疏的3D点使其更难以推理分段。随着物体和传感器之间距离的增加,情况变得更加困难。
本文的贡献是一种将地面与场景的其余部分分离的稳健方法,以及一种快速有效的3D距离数据分割方法,这些数据来自现代激光测距仪(如Velodyne扫描仪)。为了实现最终的分割,我们首先进行稳健的地面分离,可以快速可靠地检测地面。与其他几种方法不同的是,地面可以有轻微的曲率,不必完全平坦。我们也不使用任何类型的子采样,并为距离图像的每个像素确定它是否属于地面。图1中描述了一个去除地面的分割示例,其中使用来自Velodyne VLP-16扫描仪的数据正确地分割了人和车。
我们的分割方法提供了有意义的分割,并且运行速度比扫描采集快数倍。即使在移动CPU上,我们也可以处理超过70赫兹(64线)或250赫兹(16线)的Velodyne扫描,因此比获取的扫描速度更快。我们通过在柱面距离图像上执行所有计算来实现这一点。这种方法是有利的,因为距离图像通常是小的、密集的,并且隐式地保持邻域信息。此外,我们的方法适用于提供相对稀疏的点云的扫描仪,因为这些云仍然可以表示为密集的距离图像。
本文是我们最近发表的关于3D距离数据分割的会议论文(BOGOSLAVSKYI和STACHNISS,2016)的扩展。在这项工作中,我们增加了稳健的地面去除,并提供了扩展的实验评估。
2、相关工作
3、基于距离图像的地面去除
在执行对象分割之前,我们从扫描中去除地面。一种标准的地面移除方法只需丢弃低于车辆的所有3D点(假设我们知道传感器安装在移动底座/机器人上的位置)。虽然这种方法在简单的场景中可能有效,但如果车辆的俯仰或侧倾角不等于零,或者如果地面不是完美的平面,它就会失败。使用基于RANSAC的平面拟合可能会改善这种情况,但即使使用这种方法,非零曲率可能仍然是一个挑战,操作可能会很耗时。因此,我们采取了一种不同的方法。
大多数激光距离扫描仪以每个激光光束的单个距离读数的形式提供原始数据,并带有时间戳和光束的方向。这使我们可以直接将数据转换为距离图像。图像中的行数由垂直方向上的波束数定义,即Velodyne扫描仪的波束数为16、32或64。列数由激光每360°转的距离读数给出。这样的虚拟图像的每个像素存储从传感器到对象的测量距离。为了加快计算速度,如果需要,甚至可以考虑将水平方向上的多个读数合并为一个像素。
在我们的实现中,我们使用上述距离图像,并直接从激光扫描仪的原始测量构建它们,而不是计算3D点云。然而,如果使用不同的激光扫描仪或不同的设备驱动程序,在每次旋转仅提供3D点云而不提供单个距离测量的情况下,您可以将3D点云投影到圆柱形图像上,计算每像素的欧几里德距离,然后继续我们的方法。这将使整个方法的计算需求增加大约2倍,但仍然允许相对较快的分割。
为了识别地平面,我们做了三个假设。首先,我们假设传感器大致水平安装在移动底座/机器人上(这一假设可以放松,但解释将被证明是更复杂的)。其次,我们假设地面的曲率很低。第三,我们假设机器人至少在距离图像的最低行的一些像素中观察到地平面(对应于激光扫描靠近机器人的地面)。
图2:左上:范围图像的一部分。左中:通过显示α角生成的图像。左下角:应用Savitsky—Golay平滑后的角度。右上角:α角的图示。右下角:左图中标记的α角列的平滑图示。
图3:从上面看到的场景示例,地面标记为浅蓝色。
有了这些假设,我们首先将距离图像R的每一列c转换成一堆角度,其中每个角度表示连接两个点A和B的线的倾斜角,这两个点分别来自距离图像的相邻行r-和r中的两个距离读数
和
,如图2的右上角所示。知道垂直连续的单个激光的两个距离读数,我们可以使用如下三角规则来计算角度
:
其中和
是对应于r-11和r行的激光的垂直角。
请注意,每次α计算需要两个距离读数,因此α角度堆栈的大小比距离图像中的行数小1。然后,我们将这些角度的所有堆叠视为矩阵,其中r和c是角度的行和列坐标,单位为度,距离为米,对应于距离图像的距离读数。
不幸的是,Velodyne HDL-64 等 LIDAR 传感器在距离测量中产生大量异常值,LEONARD 等人的工作中对此进行了更详细的讨论(2008),这影响了图 2 中角度 α 的计算。因此,我们需要一种方法来消除此类异常值。 WEINMANN & JUTZI (2015) 通过计算距离图像每个像素的小局部邻域的特征来解决这个问题,以检测读数是否可以被视为可靠。 这种方法不仅可以过滤掉不可靠的读数,还可以过滤掉对象边界上的点。 由于这些点对于执行分割很重要,因此我们从所有可用数据点计算相应的角度,然后平滑计算的角度。 为了实现这种平滑,我们将 Savitsky-Golay 滤波器应用于的每一列。 该滤波器执行最小二乘优化,以将给定窗口大小的局部多项式拟合到数据。 SAVITZKY & GOLAY (1964) 在他们的工作中表明,可以避免多项式的显式最小二乘拟合,并根据预先计算的系数计算有效的近似值,从而提高计算效率。
在将 Savitsky-Golay 过滤器应用于矩阵的列后,我们对矩阵
进行地面标记,从我们期望属于地面的条目开始,并使用广度优先搜索将相似的组件标记在一起。 广度优先搜索(BFS)是一种流行的图搜索或遍历算法。 它从图的给定节点开始,首先探索直接相邻的节点,然后再移动到下一级邻居。 在我们的方法中,我们考虑网格上 N4 邻域的计算角度 α 的差异,以决定矩阵
的两个相邻元素是否应通过广度优先搜索标记在一起。 为此,我们选择阈值 Δa,在实验中设置为 5°。
如果相应的小于预定义的角度(在我们当前的实现中为 45°),我们首先将最低行的每个元素标记为地面,即,我们不标记任何几乎垂直的物体,例如墙壁。 令集合 G 为第一行中我们标记为地面的所有列索引的集合。
对于每个 c ∈ G,我们使用从 开始的 BFS 标记连接的分量作为地面,如算法1中的过程 LabelGround 中所示。当我们处理完所有 c ∈ G 时,图像中的所有地面像素都已被标记为这样。 图 3 显示了一个示例点云,其中由我们的算法检测到的地面标记为浅蓝色。
4、使用激光测距图像进行快速有效的分割
这项工作的重点是快速 3D 范围数据分割,以便在配备旋转扫描仪的移动机器人上进行在线处理,例如三种流行的具有 16、32 或 64线的 Velodyne 扫描仪之一。 传感器的垂直分辨率对分割问题的难度有影响。 对于每一对相邻点,基本上必须确定激光束是否被同一物体反射。
图 4:我们的方法的说明。 (A) 来自 Velodyne 的点云,仅出于说明目的而显示。 (B) 我们建立了一个不考虑地平面上的点的距离图像,并且 (C) 直接在距离图像中执行分割。 (D) 这使我们能够为不同的部分提供单独的小点云。 不同的对象以随机颜色显示。 范围和标签图像经过缩放以获得更好的可见性。
在我们的方法中,如图 4 所示,我们避免显式创建 3D 点云,并使用激光距离图像(在我们的示例中是 Velodyne 扫描仪的圆柱形图像)执行计算。 这有两个优点:首先,我们可以直接在距离图像中利用明确定义的邻域关系,这使得分割问题变得更容易。 其次,我们避免生成 3D 点云,这使得整体方法的计算速度更快。
我们假设车辆在地面上移动(参见图 1 的设置),并且我们期望传感器相对于车轮大致水平定向。 因此,我们可以通过分析此类距离图像的列来快速获得地平面的估计,如第 3 节中所述。然后将地面从距离图像中移除。
我们方法的关键部分是能够估计任意两束激光束的哪些测量点源自同一物体。我们明确避免特征计算并使用原始传感器数据,为 3D 范围数据的每个点做出决定。
我们提出了一种易于实现、计算快速但有效的方法来查找属于一个对象的组件。为了回答两个激光测量是否属于同一物体的问题,我们使用基于角度的测量,如图 5 所示,并在以下段落中进行描述。
图 5 的左图显示了一个示例场景,其中两个人在一个骑自行车的人前面走得很近,骑自行车的人从他们和一辆停放的汽车之间经过。 该场景是使用我们的 Velodyne VLP-16 扫描仪记录的。 中间图像显示了使用所示激光束 OA 和 OB 从位于 O 的扫描仪测量的两个任意点 A 和 B 的图示。 不失一般性,我们假设 A 和 B 的坐标位于以 O 为中心的坐标系中,并且 y 轴沿着两束激光束中较长的一个。 我们将角度 β 定义为激光束与距离扫描仪较远的点处连接 A 和 B 的线(在我们的示例中为 A)之间的角度。 实际上,角度 β 是确定 A 点和 B 点是否位于同一物体上的重要信息。
图 5:左:示例场景中有两个行人、一个骑自行车的人和一辆汽车。 中:假设传感器位于 O 中,并且线 OA 和 OB 代表两束激光束,则点 A 和 B 会生成一条线,该线可估计物体的表面(如果它们都属于同一物体)。 我们根据角度β对此事实做出决定。 如果 β > θ(其中 θ 是预定义的阈值),我们认为这些点代表一个对象。 右:示例场景中行人的俯视图。 绿线表示 β > θ 的点,而红线表示低于阈值的角度,从而将对象标记为不同。
考虑到激光测距测量的性质,我们知道距离,因为它对应于第一次激光测量
(第二次激光测量)。 我们将这些范围测量分别称为
和
。 人们可以利用这一信息通过应用三角方程来计算 β
我们从距离图像的左上角开始,从上到下、从左到右遍历每个像素(第 4-5 行)。 每当我们遇到未标记的像素(第 6 行)时,我们就从该像素开始广度优先搜索(第 7 行)。 此搜索的目标是标记该组件的每个像素。 为此,BFS 使用队列(第 10-12 行)和由左、右、下和上像素组成的 N4 邻域(第 14 行)。 是否应将 N4 邻域中的点添加到 BFS 队列中的决定是根据邻域与当前点生成的角度 β 来决定的(第 15-18 行)。 此过程保证整个连接的组件将收到相同的标签。 一旦 BFS 队列为空,我们继续顺序遍历范围图像,直到到达新的未标记点。
必须指出的是,连通分量算法并不是这项工作的主要贡献,而是考虑到两个相邻测量的 β 值,它在距离图像分割中的有效应用。 有关连接组件算法不同实现之间比较的更多信息,我们建议读者参考 CABARET 等人。 (2014)。 总的来说,我们的方法产生了一种易于实现且快速的方法,不需要大量参数调整即可实现良好的分割性能。
5、实验评估
图6:在KITTI数据集上获得的时间。X轴描绘了各个点云的索引,而y轴显示了以ms为单位的处理时间。
5.1 运行时间
5.2 分割结果
图7:使用我们的方法从64束Velodyne数据集分割约2500次扫描的时间和PCL的Euclidean分割(无地面去除)。
图8:我们算法的性能计算为场景中所有手动标记的对象数量与所发现的对象数量的分数,与BEHLEY等人(2013)基于网格的分割和PCL提供的Euclidean聚类分割相比,用于30个不同的手动标记的室外3D数据的不同参数。在x轴上,第一个值是我们方法的参数θ,第二个值既作为基于网格的方法的单元大小,也作为欧几里得聚类方法的距离阈值。
图9:顶部:使用64线Velodyne拍摄的室外场景的点云(仅用于说明)。中间:我们的分割,即使是远距离的对象也能提供正确的分割,而不会对近距离的对象进行分割。底部:由基于网格的方法提供的分割,单元格大小设置为0.2。有多辆车位于距离传感器较远的位置,丢失了一辆车、一辆车与灌木丛合并。
6、结论
本文提出了一种快速且易于实施的 3D 激光距离数据分割方法,包括快速地面去除。 我们的方法不是在 3D 空间中操作,而是直接在范围图像上执行所有计算。 这加快了各个范围图像的分割速度,并使我们能够直接利用邻域关系。 它使我们能够成功分割稀疏的激光扫描,例如使用 16线 Velodyne 扫描仪记录的扫描。 我们在不同的公开可用和自我记录的数据集上实施和评估了我们的方法,并提供了与其他现有技术的比较。 在移动 i5 CPU 的单核上,我们以 74 Hz 到 250 Hz 之间的平均帧速率获得分割结果,并且在 i7 CPU 上可以运行高达 667 Hz。 我们将发布可以与 C++ 一起独立使用或作为 ROS 模块使用的代码。
图 10:KITTI 数据集中的一组人的分割示例。
图 11:左上:我们对使用 16 线 Velodyne 拍摄的室外场景示例进行的分割。 我们的方法能够找到基于网格的方法遗漏的对象,同时正确分割彼此靠近的人。 左下:基于网格的分割结果。 一些物体丢失了,左下角的人物也没有被分割。 右图:使用 16 线 Velodyne 记录的室外场景,表明我们的方法甚至能够分割具有多个小物体(例如彼此非常靠近的自行车)的复杂场景。 该场景中基于网格的方法将所有自行车合并为两个大集群。 由于空间原因省略了图像。