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

Find a distance between point clouds efficiently

我有 2 个点云(一组 3D 点 space)和一个迭代算法。其中一朵云(我们称之为 A)在每次迭代中都是不变的,而另一朵云(称之为 B(i))在每次迭代中都略有不同迭代(这意味着 B(i+1)B(i) 仅在几个点上不同)。对于 A 中的每个点的每次迭代 i 我的算法应该从 B(i) 中找到最近的点.

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

这是我已经尝试过的方法:

看来我应该利用一个事实,即 B(i)B(i+1) 彼此之间仅略有不同其他,但我仍然想不出一个好的解决方案。提前谢谢你。

对于 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 树允许删除,因此您无需每次迭代都从头开始重建整个事物。

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