其他分享
首页 > 其他分享> > 3D点云 --最近邻查找

3D点云 --最近邻查找

作者:互联网

绪论:常见的查找最近邻点的方法有BST、KD-Tree、Octree.其中BST用于一维查找,KD-Tree用于K维(k=1就是1维,k=3就是三维),Octree用于三维。题主主要是为了做点云学习的一些基础知识,所以Octree详细讲解一下。

系列文章目录

后期会有呦

文章目录

一、为什么NN问题很重要(不直接使用FLANN,pcl等)

1.现成的库不够高效
2.建立在GPU上的NN library很有价值

二、BST、Kd-tree、Octree详解与代码解析

1.BST(二叉树)

懒得上代码了嘿嘿嘿,网上资源很多

2.Kd-tree(如何切空间,如何查询点)

1
最后的结果,之前就是两个轴轮换着切,至于结果为什么是下面这样子的,是因为我们把分割点数设为1.1

如下图所示为关键的几步示意图,还是按照KD-Tree的交替查找方式:
1
缩小范围
得到了初始的worst distance
缩小查找范围
最终结果

结论:KD-Tree结构很复杂,很难分析,主要因为其K和r很难决定,你说我取几个点合适,我半径worst distance多少,嘿,我不清楚。

依旧不放代码啊哈哈哈哈哈,

3.八叉树Octree(如何切空间,如何查询点,如何提前终止查询)

class Octant:
def_init_(self,children,center,extent,point_indices,is_leaf):
self.children=children
self.center=center
self.extent=extent
self.point_indices=point_indices
self.is_leaf=is_leaf

在这里插入图片描述
其实一开始是没有worst distance的,需要找到兴趣点所在区域的点与其之间的距离设置为worst distance。

Case1 :正方体与球体太远,无接触
在这里插入图片描述

Case2:不太远,是否与面有接触
在这里插入图片描述

Case3:正方体边和角点与球体是否有交集
在这里插入图片描述

最后,contain()函数可查看球体是否包含正方体

总结

简单的介绍了最近邻搜索不同维度的不同方法,详细介绍八叉树应用与三维点上的数据结构,空间切分,查找以及提前终止条件。作为个人的学习笔记,与大家共同探讨。

标签:--,self,查询,如何,查找,Octree,点云,3D,BST
来源: https://blog.csdn.net/weixin_44275495/article/details/115297164