零、摘要
特征提取与匹配是许多计算机视觉任务的基本组成部分,例如二维或三维目标检测、识别和配准。众所周知,二维特征提取与匹配已经取得了很大的成功。遗憾的是,在三维领域,目前的方法由于描述性差、效率低,无法支持三维激光雷达传感器在视觉任务中的广泛应用。为了解决这个问题,论文提出了一种新的三维特征表示方法:三维激光雷达点云的线性关键点表示,称为LinK3D。LinK3D的新颖之处在于,它充分考虑了LiDAR点云的稀疏性、场景复杂性等特点,用其鲁棒的相邻关键点来表示当前关键点,对当前关键点的描述提供了较强的约束。在两个公共数据集(即KITTI, Steven VLP16)上对所提出的LinK3D算法进行了测试,实验结果表明,论文的方法在匹配性能上大大优于目前最先进的方法。更重要的是,LinK3D具有出色的实时性(基于激光雷达的10hz频率)。LinK3D从64射线激光束收集的点云中提取特征平均只需32毫秒,在配备英特尔酷睿i7 @2.2 GHz处理器的笔记本电脑上执行时,匹配两次激光雷达扫描只需要大约8毫秒。此外,我们的方法可以广泛推广到各种三维视觉应用。在本文中,我们将LinK3D应用于三维配准、激光雷达里程计和位置识别任务,并取得了与最先进的方法相比具有竞争力的结果。
一、引言
特征提取与匹配是大多数计算机视觉任务的基石,如感知、识别、重构]等。在二维视觉领域,多种二维特征提取方法(如Harris、SIFT、SURF、ORB)已得到研究和广泛应用。然而,在三维视觉领域中,对于三维特征的表示和匹配仍有一些有待解决的问题。目前的方法可能不适用于三维激光雷达的高频(通常≥10Hz)和大型复杂场景,尤其是在效率和可靠性方面。三维激光雷达点云的不规则性、稀疏性和无序性使二维方法无法直接应用于三维。目前,三维激光雷达已广泛应用于一些移动设备(如机器人、自动驾驶汽车等),有必要设计一种高效、鲁棒的三维激光雷达点云特征表示。
现有的三维特征点表示方法在提取策略上主要可以分为人工特征和基于学习的特征两大类。人工制作的特征主要以直方图的形式描述特征,使用局部或全局的统计信息表示特征。由于LiDAR使用的大规模场景中通常存在大量相似的局部特征(例如大量的局部平面),这些局部统计特征很容易导致不匹配。直观地说,全局特征不太可能在点云内部生成精确的点对点匹配。基于学习的方法已经取得了很大的进步,但这些方法通常都很耗时(如3DFeatNet提取3D特征大约需要0.928秒,D3Feat用于3D注册大约需要2.3秒)。
事实上,目前大多数的3D特征表示方法通常更适合小规模场景和小物体表面(如:斯坦福兔点云)。很明显,LiDAR使用的小尺度场景和大尺度场景(如KITTI 00的城市场景)之间存在一些差异。具体来说,主要区别如下:
- 小物体表面通常是光滑连续的,局部表面是唯一的。然而,三维激光雷达点云包含许多不连续和相似的局部表面(例如许多相似的局部建筑表面、树木、极地等)。如果使用具有这些相似局部表面的点云生成局部3D特征,直观上,这些3D特征也是相似的,容易导致误匹配。
- 三维激光雷达点云通常比较稀疏,点在空间上分布不均匀。如果在一个固定大小的空间中没有足够的点来生成局部的统计描述,则可能无法得到有效、准确的三维特征描述。
- 在LiDAR扫描中经常有遮挡,这可能导致在当前和后续的LiDAR扫描中对同一局部表面的描述不一致。因此,有必要针对三维激光雷达点云设计一种特征表示。
基于这些差异,论文提出了一种新颖的激光雷达点云三维特征,可用于精确的点对点匹配。论文的方法首先提取鲁棒聚合关键点,然后将提取的聚合关键点输入描述符生成算法,该算法生成具有新的关键点表示形式的描述符。如图1所示,将当前关键点描述符用其邻居关键点表示。在获得描述符后,所提出的匹配算法可以快速匹配两次激光雷达扫描的描述符。此外,本文提出的LinK3D已经应用于各种实时3D视觉任务。综上所述,我们的主要贡献如下:
图1.LinK3D的核心思想和基于LinK3D的两次激光雷达扫描的匹配结果。绿色的线是有效的匹配。当前关键点的描述符用它的相邻关键点来表示。描述符的每个维度对应一个扇区。第一个维度对应于当前关键点的最近关键点所在的扇区区域,其他维度对应于逆时针顺序排列的区域。如果扇区区域中有关键点,则搜索扇区区域中最近的关键点,并将其用于表示描述符的相应维度。
- 提出了一种新颖完整的三维激光雷达点云特征提取方法,包括关键点提取、特征描述和匹配。与目前最先进的三维特征相比,我们的方法在匹配和运行上取得了显著的进步,在稀疏激光雷达点云中更加可靠。
- 所提出的方法可以潜在地应用于各种3D视觉任务。本文将LinK3D应用于三维激光雷达SLAM中的三维配准、激光雷达里程计和位置识别。与目前最先进的方法相比,我们的方法在这些任务中取得了具有竞争力的结果。
- 所提出的方法显示了令人印象深刻的效率,这使得我们的方法可以实时应用。我们的方法提取LinK3D特征平均耗时32毫秒,匹配两次激光雷达扫描的描述符平均耗时8毫秒,用于位置识别任务时,检索机器人重新访问的位置平均耗时13毫秒。
本文的其余部分组织如下。在第二节中,回顾了之前关于三维特征提取的工作。在第三节中,介绍了提出的框架,包括关键点提取,描述符生成和特征匹配。在第四节中,评估了我们的方法的基本性能(即匹配和实时性能),并将我们的方法与其他最新的方法进行了比较。此外,我们还将LinK3D应用到三维配准、激光雷达里程计和位置识别任务中,并与其他最先进的方法进行了比较。最后,第五部分对全文进行了总结,并对今后的工作进行了探讨。
二、相关工作
三维特征提取与描述是计算机视觉领域的经典课题。根据提取策略,这些方法可分为人工方法和深度神经网络(DNN)方法。略:
三、LINK3D介绍
方法的流程主要包括两个部分:特征提取(即关键点提取和描述符生成,如图2所示)和特征匹配。如图2所示,首先提取LiDAR扫描图像的边缘点,将边缘点输入到边缘关键点聚合算法中,提取鲁棒聚集关键点,用于后续描述符的生成。然后,描述子生成算法首先构建距离表和方向表,可用于快速生成描述子。
图2.提出了LinK3D关键点提取和描述的工作流程。首先对输入点云进行关键点提取。然后,执行LinK3D描述来派生有效的关键点描述符。
A.关键点提取
- 边缘点提取:在关键点提取中,采用类似于二维图像关键点的策略,关键点是角点或边缘点。在此,我们还提取具有代表性的边缘点作为三维激光雷达扫描的关键点。激光雷达扫描大致可以分为两种类型:边缘点和平面点。边缘点与平面点的主要区别在于其所在局部表面的光滑性。
给定一帧3D LiDAR点云 P c P_c Pc,设 i i i是 P c P_c Pc中的一个点, i ∈ P c i∈P_c i∈Pc。 P s P_s Ps是与点 i i i在同一扫描线上的连续点集合,均匀分布在 i i i的两侧, ∣ S ∣ |S | ∣S∣为 P s P_s Ps的基数,当前点 i i i的平滑项定义如下:
其中 p i → \overrightarrow{p_i} pi和 p j → \overrightarrow{p_j} pj分别是两点 i i i和 j j j的坐标。提取的边缘点(如图3a所示) ∇ ∇ ∇大于阈值 T h ∇ Th_∇ Th∇。
图3.(a)中分散的边缘点(用红色虚线框标记)和聚集的边缘关键点(用蓝色虚线框标记)。聚集的边缘关键点正是我们所需要的。(b)为算法1提取的边缘关键点。 - 边缘关键点聚合(Edge Keypoints Aggregation):在收集边缘点的过程中,通常会有很多点在阈值以上但不稳定。具体来说,这些不稳定点在当前扫描中出现,但可能不会在下次扫描中出现。如图3a中红色虚线框所示,不稳定点通常是分散的。如果我们利用这些点进行匹配,很可能会导致失配。因此,有必要对这些点进行过滤,找出正有效的边缘关键点。如图3a中蓝色虚线框所示,有效的边缘关键点通常垂直分布在簇中。
本文设计了一种新的关键点聚合算法,用于寻找有效的边缘关键点。采用角度信息引导,将潜在点聚集在小群中,而不是聚集在整个区域,如算法1所示。其动机是,具有近似相同水平角度的点更有可能位于同一簇上。具体来说,我们首先将以LiDAR坐标系原点为中心的水平面平均划分为 n e c t n_{ect} nect个扇区,然后只对每个扇区中的点进行聚类。应该注意到,当我们在实验中设置 n e c t = 120 n_{ect}=120 nect=120时,我们的算法运行速度比经典的K-Means快25倍。提取的边缘关键点如图3b所示。可以看出,我们的算法能够过滤掉无效的边缘点,并找到正的有效边缘关键点。此外,计算每个聚类点的质心,并将其命名为聚集关键点,它可以表示其聚类,并用于后续描述符的生成。
B.描述符生成
在描述符生成过程中,首先将所有聚集关键点投影到水平面上,这样可以消除聚集边缘关键点在垂直方向上分布不均匀所造成的影响。为了快速匹配,我们的LinK3D被表示为一个多维向量,它使用0或当前关键点与其相邻关键点之间的距离作为每个维度。如图4所示,我们将水平面以当前关键点
k
0
k_0
k0为中心划分为180个扇区,描述符的每个维度对应一个扇区。受到二维描述符SIFT搜索主方向以保证位姿不变量的启发,LinK3D的主方向也被搜索并表示为当前关键点
k
0
k_0
k0到其最近的关键点
k
1
k_1
k1的方向向量,该关键点位于第一个扇区。其他扇区按逆时针顺序排列。然后,在每个扇区中搜索距离
k
0
k_0
k0最近的关键点。如果有一个最近的关键点,我们使用当前关键点和最近关键点之间的距离作为描述符的相应值,否则,该值设置为0。
图4.以当前关键点
k
0
k_0
k0为中心的水平面被分为180个扇区。我们首先寻找
k
0
k_0
k0中最近的关键点
k
1
k_1
k1,然后主方向是
k
0
k_0
k0到
k
1
k_1
k1的向量。此外,第一个扇形区域被主方向一分为二。其他区域按逆时针顺序排列。
在此过程中,从当前点到其他点
k
i
(
i
≠
1
)
k_i(i\neq{1})
ki(i=1)的方向表示为
m
→
0
i
\overrightarrow{m}_{0i}
m0i,利用
m
→
0
i
\overrightarrow{m}_{0i}
m0i与主方向
m
→
01
\overrightarrow{m}_{01}
m01之间的夹角来确定
k
i
k_i
ki属于哪个扇区。角度的计算方法为:
式中
D
i
D_i
Di定义为:
上述算法主要存在两个问题。一个问题是算法对最近的关键点很敏感。当离群点存在干扰时,匹配会失败。另一个问题是我们经常要计算两点之间的相对距离和方向,所以会有大量的重复计算。为了解决第一个问题,我们寻找一定数量的最接近的关键点(具体数量在实验部分进行评估)。假设我们搜索3个最近的关键点,计算出对应的3个关键点描述符,如图5所示。Des1对应最近的关键点,Des3对应第三个最近的关键点。我们根据这三个距离值定义优先级。Des1的优先级最高,因为距离最近;Des3的优先级最低,因为距离最远。最终描述符中每个维度的值对应于其中优先级最高的非零值。如图5中红色虚线框所示,Des1有一个非零值D1 0,由于其优先级高,因此在最终描述符中,Des1的对应值也设置为D1 0。另外两种情况如图5中紫色和黑色虚线框所示。它极大地提高了LinK3D对异常值的鲁棒性。为了解决第二个问题,我们建立了所有关键点的距离表和方向表,可以直接参照表获得,避免了重复计算。具体的算法如算法2所示,它展示了提取一个描述符的过程。
图5.最终描述符中每个维度的值对应于Des1、Des2和Des3中优先级最高的非零值。
C.匹配两个描述符
在本节中,我们将介绍匹配算法。为了快速度量两个描述符的相似度,我们采用类似于汉明距离的计算方法来定义两个LinK3D描述符的相似度得分。它们都计算相应的维数。但是,与Hamming的异或运算不同,我们只计算两个描述符的非零维数。具体来说,在这两个描述符中计算相应的非零维差的绝对值。如果该值低于0.2,则相似性分数增加1。如果匹配的相似度得分高于阈值Thscore,则认为该匹配有效。具体匹配算法如算法3所示。匹配两个描述符后,在集群中搜索边缘关键点的匹配。对于匹配的聚合关键点,选择每条扫描线中对应的光滑项最大的边缘关键点。对位于同一扫描线上的边缘关键点进行匹配。
四、实验
略: