介绍
亮点:
- 高效的数据编码方式。这种编码对点云的密度和法线具有不变性。
- 保存点云的内部结构。
- 有效的两相匹配算法。
- 与其他最先进的空间描述符进行了彻底的验证。
图1
图2
Scan Context
把3D点云分为在传感器坐标中的方位角和径向分档,如图1。\(N_s\)代表扇形数,\(N_r\)带表环数。激光雷达的最大测量距离为\(L_{max}\),则每个环的间隙为\(\frac{L_{max}}{N_r}\),每个扇形的弧度为\(\frac{2\pi}{N_s}\)。论文中\(N_s=60\),\(N_r=20\)。
对于所有的分区后的点云可以表示为:
\[ \mathcal{P} = \bigcup_{i\in[N_r],\space j\in[N_s]}P_{ij} \]
然后把每个区块用一个值表示
\[ \phi=\mathcal{P}_{ij}\rightarrow\mathbb{R} \]
取每个块中的z最大值。若是没有点则为0
\[ \phi(\mathcal{P_{ij}})=\max_{\mathbf{p}\in\mathcal{P}_{ij}}{z}(\mathbf{p}) \]
最终一次scan context表示为:
\[ I=(a_{ij})\in \mathbb{R}^{N_r\times N_s},a_{ij}=\phi(\mathcal{P_{ij}}) \]
Scan Contexts之间的相似分数
给定一个scan context对,我们就需要对两个地方的相似性进行距离测量。\(I^q\)和\(I^c\)是分别从查询点云和候选点云获得的scan context。它们以纵列方式进行比较。
距离是同一索引的列之间的距离之和。余弦距离用于计算同一索引的两个列向量\(c^q_j\)和\(c^c_j\)之间的距离。
按照扇区数使用\(N_s\)归一化,距离函数为:
\[ d(I^q, I^c)=\frac{1}{N_s}\sum^{N_s}_{j=1}\left(1-\frac{c^q_j\cdot c^c_j}{\left \| c^q_j \right \| \left \| c^c_j \right \| }\right) \]
即使在同一位置,会出现列漂移,算法改进为:
\[ \begin{align} D(I^q,I^c)&=\min_{n\in[N_s]}d(I^q,I^c_n), \\ n^*&=\text{argmin}_{n\in[N_s]}d(I^q,I^c_n) \end{align} \]
额外的漂移信息对于ICP匹配初值来说非常重要
两相搜索算法
利用ring key描述子代表每个环
从最近的环到最远的环,ring key向量为
\[ \mathbf{k}=(\psi(r_1),\dots,\psi(r_{N_r})), \space \text{where} \space \psi: r_i\rightarrow \mathbb{R} \]
使用的环形编码函数\(\psi\)是使用\(L_0\)范数(非零元素个数)的环形的占用率:
\[ \psi(r_i)=\frac{\|r_i\|_0}{N_s} \]
尽管比起scan context,ring key的信息量较小,但它能够快速搜索,找到可能的循环候选者。向量\(\mathbf{k}\)被用作构建KD树的关键。同时,查询的ring key被用来寻找类似的键和它们相应的扫描索引。将被检索的顶级相似键的数量由用户决定
这些恒定数量的候选的scan context通过使用距离与查询的scan context进行比较。满足接受阈值的、与查询最接近的候选被选为重访地点:
\[ c^*=\text{argmin}_{c_k\in C} D(I^q, I^{c_k}), \space \text{s.t} \space D < \tau \]
其中,C是一组从KD树中提取的候选的索引,\(\tau\)是一个给定的接受阈值。 \(c^*\)是被确定为循环的地方的索引