(1分钟速览)最近邻搜索--激光SLAM常用必杀技

学习kdtree的数据结构,和二叉树的思想大体上算是比较相似的。

参考博客:https://blog.csdn.net/dive_shallow/article/details/113136145

(1分钟速览)最近邻搜索--激光SLAM常用必杀技_第1张图片

建树,一个递归的操作。

(1分钟速览)最近邻搜索--激光SLAM常用必杀技_第2张图片
(1分钟速览)最近邻搜索--激光SLAM常用必杀技_第3张图片
(1分钟速览)最近邻搜索--激光SLAM常用必杀技_第4张图片

这里的删除操作很好理解,分左子树和右子树两种情况。如果是左子树那么找最大的,如果是右子树,则找最小的。

(1分钟速览)最近邻搜索--激光SLAM常用必杀技_第5张图片
(1分钟速览)最近邻搜索--激光SLAM常用必杀技_第6张图片

上面这个例子就是说,当走到(13,10)这个节点以后,本来应该往右子树走的,但是右子树为空,那么就返回到上一层,然后程序结束返回(13,10)。但其实(12,8)才是我们所以得到的解,那么此时我们就以(10.1, 10.1)为圆心,到(13,10)的距离为半径画圆,发现(12,8)在圆内,所以此时对(12,8)进行进一步递归,然后继续求解即可。

下面是kdtree使用替罪羊进行增删改查的学习

博客:https://juejin.cn/post/6844904128150241294

(1分钟速览)最近邻搜索--激光SLAM常用必杀技_第7张图片

Kdtree不能像平衡二叉树那样进行旋转操作。

(1分钟速览)最近邻搜索--激光SLAM常用必杀技_第8张图片

我的理解就相当于是一种延时操作。

(1分钟速览)最近邻搜索--激光SLAM常用必杀技_第9张图片

拍平操作,就是对极度不平衡的部分取出来,然后重新构建该树。

(1分钟速览)最近邻搜索--激光SLAM常用必杀技_第10张图片

这里对平衡的理解:我的理解就是,如果这颗二叉树平衡了,即左右子树的高度相差在1之内,那么这颗二叉树的查询效率非常高,每次对半查询,那么时间复杂度就是logn。

(1分钟速览)最近邻搜索--激光SLAM常用必杀技_第11张图片

打上标记,也是一种延时的操作。这部分在ikdtree里面也使用到了。

(1分钟速览)最近邻搜索--激光SLAM常用必杀技_第12张图片

总结像是心灵鸡汤。结束本篇博客。

针对最近邻搜索,最常用在激光slam中,对点云的最近邻点云进行搜索。Kdtree->替罪羊改善数据结构->ikdtree->ivox,随着这些年的进步,最近邻搜索的数据结构越来越完善,最近邻搜索查询的效率越来越高。

你可能感兴趣的:(SLAM)