【问题标题】:Detecting the axis of rotation from a pointcloud从点云检测旋转轴
【发布时间】:2010-04-14 17:28:27
【问题描述】:

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

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

我的算法的输入是较大的点云,所需的输出是单对称轴。最终我将计算相互旋转的点之间的对应关系。

较大的点云的大小约为 100K 点,旋转复制的数量是未知的。

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

这似乎是一个计算机视觉问题,但我无法弄清楚如何精确找到轴。输入通常会非常干净,接近浮点精度。

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

我们无法轻松计算较小云中可能的点数,因为不幸的是,这些点不会沿着轴重复。如果我们知道哪些点在轴上,那么我们就可以想出可能的因素,但是我们已经解决了这个问题。

--

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

【问题讨论】:

  • 您是否有初始(小)点云作为参考?如果不是,这个问题很可能是无法确定的。
  • 我没有完整的答案,但一个初步的启发是靠近轴的点密度会更大。
  • 不适用于许多点云。排列在围绕圆心旋转的平面圆的边缘上的点不会表现出任何围绕轴的聚类。当大部分点关于轴不对称或远离实际旋转轴时也是如此。
  • @Ron,这就是为什么它被称为启发式算法。
  • @tfinniga 我们有初始点数吗?这将帮助我们获得这些点被旋转的次数。(大云中的点数)/(初始云中的点数)。

标签: 3d geometry computer-vision computational-geometry


【解决方案1】:

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

首先,对于大型云的每个点,您应该计算本地描述符(如图像的 SIFT 或 SURF)。最流行的点云是旋转图像

Johnson, A. 和 Hebert, M. (1999)。在杂乱的 3 d 场景中使用旋转图像进行有效的对象识别。 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(即将发布主要版本)。

【讨论】:

  • 您无法从点云中的单个点计算 SIFT 或 SURF 描述符。
  • 当然不能。那只是一个计算机视觉的类比。像自旋图像这样的点云有特殊的描述符。它是根据 w.r.t 计算的。该点的某个附近。详情请看我所指的论文。
  • 这是一堆关于这个问题的重要信息,感谢您发布它。
【解决方案2】:

以下假设有 3 个或更多副本。考虑大点云的凸包。找到它的两个平行的面。旋转轴将垂直于这些。如果您发现不止一对,只需测试每个方向。

显然,如果轴上的最极端点正好在轴上,这将不起作用,但在一般情况下,这种情况非常罕见。

