二. 点云主成分分析之奇异值分解与特征值分解

发布时间 2023-11-03 17:32:26作者: cosmosociologist

1. 前言

我上篇文章的最后提到了通过SVD求解ICP得到的奇异值左正交矩阵的的坐标系和PCA非常相似,这篇文章我们来看一下两者的相似处,并从数学上给出解释。

读者可以看下上篇文章的结尾的图,图1展示了两组存在一一对应关系的点,点集B是点集A经某个欧式变换得到的。

[奇异值分解在3D视觉中的应用 - 知乎](https://zhuanlan.zhihu.com/p/664771416)

​![image](https://assets.b3logfile.com/siyuan/1649125390244/assets/image-20231103115406-2shi3en.png "图 1. 点集A和点集B及各自正交基")​

# 2. 主成分分析

主成分分析(Principal Component Analysis, PCA),是一种使用很广泛的数据降维算法。PCA的主要思想是从N维的数据中找出最具有代表性的 K (K < N)个维度,用这K个维度代表数据整体。

PCA的目的是找到一组新的正交基,使得原始数据在这组基上的投影能够尽可能地保留数据的变化信息。 特征值和特征向量是PCA的核心概念,它们有以下作用:

* **特征值**表示原始数据在对应特征向量方向上的方差,也就是数据在该方向上的变化程度。 特征值越大,说明数据在该方向上的变化越大,也就越能反映数据的特征。 因此,PCA通常选择最大的几个特征值对应的特征向量作为新的正交基。
* **特征向量**表示原始数据在新的正交基上的投影方向,也就是数据降维后的坐标轴。 特征向量之间互相正交,说明新的正交基能够消除数据之间的相关性,简化数据的结构。 因此,PCA可以用特征向量将高维数据转换为低维数据,同时保留尽可能多的信息。

本文就不对主成分分析进行详细介绍了,读者可以看下面这篇文章,讲解得比较细致 [主成分分析(PCA)原理详解 - 知乎](https://zhuanlan.zhihu.com/p/37777074)

## 2.1 特征值分解 OR 奇异值分解?

PCA的几个主成分的分解可以使用特征值分解,也可以使用奇异值分解得到。点云处理常用的PCL中使用的是特征值分解,特征值分解比较常见,下面我们对比一下两者的效果。

我们将特征向量组成的正交系和奇异值分解求解ICP得到的坐标系画在一起,如下图所示。可以发现左奇异值矩阵构成的正交系和特征向量组成的正交系是对齐的(方向可能不一样,和轴的选择有关)。

注意特征向量组成的坐标系可能不是右手系,可以令Z轴=X轴和Y轴的叉积 改成右手系。

​![image](https://assets.b3logfile.com/siyuan/1649125390244/assets/image-20231103111505-n0j6ohu.png "图 2. 图中粗的轴是特征值分解得到的特征向量组成的正交系,细的轴是奇异值分解得到的正交系")​

我们下面从数学上来推导一下为什么两者给出了几乎一致的坐标系。

令数据矩阵$Q_A = [q_1, \dots, q_n],Q_B=[q_1', \dots, q_n']$分别表示点集A和点集B中的点去质心后的坐标。

## 2.2 特征值分解

我们对点集A进行主成分分析,对散度矩阵进行特征值分解

$$
Q_AQ_A^T=\sum_{i=1}^n q_i q_i^T = U\Lambda U^{-1}
$$

式中,U是$Q_A$的特征向量组成的矩阵。

$Q_A$是个对称矩阵,对于对称矩阵的特征值分解,得到的特征值向量组成的矩阵是正交矩阵,满足$UU^T=I$​

$$
Q_AQ_A^T=U \Lambda U^{-1} = U \Lambda U^T
$$

## 2.3 SVD求解ICP

我们回顾一下奇异值分解求解ICP的式子

$$
H=\sum q_i' q_i^T = U \Sigma V^T
$$

这里矩阵H可以用$Q_A$和$Q_B$表示, $H =\sum q_i' q_i^T = Q_AQ_B^T$,而去质心后的B点集的点$Q_B$其实是由去质心后的A点集的点$Q_A$旋转而来,即$Q_B=RQ_A=VU^T Q_A$,H可以写为

$$
H = Q_AQ_B^T=Q_A(VU^TQ_A)=Q_A Q_A^T U V^T = U \Sigma V^T
$$

上式两边同时乘以 $VU^T$得到 $Q_AQ_A^T = U \Sigma U^T$,得到了与奇异值分相同的结果(我这里故意用了相同的符号U就是表示这俩矩阵相同)。

对于一个对称方阵(比如本文用到的散度矩阵)进行特征值分解和奇异值分解结果是一样的,而且PCA 就是通过一个矩阵乘以自身转置构建一个对称方阵,所以对于PCA来说特征值分解和奇异值分解没什么区别。

不过奇异值分解相比特征值分解有一些更好用的性质,比如对于非方阵也可以进行奇异值分解,而只有方阵才能进行特征值分解;再者,奇异值分解后的奇异值是按照降序排列的正值,可以很方便的找到最大奇异值对应的向量。

# 3. PCA在点云中的应用

下面说说PCA在点云处理中的几个应用

## 3.1 反投影

对点云乘以*U*的逆矩阵,$Q_A^{deproject}=Q_A U^T$,就实现了将PCA的三个轴和笛卡尔空间的XYZ轴对齐。下图中蓝色点云就是红色点云反投影后将质心移动到原点的点云。

​![image](https://assets.b3logfile.com/siyuan/1649125390244/assets/image-20231103114005-an27s3w.png "图 3. 点集A和反投影后的点集A_deproject")

分布寻找反投影的点云在XYZ三个方向的最大值,就可以画出点云的Bounding box,再将bounding box投影回原来的点云就得到了点云的 Axis aligned bounding box (AABB),可以实现下面图([图片来源](https://www.researchgate.net/figure/a-A-complete-point-cloud-of-a-dog-model-b-bounding-box-c-two-child-boxes-resulted-from_fig3_356401567))中这样的包围盒。

​![image](https://assets.b3logfile.com/siyuan/1649125390244/assets/image-20231103114801-2k313kq.png)

## 3.2 降维与法向量

PCA还可以用来计算点云的法向量

对于一个点周围很小邻域内的点云进行主成分分析,以最大的两个特征值(或奇异值)对应的特征向量构成的平面为该邻域内的点拟合的平面,第三正交轴则为该点的法向。因为特征值越大则该方向越离散,特征值越小该方向越集中,所以我们认为特征值最小的维度为平面的法向。

​![image](https://assets.b3logfile.com/siyuan/1649125390244/assets/image-20231103170744-0o610se.png)​