关于ICP和内部度量

我有一个已经编写好的迭代最近点(ICP)算法,它可以将模型拟合到点云中。对于那些不了解的人来说,ICP是一个简单的算法,它将点拟合到模型上,最终提供模型和点之间的齐次变换矩阵。

这里是一个快速的图片教程。

第一步:在模型集中找到与数据集最近的点:

第二步:使用一系列有趣的数学方法(有时基于梯度下降或SVD)将点云拉近,并重复此过程直到形成一个姿态:

![Figure 2][2]

现在这一部分很简单并且已经工作了,我需要帮助的是:如何判断我得到的姿态是否是一个好的姿态?

目前我有两个想法,但它们有点不太严谨:

  1. ICP算法中包含多少点。例如,如果我几乎没有点来拟合,我假设姿态会很差:

    但如果姿态实际上很好呢?即使点很少也可能是好的。我不想拒绝好的姿态:

Figure 5

所以我们在这里看到的是,如果点的位置正确,即使点很少也可以形成一个非常好的位置。

所以另一个研究的度量是提供的点与使用的点的比率。这里有一个例子

Figure 6

现在我们排除了太远的点,因为它们将是异常值,现在这意味着我们需要一个好的起始位置来使ICP工作,但我对此没问题。现在在上面的例子中,保证会说不,这是一个坏的姿态,它是对的,因为点的比率与包含的点是:

2/11 < SOME_THRESHOLD

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

不需要是ICP的专家来回答这个问题,我在寻找好的想法。利用点的知识,我们如何判断它是否是一个好的姿态解决方案?

同时使用这两个解决方案是一个好的建议,但在我看来,这是一个相当愚蠢的解决方案,仅仅是阈值处理。

有什么好的想法来做这件事吗?

PS. 如果你想添加一些代码,请随意。我在使用C++工作。

PPS. 有人帮我标记这个问题,我不确定它应该属于哪里。


回答:

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

形状比较可以通过豪斯多夫距离到等距来完成,即如果

d(I(actual_pose), calculated_pose) < d_threshold

姿态具有相同的形状,其中d_threshold应通过实验找到。我认为X的等距修改可以考虑不同角度的旋转——在这种情况下似乎足够了。

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

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

然后确保每个姿态对应值之间的差异不超过从实验中得出的another_threshold

希望这有些意义,或者至少你可以从中为你的目的提取一些有用的东西。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注