课程笔记-三维点云处理01 ——Introduction and Basic Algorithms

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms

本系列笔记是对深蓝学院所开设的课程:《三维点云处理》的笔记
课程每周更新,我也会努力将每周的知识点进行总结,并且整理成笔记发上来,欢迎各位多多交流&批评指正!!

本文主要为课程第一章的笔记!

课程链接:

三维点云处理——深蓝学院

正式内容:
####################################################

Course outline and prerequisite

####课程内容介绍

本系列课主要介绍三维点云 处理 及应用
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第1张图片
三维点云是一系列的三维点位置坐标

三维点云获取形式:

lidar
RGBD
CAD模型
SfM(交叉矩阵结构)(Structure from motion) 是一种三维重建的方法
等等

三维点云应用

应用比较广泛,因为输入信息比较简单。
应用领域:
机器人领域
自动驾驶领域
3D模型重构
人脸识别(faceID)
等等

三维空间表示方法

除点云外,三维空间的表示方法主要还有以下几种,各自有优缺点:
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第2张图片
mesh是一系列的三角面片组成
体素占用内存过大
二叉树(octree)可以解决占用内存过大的缺点,但是表述起来相对困难一些

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第3张图片
与上面几种表述方式相比,点云只是一个矩阵,表述起来非常简单。因此这些年来被广泛沿用

点云应用的困难

三维点云在应用上也有很多困难:

  1. 密度 点云一般在近处的物体很稠密,远处的物体很稀疏,使得远处的物体很难被识别
  2. 不规则 很难找到相邻点之间的规律(不想图像排列那么规范)
  3. 纹理信息 由于没有纹理信息,只有位置信息,所以会发成误识别
    (个人理解:只能检测有没有 不能检测是什么)
  4. 无序性 (不利于深度学习)
  5. 旋转不变性 (深度学习)
课程设置

传统方法+深度学习方法
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第4张图片
传统方法:知道步骤,门槛较高
深度学习:简单,好用,黑盒子

传统方法 vs 深度学习
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第5张图片
课程设置上,前四节课是传统方法,后四节课是偏向深度学习和slam应用的:
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第6张图片
课程设置:理论讲解和实践讲解 五五开
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第7张图片

参考 书籍&课程&课程工具



课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第8张图片

作业安排

每周都有作业,有必做和选做,选做的难度相对较高

期中和期末有大作业
期中: KITTI数据集地面提取
期末:基于点云的目标检测问题

PCA and Kernel PCA

PCA

PCA:主成分分析

主成分分析的概念和应用

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第9张图片

应用:
Dimensionality reduction
Surface normal estimatior
Canonical orientation
Keypoint detection
Feature description

降维
表面法向估计器
规范定向
关键点检测
功能描述

主要是用于点云分类

一些基础的数学概念

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第10张图片

股定理:
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第11张图片
瑞利商:
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第12张图片

PCA原理

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第13张图片
输入:xi…
输出:聚类过后的xi的聚类集合 zk

PCA使用方法

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第14张图片

PCA应用

一个非常常见且重要的应用:降维
将高维数据转化为低维数据,并且尽可能的保留特征
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第15张图片
可以用先主成分分析再聚类处理分类问题 比较著名的 eigenfaces: 不用神经网络就能做人脸识别·

Kernal PCA

普通的PCA事实上是一个线性的PCA,事实上也是对矩阵的线性组合
但是点云数据很可能不是线性的,比如:
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第16张图片
此时,如果还用线性的话就不行了,需要将其放到更高的维度去做处理
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第17张图片
提升到三维空间中,就可以非常好的去做理解和处理了

这一个升维聚类的方法就被称为kernal PCA (核 PCA)

K-PCA的方法

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第18张图片
数学证明:

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第19张图片
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第20张图片
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第21张图片
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第22张图片
一通操作,一个都没看懂。。。
以后慢慢再看吧

总之,最后得出了结论

核函数的选择

有多重核函数可以选择,但是通常要看应用的场景
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第23张图片

K_PCA的步骤
  1. 选择一个核函数k(xi,yj),并计算出Gram Matrix K(i,j)
  2. 对 K做一个正态化处理(为了使函数在高位度内的平均值也为0)
  3. 求解高纬度下的特征值和特征向量
  4. 对解出来的α做一个正态化处理
  5. 完成以上步骤后,可以把任何一个数据点投影到主向量上,得到投影后的数据
    课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第24张图片
    示例1: 圆圈投影成圆锥
    课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第25张图片
    示例2:使用高斯核函数
    课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第26张图片

