点云模板匹配(2)

这是关于前一段时间复现的点云模板匹配论文的第二篇博客(第一篇在这里)。这篇博客的内容是如何从点云中提取用于后续匹配的点对,以及变换矩阵(transformation matrix)的计算。 整篇论文的流程图如下:

1. 点对提取

为了降低后续RANSAC搜索耗费的时间,我们需要从点云的边缘点(edge points)中提取出能够在一定程度上代表物体几何信息的点对${p_i,p_j}$。

其中,$p_i$是在场景点云(scene cloud)的边缘点$\epsilon$中随机选取的,而$p_j$是在满足以上两个条件的情况下,在$\epsilon$中随机选取的。为了保证我们在场景点云$\epsilon$中提取的点对中至少有一个点$p_i$有$p_t$的概率($p_t$可以设为0.999之类的)落在待匹配模型的边缘点$\Psi$上,我们要提取的$p_i$的个数至少为:

\[n_1 = \frac{ln(1-p_t)}{ln(1-P(p_i \in \Psi))}\]

其中$P$代表的是一个点落在待匹配模型的边缘上的概率,我们可以用待匹配模型的边缘点和场景边缘点的数量之比来表示:

\[P(p_i \in \Psi) = \frac{\vert \Psi \vert}{\vert \epsilon \vert}\]

$p_j$会在$p_i$的领域内提取,我们将这个邻域的直径设为$\delta$,也就是模板点云的包围盒直径,那么$p_j$同样属于$\Psi$的概率为:

\[P(p_j \in \Psi) = \frac{\vert \Psi \vert}{\vert N_\delta(p_i)\vert}\]

可以用计算$n_1$的公式来计算$n_2$。这里需要注意的是,待匹配模型的边缘$\Psi$,和模板点云的边缘$\epsilon’$之间会有差异,因为场景点云对应的是三维扫描的结果,很有可能会存在噪声,而模板点云一般是由一个完整的CAD模型得来的。不过在噪声不是很大的情况下,我们可以假设${\vert \Psi \vert} \approx {\vert \epsilon’ \vert}$。(由于光学扫描很难扫到被遮蔽的部分,如果物体之间的遮蔽区域很大的话,二者的差距就会很离谱。)

每个点对需要满足以下两个要求:

2. 点对特征提取

每个点对需要提取4个特征,经过离散化之后存入哈希表里以方便后续的查询。原文的作者采用了MurMurHash3这个哈希函数。

这4个特征很容易计算,分别是:

3. 变换矩阵

点云模板匹配的最终目的就是计算出场景点到模板点的变换矩阵(为什么不是模板点到场景点呢,我想我应该会在下一篇博客里写到吧……),使模板的点能够很好地契合到场景点里。在这里我参考了Drost等人论文里的方法(他们有图,看上去更直观):

图中红色的线是一对模板点对,绿色的线是场景点对,二者端点上的箭头是法向量。首先用两个变换矩阵$T_{s\rightarrow g}$以及$T_{m\rightarrow g}$,将两个法向量转到$x$轴上,并让$s_r$和$m_r$这两个点与坐标系原点重合。接下来再计算两个点对向量之间的夹角$\alpha$,以及对应的旋转矩阵$R_x(\alpha)$。由此一来,我们就可以知道由场景点到模板点的变换矩阵为:

\[T_{s\rightarrow m} = T_{s\rightarrow g}R_x(\alpha){T^{-1}_{m\rightarrow g}}\]

这样的话,就可以把比较复杂的变换矩阵计算拆分成几个相对简单的步骤。

Reference