文章:Fast Range Image-Based Segmentation of Sparse 3D Laser Scans for Online Operation
代码:https://github.com/PRBonn/depth_clustering
1)摘要
从 3D 距离数据中分割对象是移动机器人领域的一个重要主题。在动态环境中导航的机器人需要注意可能发生变化或移动的物体。将激光扫描分割成单个对象通常是执行进一步分析之前的第一个处理步骤。在本文中,我们提出了一种快速方法,该方法将 3D 范围数据分割成不同的对象,在线运行,并且计算需求很小。该方法避免了 3D 点云的显式计算,而是直接在 2D 距离图像上执行所有计算,从而可以对每次扫描进行快速分割。该方法的另一个相关方面是,即使 3D 数据稀疏,也可以分割对象。这对于新型 Velodyne Puck 等扫描仪非常重要。在 C++ 和 ROS 中实施了该方法,并使用不同的 3D 扫描仪对其进行了全面测试。实验表明,该方法可以在单个内核的移动 CPU 上以超过 100 Hz 的频率运行 64 光束 Velodyne 扫描仪,同时产生高质量的分割结果。
2)创新点
①提出一种不依赖时间信息的单帧稀疏点云对象分割算法;
②提出一种能够描述相邻点之间深度变化的角度特征,并给予该特征实现了点云聚类;
③该方法能够处理相离很近的对象,比如并排走的两个人。
3)算法结构
A 距离图像生成
这项工作侧重于快速 3D 距离扫描分割,以便在配备旋转扫描仪的移动机器人上进行在线处理,例如具有 16、32 或 64 个光束的三种流行的 Velodyne 扫描仪之一。传感器的分辨率,尤其是垂直传感器的分辨率,会影响分割问题的难度。对于每对相邻点,基本上必须确定激光束是否从同一物体反射。
然而,在作者的方法中,避免了显式创建 3D 点云,而是使用激光距离图像进行计算,例如,Velodyne 扫描仪是圆柱形图像。这有两个优点:首先,可以直接在 2D 图像范围内利用明确定义的邻域关系,这使得分割问题更容易。其次,避免了 3D 点云的生成,这使得整体方法的计算速度更快。
大多数激光测距扫描仪将每束激光的单独测距读数作为原始数据,并带有时间戳和光束方向。这允许直接将数据转换为距离图像。图像中的行数由垂直方向的光束数定义,即 Velodyne 扫描仪的 16、32 或 64。列数由扫描仪水平扫描视场角度读数给出。这种虚拟图像的每个像素都存储了从传感器到物体的测量距离。为了加快计算速度,甚至可以考虑将水平方向的多个读数合并为一个像素。但是,作者并未对本文报告的所有时间进行此操作。
在整个工作中,作者假设车辆在地面上移动,并且知道传感器相对于车轮的方向。因此,可以通过分析距离图像的列来快速获得地平面的估计值,这可以看作是接地平面估计的近似值。然后,从范围图像中删除地面。
B 特征计算
文中方法的关键组成部分是能够估计任意两个激光束的哪些测量点来自同一物体。下图 的顶部图像显示了一个示例场景,其中两个人在骑自行车的人前面走得很近,骑自行车的人从他们和停放的汽车之间经过。此场景是使用 Velodyne VLP-16 扫描仪记录。左下角的图像显示了从位于 O 处的扫描仪测量的两个任意点 A 和 B 的插图,插图中的激光束 OA 和 OB。在不失去通用性的情况下,作者假设 A 和 B 的坐标位于一个坐标系中,该坐标系以 O 为中心,y 轴沿两个激光束中较长的一方定向。作者将角度β定义为激光束与在离扫描仪较远的点(在示例中为 A)连接 A 和 B 的线之间的角度。直观地说,角度β将同一对象上的两个点可能具有的深度距离与到扫描对象的距离相关联,这允许在单个参数中优雅地捕获此信息。在实践中,角度 β 提供了有价值的信息,以确定点 A 和 B 是否位于同一对象上。
鉴于激光距离测量的性质,已知距离 ||OA||,||OB||,因为它们对应于对应点的扫描距离d1和d2。
其中,α为相邻激光束的角度,即激光雷达的叫分辨率。
角度β背后的逻辑是,对于大多数对象来说,它保持相对较大,并且只有在给定距离图像的相邻点之间的深度差大大大于它们在通过扫描仪的角度分辨率定义的图像平面中的位移时,它才会采用较小的值。这种逻辑使作者能够定义一个参数 θ,作为角度β的阈值。此阈值能够决定是将距离图像中的任意两个点分离到单独的群集中,还是将它们合并为一个。如果 β 小于用户定义的值 θ,则认为深度变化太大,并决定将点分成不同的段。否则,这些点将被视为位于同一对象上。
基于阈值的 β 标准显然是一种启发式方法,虽然能够适用大多数情况。但是,在扫描仪靠近墙壁的情况。对于远离扫描仪但仍在墙壁上的端点,角度β会很小,因此墙壁可能会被分成多个段。这基本上意味着,如果 β 小于 θ,那么我们很难推断我们是看到源自两个不同物体的点,还是只是位于几乎平行于光束方向的墙壁上。然而,尽管存在这个缺点,作者的实验表明该方法在实践中仍然有用,并且上述行为很少发生,如果是这样,通常只会导致特别倾斜的平面物体的过度分割。
考虑到分离阈值,我们直接在范围图像中进行分割。如果两个端点是深度图像中的邻居,并且它们之间的β角大于 θ,则将它们视为源自相同对象的邻居。鉴于邻域的定义,我们可以将分割问题视为利用深度图像的结构和对β的约束找到连接的 2D 分量的问题。
算法1 描述了作者用来查找连通分量的算法。使用复杂度为 O(N) 的直通滤波器的变体,其中 N 是像素数。该算法保证最多访问范围图像中的每个点两次。
作者从距离图像的左上角开始,从上到下、从左到右遍历每个像素(第 4-5 行)。每当遇到未标记的像素(第 6 行)时,都会从该像素开始广度优先搜索(第 7 行)。此搜索的目标是标记此组件的每个像素。为此,广度优先搜索 (BFS) 使用一个队列(第 10-12 行)和一个由左、右、下和上像素组成的 N4 邻域(第 14 行)。鉴于处理图像的顺序,这里不需要考虑上部像素。是否应将 N4 邻域中的某个点添加到 BFS 队列的决定是根据相邻点和当前点生成的角度β(第 15-18 行)做出的。此过程可保证整个连接的分量将收到相同的标签。一旦 BFS 队列为空,我们将继续按顺序遍历范围图像,直到到达新的未标记点。
4)实验
上表为在移动设备和桌面设备上的单帧处理效率。
上图是使用文章方法和来自 PCL 的欧几里得分割,从 64 束 Velodyne 数据集中分割大约 2,500 次扫描的时间。
上图:使用 64 光束 Velodyne 拍摄的室外场景的点云(显示仅用于说明)。中:文章方法的分割,即使对于远处的对象也能提供正确的分割,同时不会对近处的对象进行低分割。底部:由基于网格的方法提供的分割,单元格大小设置为 0.2。有许多汽车位于离传感器较远的地方,缺少传感器,并且有一辆汽车与灌木丛合并。
左上:对使用 16 光束 Velodyne 拍摄的示例户外场景的分割。文中的方法能够找到基于网格的方法遗漏的对象,同时正确分割彼此靠近的人。左下:基于网格的分割结果。一些对象丢失,左下角的人物分段不足。右图:使用 16 光束 Velodyne 录制的室外场景,表明文中的方法能够分割多个小物体(如自行车)彼此非常靠近的复杂场景。
5)结论
在本文中,作者提出了一种快速且易于实现的 3D 距离数据分割方法。该方法直接对距离图像进行操作,不需要在 3D 空间中显式计算点云。这简化了单个范围扫描的分割,因为可以利用距离图像给出的邻域关系。这使得算法能够成功地分割稀疏的激光扫描,例如从 16 光束 Velodyne 扫描仪记录的激光扫描。该方法利用了连通分量的高效计算,并且只有一个参数,该参数甚至具有物理动机。作者在不同的数据集上实施和评估了该方法,并提供了与其他现有技术的比较。在移动 i5 CPU 上,作者以 116 Hz 到 416 Hz 的平均帧速率以及 i7 CPU 上高达 667 Hz 的平均帧速率获得分割结果。