3d 从点云检测旋转轴
我试图在3d点云上自动检测旋转轴 换句话说,如果我取一个小的3d点云,选择一个旋转轴,以不同的旋转角度复制几个点,那么我会得到一个更大的点云 我的算法的输入是较大的点云,期望的输出是单轴对称。最后我要计算点之间的对应关系,它们是相互旋转的 较大的点云的大小约为100K点,并且旋转副本的数量未知 在我的例子中,旋转角度具有恒定的三角形,但不一定跨越360度。例如,我可能有0,20,40,60。或者我可能有0,90,180,270。但我不会有0,13,78,212(或者如果我有,我不想检测到它) 这看起来像是一个计算机视觉问题,但我很难弄清楚如何精确地找到轴。输入通常非常干净,接近浮点精度 我没有旋转/复制以生成较大点云的原始较小点云。我知道数据是合成的,几乎没有噪音(通常是另一个程序的输出) 不幸的是,我们无法轻易计算出较小云中可能的点数,因为沿着轴的点没有重复。如果我们知道哪些点是沿着轴的,那么我们就可以找出可能的因素,但是我们已经解决了这个问题 -- 谢谢大家的建议。看起来我的最后一个算法将尝试使用k-nn度量得出匹配点的小团体。每一个集团将给出一个轴心。然后,我可以使用RANSAC将一个轴拟合到所有派系的结果。1)如果你找到较大点云的质心C,它就是原始旋转轴 必须通过那个点 没关系:我没有看到旋转不能跨越一个完整圆的要求。对于20,40,60示例,质心不在旋转轴上 也许下面的裁判会有帮助 “使用部分采样重建旋转曲面” 一些要点:)3d 从点云检测旋转轴,3d,geometry,computer-vision,computational-geometry,3d,Geometry,Computer Vision,Computational Geometry,我试图在3d点云上自动检测旋转轴 换句话说,如果我取一个小的3d点云,选择一个旋转轴,以不同的旋转角度复制几个点,那么我会得到一个更大的点云 我的算法的输入是较大的点云,期望的输出是单轴对称。最后我要计算点之间的对应关系,它们是相互旋转的 较大的点云的大小约为100K点,并且旋转副本的数量未知 在我的例子中,旋转角度具有恒定的三角形,但不一定跨越360度。例如,我可能有0,20,40,60。或者我可能有0,90,180,270。但我不会有0,13,78,212(或者如果我有,我不想检测到它) 这
我的意思是,刚体的旋转轴和任何单个粒子的旋转轴是相同的。我们不必关心所有其他点。选择任何一点,并找到与之等距的两个其他点。这应该是O(n^2)最坏的情况,但启发式可以大大减少这种情况。这三个点唯一地决定了一个圆。如果第四个点与第一个点或第三个点的距离相同,这将大大增加您对圆的信心 圆的中心是轴上的一点,圆的法向量是轴的方向向量 给定轴,您可以确定旋转之间的角度,并使用其他一些点检查您的猜测。如果这是错误的,选择另一个点,重新开始
编辑:顺便说一下,这显然是不确定的,但是如果你的点数据像你说的那样干净,并且你使用了很好的启发式,它应该相当准确。看看立体视觉中用来计算两幅图像之间单应性的技术——你的点云集问题似乎与同一对象/场景的多幅图像中的匹配点有关。似乎可以应用RANSAC算法来计算点云集之间的变换。一个疯狂的想法 如果同一点绕同一轴旋转数次,则所有点都将位于同一平面上。根据您的数据集,可以使用ransac方法检测此平面
旋转轴将垂直于该平面,一旦确定了旋转轴的方向,就可以相对容易地确定旋转轴的位置。好的,下面的方法可能有用,但这取决于数据的具体情况。它基于以下假设:相邻位置之间的间隙足够大(20度可能很好),并且小的点云近似于一个曲面(最后一个可以克服)。我建议使用局部特征匹配(计算机视觉中流行的技术) 首先,对于大型云的每个点,您应该计算局部描述符(如图像的SIFT或SURF)。最常用的点云是“旋转图像”: Johnson,A.,和Hebert,M.(1999)。在杂乱的三维场景中使用旋转图像进行有效的对象识别。IEEE模式分析和机器智能学报,21(5),433–449。西特塞。从中检索 此处使用了高级修改: Endres,F.,Plagemann,C.,Stachniss,C.,和Burgard,W.(2009)。使用潜在Dirichlet分配从范围数据无监督发现对象类。机器人学:科学与系统。西雅图,美国 如果计算起来很困难,问我如何在不损失很多辨别力的情况下降低维度,我已经做到了