10

因此,我编写了一个迭代最近点(ICP) 算法,并将模型拟合到点云。作为对那些不了解的人的快速教程,ICP 是一种简单的算法,它将点拟合到模型,最终在模型和点之间提供齐次变换矩阵。

这是一个快速图片教程。

步骤 1. 在模型集中找到离您的数据集最近的点:

第 2 步:使用一堆有趣的数学(有时基于梯度下降或 SVD)将云拉得更近并重复,直到形成姿势:

![图2][2]

现在这一点很简单并且有效,我想要帮助的是: 我如何判断我的姿势是否是好的?

所以目前我有两个想法,但它们有点老套:

  1. ICP算法中有多少点。即,如果我几乎不适合任何点,我认为姿势会很糟糕:

    但是如果姿势真的很好呢?它可能是,即使只有几分。我不想拒绝好的姿势:

图 5

所以我们在这里看到的是,如果低点在正确的位置,实际上可以形成一个非常好的位置。

因此,研究的另一个指标是提供的点与使用的点的比率。这是一个例子

图 6

现在我们排除了太远的点,因为它们将是异常值,现在这意味着我们需要一个良好的起始位置才能使 ICP 工作,但我可以接受。现在在上面的例子中,保证会说不,这是一个不好的姿势,它会是正确的,因为点与包含的点的比率是:

2/11 < SOME_THRESHOLD

所以这很好,但是在上面显示的三角形倒置的情况下它会失败。它会说倒三角形很好,因为所有点都被 ICP 使用。

不需要成为 ICP 专家来回答这个问题,我正在寻找好的想法。使用点的知识我们如何分类它是否是一个好的姿势解决方案?

将这两种解决方案一起使用是一个很好的建议,但如果你问我,它是一个非常蹩脚的解决方案,只是门槛它非常愚蠢。

如何做到这一点有什么好主意?

PS。如果你想添加一些代码,请去吧。我在 C++ 中工作。

聚苯乙烯。有人帮我标记这个问题,我不确定它应该落在哪里。

4

3 回答 3

3

一种可能的方法可能是通过它们的形状和方向来比较姿势。

形状比较可以用Hausdorff 距离进行,直到等距,也就是说,如果姿势是相同的形状,如果

d(I(actual_pose), calculated_pose) < d_threshold

d_threshold应该从实验中找到哪里。由于 XI 的等距修改会考虑不同角度的旋转 - 在这种情况下似乎就足够了。

如果姿势具有相同的形状,我们应该比较它们的方向。为了比较方向,我们可以使用稍微简化的 Freksa 模型。对于每个姿势,我们应该计算值

{x_y min, x_y max, x_z min, x_z max, y_z min, y_z max}

然后确保姿势对应值之间的每个差异都不会中断another_threshold,这也是从实验中得出的。

希望这是有道理的,或者至少您可以从中得出对您的目的有用的东西。

于 2012-11-30T06:56:28.877 回答
1

ICP 试图最小化你的点云和模型之间的距离,是吗?根据执行后的实际距离来评估它不是最有意义的吗?

我假设它试图最小化您尝试拟合的每个点与最近的模型点之间的平方距离之和。所以如果你想要一个质量指标,为什么不把这个和归一化,除以它适合的点数。是的,异常值会在某种程度上破坏它,但它们也会在某种程度上破坏你的适合度。

似乎您可以提出的任何计算都比 ICP 最小化的任何计算提供更多的洞察力,并将其合并到算法本身中更有用,因此它也可以最小化它。=)

更新

我想我不太了解算法。似乎它迭代地选择了一个点子集,将它们转换为最小化错误,然后重复这两个步骤?在这种情况下,您的理想解决方案会选择尽可能多的点,同时保持误差尽可能小。

您说将这两个术语结合起来似乎是一个弱解决方案,但在我看来,这听起来像是对您想要的东西的准确描述,并且它捕获了算法的两个主要特征(是吗?)。使用类似的东西进行评估error + B * (selected / total)似乎在精神上类似于使用正则化来解决梯度下降(和类似)ML算法的过度拟合问题。为 B 选择一个好的值需要一些实验。

于 2012-11-30T05:50:00.617 回答
1

看看你的例子,似乎决定比赛好坏的因素之一就是积分的质量。您可以在计算指标时使用/计算权重因子吗?

例如,您可以对共线/共面或空间上接近的点进行加权,因为它们可能定义了相同的特征。这可能会让你的倒置三角形被拒绝(因为这些点在一条线上,这不是整体姿势的一个很好的指标)但是角落情况会是好的,因为它们大致定义了船体。

或者,也许权重应该是点在姿势周围的分布情况,再次尝试确保您具有良好的覆盖范围,而不是匹配小的模糊特征。

于 2012-12-06T16:58:42.937 回答