k-最接近一个点的空间查询

Spatial querying for k-th closest neighbour of a point

本文关键字:空间 查询 一个 最接近      更新时间:2023-10-16

我正在使用一种算法,该算法反复需要(欧几里得)到k-最接近的点,从某些给定的查询点开始,这都是从点的向量中获取的。另外,我一再需要在一个点的半径内找到所有点。

我正在考虑使用Nanoflann库中的K-D树。但是,knnsearch()函数返回所有我不需要的K最近的K邻居。(不过,radiussearch()函数适合我)。

除了每次都在所有K最近的K邻居中,还有一种更有效的方法来获取我的需求吗?更好的数据结构还是更好的实现?(我正在使用C 。)

我正在考虑使用K-d树

2D或3D的绝佳选择。

k-d树是低维数据的好选择(我认为您有Nanoflann"主要是针对2D或3D点云进行了优化的"。)。

除了每次都在所有K最近的K邻邻邻邻邻居外面,是否有更有效的方法来获得我的需求?

您需要k-th最近的邻居(nn),但是当搜索k-d树以k nns搜索时,昂贵的操作(按时间)正在找到第一个NN(这需要您下降到树下,从根到叶子)。

找到第二,第三或另一个索引的nn相对便宜,我高度怀疑它会损害性能(即,从树返回的k nns中获取k-th nn是瓶颈)。<<<<<<<<<<<<<<<<<<<<<<<</p>

所以,我强烈建议您不必担心那一步。

更好的数据结构或更好的实现?

我不这么认为。我没有使用nanoflann,但是CGAL用于此类疑问,值得尝试(但是CGAL需要安装(不是蛋糕),而Nanoflann只是一个标题)。