三维点云处理(二)——PCA


前言

上一回我们介绍了点云的基本概念,然后介绍了不同感知源头获取到数据的各种特征,之后是处理点云数据的一些主流方法,今天开始正式进入传统数学方法的研究


下面正式开始介绍

1.Principle Component Analysis

PCA is to find the dominant directions of the point cloud。

Applications:

  • Dimensionality reduction (降维)
  • Surface normal estimation (表面法向估计)
  • Canonical orientation (正则定向)
  • Keypoint detection (关键点检测)
  • Feature description (特征描述)

在这里插入图片描述
第一个知识点是主成分分析(PCA),如图所示是在二维和三维情况下的主成分分析,先将三维数据进行降维,保存原始信息, 另一个就是法向量的估计。所以其实聚类不光可以用深度网络来做,还包括PCA、KPCA,这些都是可以用来做分类,下面来看一些基础的数学概念和物理意义,这样会有助于我们理解后面的一些证明。

1.1 Physical intuitions

首先需要了解几个基础知识:

  1. 向量点积(Vector Dot Product)点积公式;
  2. 矩阵和向量的乘法,矩阵的列的线性组合
  3. 从SVD的角度来理解。几何意义上进行旋转,缩放,旋转。
    在这里插入图片描述
    我们可以得到一个线性代数框架中的结论谱定理(Spectral Theorem),如果我们有一个对称矩阵M,那么可以被分解成如下形式,λ是ui的特征值:

1.2 Soectral Theorem

在这里插入图片描述

1.3 Rayleigh Quotients

然后是瑞利熵(Rayleigh Quotients),对于Ax是x的对称矩阵,有x=u1和x=un,则可以得到A的最大最小值
在这里插入图片描述
通过谱定理来证明瑞利熵,将对称矩阵Ax分解,通过将x进行一个高维旋转转换成Xu,由于旋转不改变向量长度,则xi的和和x-的和相同,通过组合变换得到瑞利熵的定义如下:
在这里插入图片描述

1.4 PCA

下面是PCA(主成分分析)的主要定义:
在这里插入图片描述
总体来说PCA主成分分析即对输入进行降维和聚类。我们的输入是Xi,为高维空间里的m个向量,由一堆高维输入的点输出一群主要的向量,得到的Z1即为最主要的点,具体来说,即这些高维点投影到某一个方向上,这些投影后的点方差要最大,也就是说这些点在那个方向上分布的非常的散。将Xi里输入Z1的成分都去掉,再找剩下的里面最主要成分,就得到了第二个主成分,那么第三个要如何取得呢?我们来看看证明:
在这里插入图片描述
因为我们关心的是方向,而并非中心点,所以我们将中心点设置为0。PCA就是当z投影到一个方向上时取得的最大向量,然后计算方差,在减掉了中心点之后求取到最大值:
在这里插入图片描述
在代入了瑞利熵的定理之后证明得到PCA的求解,关于H = ∑²,我们通过SVD的形式来分解H:
在这里插入图片描述
可以看到谱定理和SVD是很相似的,用SVD的形式就可以求解Z2,在求解Z2时,将这些数据点里属于Z1的成分去掉。在推演中要注意Ur是正交矩阵,他的每一列都是互相垂直的,z2=u2。
在这里插入图片描述
最后结论主成分向量就是Ur的列,第一个基地就是Xi最有代表性的方向,第二个基地为垂直于第一个基底的另一个方向,以此类推PCA可以理解成一个基底置换的过程,这样的方式即为降维(Dimensionality Reduction)。
在这里插入图片描述

1.4 Dimensionality Reduction

例如存在一群n维的点,将这群n维的点投影到低维空间里,同时保留其特征值就是降维,这是PCA里常用的算法,通过无监督学习的方式将输入进行聚类和降维,用PCA找出其l个主向量,即将n降维至l后得到的z,这时候我们将Xi分别投影到每一个Z上面,就得到了每个Z和每个X在每一个方向上的投影,一个n维的点可以通过降维用l维的a系数来代替,这就是Encoder。想要从l维回到n维,就通过作和的方式,因为a其实是x在每一个z上的投影,我们将这个投影重新加起来即可,但是需要注意 ,我们经过了降维,再升维的时候肯定会有数据上的损失,除非此时的z = l,做完全基底置换过程,不会有任何的损失,只要l小于n的就不会产生数据的损失,只是经过筛选后的数据损失量会比较小。
在这里插入图片描述

1.5 PCA/Eigenfaces在识别上的应用

如上图的两类数据点,我们在做降维时,在不同方向上的一维系数降维特征则更加突出。
在这里插入图片描述
降维除了可以做图片的降维压缩,还能做聚类,使用ai作为zi进行人脸识别的聚类(Eigenfaces)输入图片,压缩成低维的系数ai,再进行聚类。
所以在神经网络和深度学习之前就已经有过图片和人脸识别了,这些方法的数据量输入小,不会出现神经网络过拟合的问题。


总结

提示:今天学习的PCA,是除了深度学习之外,另一种做图像信息识别的传统方法,在理论推演过程中涉及到线性代数和对称矩阵变换等数学方法,需要我们对谱定理,瑞利熵定理和奇异值分解知识有一定基础,还需要了解数据点在不同维度聚类的情况,降维在不同向量上的特征表现。

关于以上定理的具体推演过程就不再详细论述,下面是一些相关参考资料:
CSND
知乎文章
B站视频

我们还需要了解的是,早在AI和深度学习之前,利用以上的数学推演,就可以进行图像和人脸信息的识别了。可能只需要三五十个图片,就可以进行PCA并得到一个相对比较好的结果。而使用神经网络这些输入量是远远满足不了算法训练需求的。

PCA(Principal Component Analysis)主成分分析是一种常用的数据降维方法,可以将高维数据投影到低维空间中。在点云处理中,PCA可以应用于点云的降维投影,将原始的高维点云数据投影到一个低维空间中,并且保留原始点云数据中的主要特征。 下面是使用PCL库进行点云PCA降维投影的一些步骤: 1. 读取点云数据 使用PCL库提供的PointCloud接口读取点云数据。 ```cpp pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::io::loadPCDFile("pointcloud.pcd", *cloud); ``` 2. 计算点云的协方差矩阵 使用PCL库提供的计算协方差矩阵的函数,计算点云的协方差矩阵,从而得到点云的主成分。 ```cpp pcl::PCA<pcl::PointXYZ> pca; pca.setInputCloud(cloud); Eigen::Matrix3f covariance = pca.getCOVarianceMatrix(); ``` 3. 计算点云主成分 通过计算协方差矩阵的特征值和特征向量,可以得到点云的主成分。 ```cpp Eigen::SelfAdjointEigenSolver<Eigen::Matrix3f> eigen_solver(covariance, Eigen::ComputeEigenvectors); Eigen::Matrix3f eigenvectors = eigen_solver.eigenvectors(); ``` 4. 将点云投影到主成分上 将点云数据投影到主成分上,得到点云在主成分上的投影值。 ```cpp pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_projected(new pcl::PointCloud<pcl::PointXYZ>); pca.project(*cloud, *cloud_projected); ``` 5. 保存点云投影数据 最后,将点云在主成分上的投影数据保存到文件中。 ```cpp pcl::io::savePCDFile("pointcloud_projected.pcd", *cloud_projected); ``` 以上就是使用PCL库进行点云PCA降维投影的主要步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值