发布时间:2023-01-18 11:30
为什么现在点云应用这么广泛,就是因为他有深度信息。
像人脸识别用来解锁手机,比如Iphnoe手机在前边有一个深度摄像头,所以它产生的点云真的是一个三维点云;然后很多手机他可能就没有深度摄像头,它产生的就是一个图像,所以有的时候我们就可以使用一张照片就能骗过Arnold手机,但是很难用照片去骗过Iphone手机,因为Iphone他用的是三维信息也就是点云。所以这就是点云为什么会这么广泛的被应用起来,因为他有深度信息。
PS:激光雷达获取数据的特点是近密远疏。
点云形式:
我们有N个点,每个点有XYZ三个坐标,那么很显然他就是一个的matrix矩阵了,当然我们也可以加一些额外的信息,每个点加一些颜色信息或者有一些法向量之类的。
点云可以从激光雷达中获取,RGBD相机中获取,获取其他的方式。
三维信息的表达形式:Mesh(三角形):三角形结构太复杂、Voxel Grid():规整的正方体比较的简单,但是他并不是很高效,因为我们的三维空间大部分都是空的,我们为一个空的空间,放这么多格子是一种对储存空间的内存浪费、Octree(八叉树):他解决的效率的问题,因为他只是在有物体的地方才会去细分每一个正方体,所以他的内存占用会少很多,代价就是这个的表达形式比较复杂,不是很好用。
from flann import...
Nearest Neighbor Search//用来做点云的最邻近搜索
点云的难点在:
(1)密度的问题。(尤其在激光雷达里边近处的物体会反射很多个点,远处的物体就非常稀疏,导致难以识别。)
(2)不规则。(图像的每一个像素都是排成一个很规整的网格,所以我要找一个像素的邻居,只需要上下左右一格就找到了,但是对于点云很难找到离一个点最近的另外一个点;或者一个点一个半径范围内的邻居也是很难的)
(3)没有纹理信息。(比如在自动驾驶里边三人并排走在一起就会可能被识别为一个车。)
(4)Un-ordered问题。对于深度学习而言,他输进去的矩阵是不一样的,就会产生不一样的输出,但我们希望输出是一样的,这个就是深度学习的Un-ordered问题。(如何用深度学习去处理这种顺序有关系的一些数据)
(5)Rotation旋转问题。我们去旋转这些点,我们知道他还是同一个物体,但是他的坐标是完全不一样的。
PCA(Principle Component Analysis):主成分分析。下面是二维和三维下的主成分分析图:
主成分分析的物理意义:主成分就是我先把这些数据点都投影到一个非常有特征性的方向上,然后每一个数据点在这个方向上的投影就是主成分。在三维情况下这个椭圆的主成分就是他的三个轴。
主成分的应用:
(1)降维(比如说上图中这些二维的点,如果我只把他投影到x plus上的话,他就变成了一维数据,而且这些一维数据最大程度上保全了这些点的原始信息就是沿着轴的分布,就是降维)
(2)法向量的估计(其实跟PCA是同一个应变量变,用的方法是一样的,)
(3)PCA可以用来作分类。
向量的内积就是点乘(就是把其中一个向量投影到另外一个向量上去)。
一个矩阵与一个向量的乘法其实就是对这个矩阵的每一列进行一个线性的组合。
从SVD的角度去理解物理意义:比如说上图中的矩阵M,他可以被分解成 其中和V都是一个正交矩阵(类似于旋转矩阵的东西),就是一个对角阵,他的对角线上储存了M的特征值,如果我把M乘以一个向量,第一步其实就是应用V在高维空间对这个向量做一个旋转,第一步这个圆被旋转了一下;第二步就是对这个旋转后的向量在每一个维度上做一个缩放,所以这个圆就变成了一个椭圆;第三步:再应用,也是高维空间上的旋转矩阵,所以我就把这个椭圆给旋转了一下。所以最后M乘以一个向量就是把这个圆变成了椭圆。
旋转矩阵就是正交矩阵。旋转矩阵是一个完美的矩阵——正交矩阵。
Q:旋转矩阵一定是正交矩阵,是对的。反过来正交矩阵一定是旋转矩阵,对吗?
A:不对。正交矩阵也可能是反射矩阵,不一定是旋转矩阵。
单位正交矩阵,且行列式为1,即是旋转矩阵。一个行列式为1的正交矩阵称为旋转矩阵。https://zhuanlan.zhihu.com/p/143056551
正交阵:https://www.cnblogs.com/caster99/p/4703033.html
https://blog.csdn.net/zhang11wu4/article/details/49761121
https://blog.csdn.net/mightbxg/article/details/79363699
Spectral Theorem(谱定理):
有一个对称矩阵A,他可以被分解为 ,(就跟上边的SVD是一样的,但是因为A是一个对称矩阵,所以左右的两个是同一个,)。就是A的特征值,
如果矩阵的各列向量都是单位向量,并且两两正交。那么就说这个矩阵是正交矩阵。(参考xyz三维空间, 各轴上一个长度为1的向量构成的矩阵)
正交矩阵:https://zhuanlan.zhihu.com/p/258464098?utm_source=wechat_session
https://www.doc88.com/p-7844806191895.html
Rayleigh Quotients(瑞利熵):
是一个向量,就是这个向量的模,就是在中间插入了一个对称矩阵A,之后就可以取得最大最小值。可以从SVD的物理意义去解释这个事情,如果我把这个A应用到这个向量上边去,那么其实就是对他做一些旋转缩放。这个特征值就是对这个向量的缩放,因为旋转不会改变向量的长度。
所以瑞利熵说的就是我这个A最终能够拉长或者缩短我这个向量多少倍,就是和是A的最小和最大特征值。
特征值分解只能针对于实对称矩阵,SVD分解是针对于任何矩阵的。每个实数矩阵都有一个奇异值分解,但不一定都有特征分解。例如,非方阵的矩阵没有特征分解,这是我们只能使用奇异值分解。特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,在现实的世界中,我们看到的大部分矩阵都不是方阵,所以要用到奇异值分解。
https://blog.csdn.net/jcjunior/article/details/88064143
https://blog.csdn.net/lyxleft/article/details/84864791
是通过旋转一下,是通过对做一个高维的旋转,就是把它乘以一个,所以我们知道旋转是不会改变一个向量的长度的,所以这个的和和的和是一样的,
2.3.1 概念:
PCA输入:PCA的输入是就是高维空间的一个向量,我们可以有m个向量,就是一堆高维空间中的点。
PCA输出:PCA的输出是一堆主要的向量。比如说就是他最主要的向量,描述了一群点里面最有代表性意义的高维的方向。
Q:什么叫做最主要的成分?
A:其实就是说如果我把这个些高维点投影到某一个方向上,这些投影后的点方差要最大,就是说这些点在那个方向上,分布的非常的散。
Q:(假设我们已经得到了最主要的向量比如说),我们如何得到 ?
A:就是我们先把这一组输入里边的属于的成分都去掉,然后我们再找剩下的东西里边的最主要的成分,就得到第二个。
Q:第三个最主要的成分怎么得到?
A:就是我把第二个最主要的方向的成分都去掉,同上就可以了。
2.3.2 PCA证明