【讨论】:

    【解决方案3】:

    选择任意一点,并找到与之等距的另外两个点。这应该是 O(n^2) 最坏的情况,但启发式可以大大减少这种情况。这三个点唯一地确定了一个圆。如果在与第一个或第三个点相同的距离处有第四个点,那将大大增加您对圆的信心。

    圆心是轴上的一点,圆的法线向量就是轴的方向向量。

    给定轴,您可以确定旋转之间的角度,并用其他一些点检查您的猜测。如果错了,请选择另一个点并重新开始。

    编辑:顺便说一句,这显然是不确定的,但如果你的点数据像你说的那样干净并且使用了良好的启发式方法,那么它应该是相当准确的。

    【讨论】:

    • 为什么那个圆的中心会在轴上?
    • @kigurai,因为这些点等距的事实使得它们实际上很可能是原始点围绕轴的旋转:请记住,tfinniga 正在尝试检测 constant 旋转。当然,等距离可能只是一个巧合,这就是为什么这是一个非确定性算法。
    • 我打算提出同样的建议。所有其他投机性的答案都没有投票,但这个可行的答案是否决票?许多点将有 2 个等距的其他点,因此您可以非常快速地找到几个候选人。您甚至可以检查超过 3 个等距点,您可以平均由多个集合确定的轴,并且您可以轻松测试建议轴的可能正确性 - 如果正确,每个点将按照建议的旋转顺序映射到其他 N 个点.我会把它投票回零:-)
    • @phkahler,谢谢。我不确定为什么它被否决,但它是在大多数其他答案发布之前,所以也许有人认为它应该是确定性的。
    【解决方案4】:

    1)如果找到较大点云的质心C,则ISTM原始旋转轴 必须通过那个点。

    没关系:我没有看到旋转不能跨越一个完整圆圈的要求。对于您的 20、40、60 示例,质心不会在旋转轴上。

    也许以下 ref 会有所帮助?

    “使用部分采样重建旋转曲面” http://portal.acm.org/citation.cfm?id=980064

    【讨论】:

    • 我认为如果您的点云形成一个圆锥体,这会中断。 P1 将位于圆锥体的底部,但 C 将位于轴的上方。不幸的是,P1-C 不会垂直于轴。
    【解决方案5】:

    看看立体视觉中用于计算两个图像之间的单应性的技术 - 您的点云集问题似乎类似于在同一对象/场景的多个图像中匹配点。似乎您可以应用 RANSAC 算法来计算点云集之间的转换。

    【讨论】:

      【解决方案6】:

      几点:)

      1. 如果我们有 1 个从不旋转的初始点,那么轴的数量是无限的。
      2. 如果我们将 1 个初始点旋转 1 次,那么轴的数量也是无限的。
      3. 如果我们有 1 个初始点并将其旋转 2 次,那么我们可以找出轴,因为 3 个点唯一确定了一个平面。与 3 个点中的每一个等距的点(1 个初始点 + 2 个旋转点)垂直于该点。
      4. 请注意,旋转 360 度没有任何意义。

      1. 从云中选择任意一点 (P)。
      2. 跟踪点 P 的轨迹 (L)(当 P 围绕某个轴旋转时,L 应该是一个圆)
      3. 垂直于通过圆心的圆 (L) 的平面是云的旋转轴。

      我的意思是刚体的旋转轴与任何单个粒子的旋转轴相同。我们不需要关心所有其他点。

      【讨论】:

      • 不知道坐标轴,不知道点之间的对应关系,如何获取轨迹?
      • 点移动,因此您知道点的初始位置。通过将点的每个连续位置连接到前一个位置,您可以获得轨迹?轨迹是指该点在旋转时将追踪的路径。
      • 我的理解是他无法访问旋转的点,他只有最终产品(大点云)。
      • 他不知道 x 点和 y 点实际上是旋转的同一个点,我想。
      • @Ron 所以看起来他想找出对称轴而不是旋转。对吗?
      【解决方案7】:

      一个疯狂的想法......

      如果同一点围绕同一轴旋转多次,所有点将位于同一平面内。根据您的数据集,可以使用 ransac 方法检测该平面。

      旋转轴将垂直于该平面,一旦确定了方向,就应该相对容易确定轴的位置。

      【讨论】:

        【解决方案8】:

        您应该考虑两件事:

        1. 点云的角跨度。
        2. 旋转角度。

        现在 if (rotation > span) 解决方案更简单,因为您必须寻找子模式并根据其出现情况,尝试匹配更大的模式。

        如果 (rotation

        如果您不知道自己属于哪个类别,可以放心地假设第二个类别。

        如前所述,RANSAC 是模式匹配的最佳方法,因为它花费的时间更少,而且结果不错。 您留下的唯一问题是在初始化期间估计迷你点云的跨度角度。这种估计很难做出。因此,如果您有足够的计算能力/时间,我建议以 1 度的步长进行迭代。从适度的 5 度开始到 45 度。随着结果开始收敛,角度精度会增加。

        【讨论】:

          【解决方案9】:

          由于原始点云很小,最简单的解决方案可能是 RANSAC:

          1. 随机选择三个点
          2. 计算这些点的旋转轴(垂直于圆并通过中心的线)
          3. 其他观点同意吗?
          4. 如果没有,迭代直到找到正确的轴

          正确估计的概率是 1/((n-1)(n-2)),其中 n 是原始云中的点数。由于每个测试都可以很快完成,因此这可能是一种有用的方法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-28
            • 1970-01-01
            • 2014-04-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多