我正在尝试自动检测3d点云上的旋转轴。

换句话说,如果我拍摄了一个小的3d点云,选择了一个旋转轴,并以不同的旋转角度制作了多个点的副本,那么我得到的点云更大。

我的算法的输入是较大的点云,而所需的输出是单个对称轴。最后,我将计算彼此旋转的点之间的对应关系。

较大的点云的大小约为10万个点,并且旋转副本的数量未知。

在我的情况下,旋转角度具有恒定的增量,但不一定跨越360度。例如,我可能有0、20、40、60。或者我可能有0、90、180、270。但是我不会有0、13、78、212(或者如果我有,我不在乎进行检测)。

这似乎是计算机视觉问题,但我在弄清楚如何精确找到轴方面遇到困难。输入通常非常干净,接近浮点精度。

我没有旋转/复制来制作较大点云的原始较小点云。我确实知道数据是合成的,几乎没有噪音(通常是另一个程序的输出)。

我们无法轻易计算出较小的云中可能的点数,因为不幸的是,沿轴方向上的点并没有重复。如果我们知道沿轴的点,那么我们可以提出可能的因素,但是我们已经解决了这个问题。

--

感谢大家的建议。看来我的最终算法将尝试使用k-nn度量来得出匹配点的派系。每个集团都会给一个轴。然后,我可以使用RANSAC使轴适合所有集团的结果。

最佳答案

嗯,以下方法可能有用,但是取决于您的数据的具体情况。它基于以下假设:相邻位置之间的间隙足够大(可能为20度),而小点云近似于一个表面(可以克服最后一个表面)。我建议使用局部特征匹配(计算机视觉中流行的技术)。

首先,对于大云的每个点,您应该计算局部描述符(例如图像的SIFT或SURF)。点云最流行的一种是旋转图像:

约翰逊(Johnson)和赫伯特(Hebert)(1999)。在困惑的3D场景中使用旋转图像进行有效的对象识别。 IEEE模式分析与机器智能学报,21(5),433–449。 Citeseer。从http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.23.8816&rep=rep1&type=pdf检索。

在这里使用高级修改:

Endres,F.,Plagemann,C.,Stachniss,C.,&Burgard,W.(2009)。使用潜在Dirichlet分配从范围数据中无监督地发现对象类。机器人:科学与系统。美国西雅图。

如果计算困难,请问我如何在不丧失判别力的情况下降低尺寸,我已经做过一次。

然后,您应该匹配描述符,即在它们的高维空间中找到每个描述符的最近邻居。如果小云旋转了3次,则应该有3个最近的邻居。但是,由于云的自相交,匹配可能会包含噪音。您仍然必须找到适合大量匹配的轴(尽管不是全部)。在这里您可以使用诸如RANSAC之类的鲁棒拟合(您应该做一些数学运算以定义找到的匹配点相对于轴位置的可能性)。请注意,它与其他人建议的方法不同。根据描述符,您只应拟合一条直线而不是平面族,而不是原始点(RANSAC可能无法拟合具有4-5个正确点和100K离群值的平面)。

另请注意:

如果您的小扫描无法逼近表面,则应提供不同的旋转不变描述符,而不是旋转图像。

为了计算法线并进行检索,您可以检查以下库:http://graphics.cs.msu.ru/en/science/research/3dpoint/lidark(即将发布主要版本)。

09-16 08:19