algorithm - 有效查找点云之间的距离

标签 algorithm 3d point-clouds kdtree

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

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

这是我已经尝试过的:

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

看来我应该利用 B(i)B(i+1) 彼此之间仅略有不同的事实,但我仍然不能想出一个好的解决办法。预先感谢您。

最佳答案

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

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

对于 A 中的每个点:

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

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

关于algorithm - 有效查找点云之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44422807/

相关文章:

algorithm - 在 R 中,相当于 upper_bound()

node.js - 简化 Node.js 服务器的速率限制算法

java - openGL 中的帧速率和绘制流程

javascript - Light mesh with specific light 三个js

math - 检查空间中的 4 个点是否是矩形的角点

C# 点云匹配 (Visual studio 2013)

PHP:用算法简化?

algorithm - 将数组的元素分成 3 组

matlab - 如何在 Matlab 中更新散点图(循环)

opencv - 如何对齐(注册)和合并点云以获得完整的 3d 模型?