摘要
特征提取和匹配是许多计算机视觉任务的基本部分,例如二维或三维物体检测、识别和配准。众所周知,二维特征提取和匹配已经取得了很大的成功。遗憾的是,在3D领域,由于描述能力差和效率低,目前的方法无法支持3D激光雷达传感器在视觉任务中的广泛应用。为了解决这一局限性,我们提出了一种新的3D特征表示方法:用于3D LiDAR点云的线性关键点表示,称为LinK3D。LinK3D的新颖之处在于它充分考虑了LiDAR点云的特点(如场景的稀疏性、复杂性),并用其健壮的相邻关键点来表示当前关键点,这对当前关键点的描述提供了强大的约束。提出的LinK3D已在两个公共数据集(即KITTI和Steven VLP16)上进行了评估,实验结果表明,我们的方法在匹配性能方面大大优于现有技术。更重要的是,LinK3D显示了出色的实时性能(基于LiDAR的10 Hz频率)。LinK3D从64射线激光束采集的点云中提取特征平均只需32毫秒,在配备Intel Core i7@2.2 GHz处理器的笔记本电脑中执行时,匹配两次LiDAR扫描只需约8毫秒。此外,我们的方法可以广泛扩展到各种三维视觉应用。在本文中,我们将LinK3D应用于3D注册、LiDAR里程计和地点识别任务,并与最先进的方法相比取得了具有竞争力的结果。
关键词:三维激光雷达点云,特征提取、匹配、高效,可扩展到三维视觉任务。
图1. 描述了LinK3D的核心思想和匹配结果。图1展示了基于LinK3D两次激光雷达扫描的匹配结果,其中绿线表示有效的匹配项。当前关键点的描述符用其相邻的关键点表示,描述符的每个维度对应一个扇区(180个扇区对应180个维度)。第一个维度对应当前关键点最接近的关键点所在的扇区,其他维度对应逆时针排列的区域。如果扇区中有关键点,则搜索扇区中最接近的。
提出的方法
我们方法的流程图主要由两部分组成:特征提取(即关键点提取和描述符生成,如图 2 所示)和特征匹配。如图 2 所示,首先提取LiDAR扫描的边缘点,然后将其输入边缘关键点聚合算法,在该算法中提取稳健的聚合关键点,以便随后生成描述符。然后,描述符生成算法首先建立距离表和方向表,用于快速描述符生成。我们将在以下三个小节中分别详细介绍所提出方法的每个部分。
图2. 展示了LinK3D在关键点提取和描述方面的工作流程。首先,输入的点云被关键点提取算法处理。然后,执行LinK3D描述以获得高效的关键点描述符。
A. 关键点提取
1) edge边缘点提取:在关键点提取中,我们使用类似于2D图像关键点的策略,即角点或边缘点。在这里,我们还提取了代表性的边缘点作为三维激光雷达扫描的关键点。激光雷达扫描大致可分为两种类型:边缘点和平面点。边缘点和平面点之间的主要区别在于点所在的局部曲面的平滑度。
图3. (a) 中的分散边缘点(用红色虚线框标记)和聚集边缘关键点(用蓝色虚线框标识)。聚集边缘关键点就是我们所需要的。(b)显示了通过算法1提取的边缘关键点。
2) edge关键点聚类:然而,在收集边缘点的过程中,通常有许多点高于阈值但不稳定。具体来说,这些不稳定点出现在当前扫描中,但可能不会出现在下次扫描中。如图 3a 中红色虚线框所示,不稳定点通常是分散的。如果我们利用这些点进行匹配,很可能会导致不匹配。因此,有必要过滤掉这些点并找到正的有效边关键点。如图 3a 中的蓝色虚线框所示,有效的边缘关键点通常垂直分布在簇中。
具体做法是,我们首先将以LiDAR坐标系原点为中心的水平面平均划分为 扇区,然后只对每个扇区中的点进行聚类。应该注意的是,当我们在实验中设置 时,我们的算法运行速度大约是经典KMeans的25倍[47]。提取的边缘关键点如图 3b 所示。可以观察到,我们的算法可以过滤掉无效的边缘点,并找到正的有效边缘关键点。此外,计算每个簇点的质心并将其命名为聚合关键点,该关键点可以表示其簇并用于后续的描述符生成。
B. 描述符生成
图4展示了以当前关键点ko为中心的水平平面被划分为180个扇形区域。我们首先搜索k0的最近关键点k1,然后主方向是从k0到k1的向量。此外,第一个扇形区域由主方向对半分。其他区域按逆时针顺序排列。当前关键点(Current Keypoint,CK)是指正在处理的LiDAR扫描中的一个关键点。即每个关键点都有对应的描述符。100个关键点有100个描述符。
在描述符生成中,首先将所有聚集关键点投影到水平面,这样可以消除聚集边缘关键点沿垂直方向分布不均匀所带来的影响。为了快速匹配,我们的LinK3D表示为多维向量,它使用0或当前关键点与其相邻关键点之间的距离作为每个维度。如图 4 所示,我们将水平面划分为以当前关键点 k0 为中心的180个扇区,描述符的每个维度对应一个扇区。受二维描述符SIFT[10]的启发,该描述符搜索主方向以确保姿势不变性,LinK3D的主方向也被搜索并表示为从当前关键点 k0 到其最近关键点 k1 的方向矢量,该关键点位于第一扇区。其他扇区按逆时针顺序排列。然后,在每个扇区中搜索最近的关键点 k0 。如果存在最近的关键点,则使用当前关键点和最近关键点之间的距离作为描述符的相应值,否则,该值设置为0。
在此过程中,从当前点到其他点 的方向表示为 ,我们使用和主方向之间的角度来确定 属于哪个扇区。该角度的计算公式为:
其中 定义为:
上述算法有两个主要问题。一个问题是算法对最近的关键点敏感。如果存在异常关键点的干扰,匹配将失败。另一个问题是,我们必须经常计算两点之间的相对距离和方向,因此会有大量重复计算。为了解决第一个问题,我们搜索一定数量的最近关键点(具体数量在实验部分评估)。假设我们搜索3个最接近的关键点,并计算出相应的3个关键点描述符,如图 5 所示。Des1对应于最接近的键点,Des3对应于第三个最近的键点。我们根据这三个距离值定义优先级。Des1的优先级最高,因为它距离最近,Des3的优先级最低,因为它距离最远。最终描述符中每个维度的值对应于其中优先级最高的非零值。如图 5 中红色虚线框所示,Des1有一个非零值 ,那么由于它的高优先级,它在最终描述符中的对应值也被设置为 。其他两种情况如图 5 中的紫色和黑色虚线框所示。它大大提高了LinK3D对异常值的鲁棒性。为了解决第二个问题,我们建立了距离表,所有关键点的方向表都可以通过直接参考表来获得,以避免重复计算。
图5 最终描述符中每个维度的值对应于Des1、Des2和Des3中具有最高优先级的非零值。
C. 匹配两个描述符
在本节中,我们将介绍匹配算法。为了快速测量两个描述符的相似性,我们采用类似于汉明距离的计算方法来定义两个LinK3D描述符的相似分数。它们都计算相应的尺寸。然而,与汉明的异或运算不同,我们只计算了两个描述符的非零维数。具体来说,在两个描述符中计算相应非零维度之间的差值的绝对值。如果该值低于0.2,则相似性分数增加1。如果匹配的相似性分数高于阈值,则认为匹配有效。具体匹配算法见算法 3。
实验
在本节中,我们对我们的方法和最先进的功能进行了一些基本测试和比较,然后评估了一些扩展应用,以证明我们方法的优越性。