同时,运用KPCA可以将高维的运算转化为低维度的核函数

Smoothing, Filtering and Downsampling

surface normal

作为上方K-PCA的应用:
.
如何找点云里面每一个点的法向量

法向量

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第27张图片
对于曲面、体 来说 法向量可以是垂直于他所切平面的向量

对于点云来说,寻找法向量找的是最没用的向量

所谓最没用的点,言外之意就是数据投影在这些向量上面数据为0,即最不显著的向量

曲率为最小特征值除特征值的和

点云法向量定义

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第28张图片
找一个点云分布上最大的平面,然后根据平面方向确定这一组点云的法向量

其中,上图中点c作为这一系列平面的中心点存在。
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第29张图片
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第30张图片

如何确定c: 找到这一组点中和其他点平均距离最小的点值
正态化分布 这些点到c的距离

法向量求解时实际问题

实际求解法向量时,可能会遇到很多问题,比如点没有按维度分布、非常稀疏等等
即,这些点是需要做噪声处理的
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第31张图片
大概有上述四种方法可以对于这个问题进行简化,目前先讲一下第二种方法:
带加权的正态估计

weighted normal estimation

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第32张图片
也可以用深度学习方法进行法向量估计:
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第33张图片
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第34张图片

fliters 滤波

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第35张图片
滤波是一个很宽泛的概念,如噪声去除;降采样;上采样;平滑等操作
都可以统称为滤波

降采样:变稀疏

上采样:在稀疏的点云中添加一些点使其变稠密(比如双边滤波方法)

噪声去除

规定一个点的周围一定范围为其邻域,在领域内点的个数如果少于一定值则将该点去除(过滤掉)
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第36张图片
统计版本的outlier removal

同样对领域内的点做一个邻域规定,然后根据平均的距离求一下分布,并且根据3σ去做一个筛选
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第37张图片

降采样 voxel grid downsampling

使得需要的算力更少,是一种让数据更有代表性的方法
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第38张图片
一般可以有几种方法,一个是以范围内的一个点代替所有点,另一个是选取方框内点的平均值,如下图
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第39张图片
降采样的流程:
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第40张图片
先定义一个大框,把所有点都放进去
然后定义降采样的分辨率,按照体积划分网格
然后计算每哪一个点属于哪一个格子
对每个点进行排序,然后开始进行采样(可以选择采样策略)
最后保留选择的点,完成采样

注意1:当空间很大的时候没,注意不要内存溢出
注意2:排序的时候要用小于做排序,而不能是小于等于(c++中)

降采样遇到的问题:
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第41张图片
数据很大,应该怎么处理?
因为空间很大,所以很多voxel事实上里面是没有点的,所以我们不需要根据容器来划分点,应该根据点去装容器,然后把空的容器去掉
可以用 hash table,方法如下:
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第42张图片
前四步都一样,第五步开始定义一个哈希函数,使得每一个点都能映射到一个函数中;

但是事实上,可能会出现冲突:
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第43张图片
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第44张图片
出现冲突的时候,需要释放冲突,新来的点占坑,将原有的点重新回到序列中

这个方法跟普通的降采样相比,可以更快。

其他降采样方法:(FPS、NSS)
FPS方法

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第45张图片
核心思想是,找一系列点,让这些点的平均距离越远越好
过程:一个一个寻找,每次寻找距离最远的点
作用:可以去除掉一些很稠密的点,让其变得更加稀疏。

NSS方法

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第46张图片
可以增加一些特征部分的采样点选取的稠密性,以此来保证特征(如上图中的一个弯)

经常应用于点云的对齐

深度学习方法

如:learning to sample
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第47张图片
不是基于几何空间的降采样,而是基于语义的降采样
这样的话可以使得有特征的点被保留
即降采样前后,点云还是可以保留原来的语义标签

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第48张图片

上采样 :bilateral filter

例子:希望对一个亭子做模糊
可以用高斯和 去做模糊 用他周围的xiangg
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第49张图片
这个效果肯定是不理想的,因为我们想虽然亭子模糊,但是边缘特征要保留
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第50张图片
就可以通过 bilateral filter 进行保留
意思是通过两个高斯核进行处理
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第51张图片

HW 作业

课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第52张图片
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第53张图片

下节课预告

点云的邻近搜索 三种方法
课程笔记-三维点云处理01 ——Introduction and Basic Algorithms_第54张图片

你可能感兴趣的:(课程笔记,深度学习,python,线性代数)