2012-11-28 32 views
10

所以我有一个iterative closest point(ICP)算法,它已被编写并将适合点云模型。作为不熟悉ICP的人员的快速教程,它是一种简单的算法,它适用于最终在模型和点之间提供均匀变换矩阵的模型。保证ICP,内部指标

这是一个快速图片教程。

第1步:查找模型设置为您的数据集的最近点:

步骤2:用一堆有趣的数学(有时是基于gradiant血统或SVD)的拉云密切协作,并重复直到姿势形成:

[图2] [2]

现在有点简单的工作,我想帮助的是: 我如何告诉,如果我有姿势是一个好的?

所以目前我有两个想法,但他们那种哈克:

  1. 很多点是如何在ICP算法。也就是说,如果我适合几乎没有分数,我认为姿势会很糟糕:

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

Figure 5

所以,我们在这里看到的是,较低的点实际上可以使一个很好的位置,如果他们是在正确的地方。

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

Figure 6

现在我们exlude是太遥远了点,因为他们会离群,现在这意味着我们需要对ICP工作一个很好的起点位置,但我确定这一点。现在,在上面的例子中保证会说NO,这是一个糟糕的姿势,这将是正确的,因为分VS包括分比为:

2/11 < SOME_THRESHOLD 

因此多数民众赞成好,但它的情况下失败如上图所示,三角形倒置。它会说倒三角形是好的,因为所有的点都被ICP使用。

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

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

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

PS。如果你想添加一些代码,请为它。我正在使用C++。

PPS。有人帮我标记这个问题,我不知道它应该落在哪里。

+0

如何定义姿势?线段? – FoolishSeth

+0

作为一个齐次变换矩阵。 –

+0

出于好奇,你有没有找到解决方案?你用过答案中提供的东西,还是想出了你自己的东西? – Andrei

回答

3

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

形状比较可以与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,从实验中得到的为好。

希望这样做有道理,或者至少你可以从中为你的目的画一些有用的东西。

+0

直到现在我还没有真正阅读过这个点。对于第二个建议,你是否需要实际的姿势来进行比较。我们没有实际的姿势,所以不会工作。 –

1

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

我假设它试图尽量减少每一点你尝试适合和最接近的模型点之间的平方距离的总和。所以如果你想要一个质量指标,为什么不只是将这个总和归一化,除以它适合的点数。是的,异常会破坏它,但它们也会在一定程度上破坏你的健康。

看起来像任何可以提供更多洞察力的计算,比任何ICP最小化都更有用,将会更有用,并纳入算法本身,因此它可以最小化。 =)

更新

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

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

+0

不幸的是,基于您尝试最小化的值,基于姿势正确的保证不是一个好主意。任何时候该姿势落入局部最小值时,都会显示出良好的姿势。事实上,如果ICP工作正常,那么它总是会显示出良好的姿势,这不是很好。 虽然很好的答案。 –

+0

这不太合理。当然,算法可以达到局部最小值,但它试图最小化的值仍然不会像它发现全局最优值那样小。 – FoolishSeth

+0

在正常情况下ICP是的,但是通过阈值去除点,您会发现它通常与全局最小值相似或更小。您还必须记住,模型点也不完全匹配数据点。我们尝试过这种方法,发现它对我们的目的不是很好。 –

1

看看你的例子,似乎决定匹配是否合格的一件事是点的质量。您可以在计算您的指标时使用/计算权重因子吗?

例如,您可以减小共线/共平面或空间上接近的点,因为它们可能定义了相同的特征。这可能会允许你的倒置三角形被拒绝(因为点在一条线上,而不是整体姿势的一个很好的指示器),但是角落也是可以的,因为它们大致定义了船体。

或者,也许权重应该是如何分布点的姿势,再次试图确保你有良好的覆盖面,而不是匹配小模糊的功能。

+0

好的建议,你有任何文件或参考完成这件事。我也担心计算强度,你认为这将是非常密集的?当模型比三角形更复杂时,例如卡车或飞机,如何检查形状的覆盖面? –

+0

虽然在Siggraph程序中可能会有些东西,但我觉得这是一个熟悉的问题。无论如何,我想可能构建一个粗糙的八叉树会相当便宜,并且可以使用包含匹配点的叶节点数作为覆盖率的指示。 – JasonD