【发布时间】:2017-06-07 21:09:40
【问题描述】:
我有 2 个点云(3D 空间中的一组点)和一个迭代算法。其中一个云(我们称之为A)在每次迭代中是恒定的,而另一个(称之为B(i))在每次迭代中略有不同(这意味着B(i+1) 与 B(i) 的区别仅在于几点)。对于来自 A 的每个点的每次迭代 i,我的算法应该找到距离 B(i) 最接近的点。
我的问题是:如何以最快的方式计算这些距离?
这是我已经尝试过的:
- 蛮力计算(计算每对点到 A 和 B(i) 的所有距离) - 绝对低效。
- 在每次迭代中,为 B(i) 构建一个 KD 树,然后从 A 中找到每个点的最近点 - 比蛮力更快,但计算量仍然很大(因为我应该在每次迭代时重建 KD-tree)。
似乎我应该利用一个事实,即 B(i) 和 B(i+1) 彼此之间仅略有不同,但我仍然不能想出一个好的解决方案。提前谢谢你。
【问题讨论】:
-
1.云是否代表两个不相交的实体?如果是这样,您应该能够将 A 减少到其凸包上的点集。 2. 为什么不为 A 建立 k-d 树?然后,不是遍历 A 中的点并找到 B 中的最近点,而是遍历 B 中的点并找到 A 中的最近点。在 A 中找到最近点将被 k-d 树加速,并且你有只构建一次。
-
不幸的是,这些云不是固体,它们确实相交。我不能像你建议的那样切换 A 和 B(i),因为我需要知道从 A 的每个点到 B(i) 的距离,但是在这个解决方案中,对于 A 的点,我不会得到远离 B(i)。
标签: algorithm 3d point-clouds kdtree