我正在尝试自动检测 3d 点云上的旋转轴。
换句话说,如果我取一个小的 3d 点云,选择一个旋转轴,并以不同的旋转角度制作多个点的副本,那么我会得到一个更大的点云。
我的算法的输入是较大的点云,所需的输出是单对称轴。最终我将计算彼此旋转的点之间的对应关系。
较大点云的大小约为 100K 点,旋转副本的数量未知。
在我的情况下,旋转角度具有恒定的增量,但不一定跨越 360 度。例如,我可能有 0、20、40、60。或者我可能有 0、90、180、270。但我不会有 0、13、78、212(或者如果我有,我不在乎来检测)。
这似乎是一个计算机视觉问题,但我无法弄清楚如何精确地找到轴。输入通常会非常干净,接近浮点精度。
我没有旋转/复制以制作更大点云的原始较小点云。我知道数据是合成的,噪音很小(通常是另一个程序的输出)。
不幸的是,我们无法轻松计算较小云中可能的点数,因为沿着轴,这些点没有重复。如果我们知道哪些点沿着轴,那么我们就可以想出可能的因素,但是我们已经解决了问题。
——
谢谢大家的建议。看起来我的最终算法将尝试使用 k-nn 度量提出匹配点的集团。每个派系都会给出一个轴。然后我可以使用 RANSAC 将轴拟合到所有派系的结果。
最佳答案
好吧,以下方法可能有用,但这取决于您的数据的具体情况。它基于这样的假设:相邻位置之间的间隙足够大(20 度可能很好)并且小点云近似于一个表面(最后一个可以克服)。我建议使用局部特征匹配(计算机视觉中的流行技术)。
首先,对于大云的每个点,您应该计算本地描述符(如图像的 SIFT 或 SURF)。点云最流行的一种是旋转图像:
Johnson, A., & Hebert, M. (1999)。使用自旋图像在杂乱的 3d 场景中进行有效的对象识别。 IEEE 模式分析和机器智能汇刊,21(5),433–449。引用者。取自 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 年)。使用潜在狄利克雷分配从范围数据中无监督地发现对象类。机器人学:科学与系统。美国西雅图。
如果计算起来很困难,请问我如何在不损失大量判别能力的情况下降低维度,我已经这样做过一次。
然后你应该匹配描述符,即在它们的高维空间中为每个描述符找到最近的邻居。如果小云已经旋转了 3 次,那么应该有 3 个好的最近邻居。然而,由于云自相交,匹配可能会包含噪声。您仍然需要找到适合大量匹配项(尽管不是全部)的轴。在这里,您可以使用一些稳健的拟合,例如 RANSAC(您应该做一些数学运算来定义轴位置 w.r.t. 找到的匹配项的可能性)。请注意,它与其他人建议的方法不同。根据描述符,您应该只拟合一条线而不是平面族,而不是原始点(RANSAC 可能无法拟合具有 4-5 个正确点和 100K 异常值的平面)。
另请注意:
如果您有不近似表面的小扫描,您应该想出不同的旋转不变描述符,而不是旋转图像。
为了计算法线并进行检索,您可以查看这个库:http://graphics.cs.msu.ru/en/science/research/3dpoint/lidark (一个主要版本即将推出)。
关于3d - 从点云检测旋转轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2639579/