algorithm - 找到范围内的所有点到另一组的任何点

标签 algorithm matlab image-processing knn

我有两组点 AB

我想找到B中所有在rA范围内的点,其中a点b<B 中的/strong> 被认为在范围 rA 中,如果至少有一个点 aA 中,其到 b 的(欧几里德)距离等于或小于 r。

两组点中的每一个都是一组连贯的点。它们是从两个不重叠对象的体素位置生成的。

在 1D 中这个问题相当简单:B 的所有点在 [min(A)-r max(A)+r]

但我在 3D 中。

执行此操作的最佳方法是什么?

我目前使用某种 knn 算法(即 matlab 的范围搜索)重复搜索 AB 中所有点的每个点,然后将所有这些集合结合起来。但我觉得应该有更好的方法来做到这一点。我更喜欢 matlab 中的高级/矢量化解决方案,但伪代码也很好:)

我还想过将所有点写入图像,并在半径为 r 的对象 A 上使用图像膨胀。但这听起来开销很大。

最佳答案

您可以使用 k-d tree存储 A 的所有点。

迭代 B 的点 b,对于每个点 - find the nearest point in A (让它成为)在 k-d 树中。当且仅当距离 d(a,b) 小于 r 时,点 b 才应包含在结果中。

复杂度为 O(|B| * log(|A|) + |A|*log(|A|))

关于algorithm - 找到范围内的所有点到另一组的任何点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18086052/

相关文章:

c++ - loadlibrary 和 C++ 头文件

iOS慢速图像像素迭代

java - neo4j 中的随机后序遍历

java - 是否有计算组件净需求的最佳算法?

algorithm - 用于节点编辑器评估的高效图形遍历

Matlab - 创建两个数组,考虑两个对象的所有可能值

matlab - 找到图像 : Matlab 一系列曲线的交点

c++ - 是否有任何好的算法实现来检测相似图像?

php - 如何在使用PHP删除图像后显示图像

java - 数组分区最小差异