课程笔记-三维点云处理02 ——Nearest Neighbor Problem
本系列笔记是对深蓝学院所开设的课程:《三维点云处理》的笔记
课程每周更新,我也会努力将每周的知识点进行总结,并且整理成笔记发上来,欢迎各位多多交流&批评指正!!
本文主要为课程第二章的笔记!
课程链接:
目录
正式内容:
####################################################
最邻近问题(NN problems)
本节课主要讲最邻近问题(Nearest Neighbor Problem)
用来找一个点离他比较近的点
处理的主要方法一个是KD树,一个是八叉树,本节课主要就是讲这两个方面,但是讲这两个方面之前还会讲一下二叉树
方法概述
一般常见的两种方法就是K-NN 和R-NN
如上图所示 一个是根据距离排序,另一个是给定区域内搜索 是两种不同的思路
NN问题的重要性
对于点云处理来说,最邻近问题是一个基本且重要的问题,因为点云的特征信息就储存在点云的位置信息中,所以这个问题是非常基本的且常用的。
目前开源的库有很多,但是库里面集成的最临近算法都不够快(不知道为什么)
NN问题对于处理点云的困难点
主要有以下原因:
- 点云不像图像像素,是有规则排列的,具有无序性
- 点云存在在三维空间坐标中,比二维的要高,处理计算量要大一个数量级
- 按照网格化来划分的话,点云会存在很多空白的网格,而且处理起来效率很低
- 算法事实上运行起来非常大,比较吃力。
本节课结构
- 二叉树
- KD树
- 八叉树(专门为3D空间结构设计(因为2的3次方是8)) 相比于KD树更加适合三维
算法的核心思想:空间分割
space partition 空间分割是这三个算法的核心思想
比较直观的理解,寻找一个点的临近点时,肯定不能漫无目的的搜索,而是要首先在他的周围进行寻找。 这就是空间分割的原理
K-NN问题 :就是找他最近的K个点的意思
worst distance: 就是目前查找到的最远的点。 也就是说,如果查找的是K-NN问题的话,如果已知有K个点了,且其中最远的点的距离为x,那么这个x就是 worst distance,也就是说,不用在worst distance以外查找,只需要在这个距离里面查找就行了(因为在这个距离外面就算找到了也是没有意义的)
核心任务提炼
- 怎样对空间进行分割
- 如何去判断以及跳过搜索空间
- 如何去判断何时停止搜索
Binary Search Tree
认识二叉树
二叉树就是一个数分两个叉,跟两个数建立联系
但是这种联系是有规律的:
-
一个二叉树节点有且最多有两个分支
-
在划分分支的时候,小的放左边,大的放右边
二叉树早在计算机科学的开端就已经被提出使用了(是计算机一些很基础的数据结构)
很多算法岗在找工作的时候也会被问到 怎么搜索或遍历一