有效地找到点云之间的距离

时间:2017-06-07 21:09:41

标签: algorithm 3d point-clouds kdtree

我有2点云(3D空间中的一组点)和迭代算法。其中一个云(让我们称之为 A )在每次迭代时都是常量,另一个(称之为 B(i))在每次迭代时略有不同(这意味着 B(i + 1)仅在几个点上与 B(i)不同。对于来自 A 的每个点的每次迭代 i ,我的算法应该找到距 B(i)最近的点。

我的问题是:如何以最快的方式计算这些距离?

以下是我已经尝试过的内容:

  • 强力计算(计算 A B(i)中每对点的所有距离) - 绝对低效。
  • 在每次迭代中为 B(i)构建一个KD树,然后从 A 中找到每个点的最近点 - 比蛮力更快,但计算成本仍然很高(因为我应该在每次迭代时重建KD树)。

似乎我应该利用 B(i) B(i + 1)彼此略有不同的事实,但我仍然可以&#39提出一个很好的解决方案。提前谢谢。

2 个答案:

答案 0 :(得分:3)

对于A中的每个点,记录上一次迭代B(i)中哪一点最接近。

在迭代i + 1中,列出B中每个在i和i + 1之间删除或更改的点,以及B中的每个新点。

对于A中的每个点:

  • 如果B中的前一个最近点没有被改变或移除,那么你只需要计算从A到B(i + 1)中最接近的新点的距离,并检查B中最接近的点(i) )。
  • 如果B(i)中的前一个最近点被更改或删除,则需要计算从A到B(i + 1)中任意点的最近距离

您可以使用KD树或您喜欢的任何空间数据结构来加快速度,但优化来自第一种情况。请注意,KD树允许删除,因此您不需要在每次迭代时从头开始重建整个事物。

答案 1 :(得分:0)

您还可以使用Wasserstein距离来测量两组点云之间的距离。在这种情况下,您认为每个点云都是从概率分布中得出的。