因此,我已经编写了一种iterative closest point(ICP)算法,并将该模型适合点云。对于那些不了解ICP的人来说,这是一个快速教程,它是一种简单的算法,可将点拟合到模型,最终在模型和点之间提供均匀的变换矩阵。

这是一个快速图片教程。

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

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

![图2] [2]

现在,这一点很简单并且可以正常工作,我想提供的帮助是:
如何判断我的姿势好吗?

因此,目前我有两个想法,但它们有些怪异:

  • ICP算法中有多少点。即,如果我几乎不适应任何点,那么我认为姿势将是不好的:

    但是,如果姿势真的好呢?即使有几点,也可能是这样。我不想拒绝好的姿势:


  • 因此,我们在这里看到的是,如果在正确的位置,低点实际上可以取得很好的位置。

    因此,研究的另一个度量标准是提供的点数与使用的点数之比。这是一个例子

    现在我们排除了离得太远的点,因为它们将成为异常值,这意味着我们需要一个良好的开始位置来使ICP起作用,但是我可以接受。现在在上面的示例中,保证将说不,这是一个不好的姿势,这是正确的,因为包含的点数与点数之比为:
    2/11 < SOME_THRESHOLD
    

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

    不需要,需要成为ICP的专家才能回答这个问题,我正在寻找好主意。利用这些点的知识,我们如何对它是否是一个好的姿势解决方案进行分类?

    最好同时使用这两个解决方案,但是如果您问我,这是一个非常la脚的解决方案,非常愚蠢,只能将其阈值化。

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

    PS。如果要添加一些代码,请继续。我在用c++工作。

    PPS。有人可以帮我标记这个问题,但我不确定应该落在哪里。

    最佳答案

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

    可以使用Hausdorff distance up to isometry进行形状比较,也就是说,如果

    d(I(actual_pose), calculated_pose) < d_threshold
    

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

    如果姿势具有相同的形状,则应比较它们的方向。为了比较方向,我们可以使用简化的Freksa model。对于每个姿势,我们应该计算值
    {x_y min, x_y max, x_z min, x_z max, y_z min, y_z max}
    

    然后确保姿势的相应值之间的每个差异都不会破坏从实验得出的another_threshold

    希望这很有道理,或者至少您可以从中得出一些有用的信息。

    07-24 14:09