三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第1张图片

一、前言

《三维点云处理》学习笔记系列文章是我在学习深蓝学院的这门课时做的笔记,其中很多截图都来自于老师的ppt。主要目的是记录和备忘,以及分享和交流。

code:https://github.com/QinZiwen/analyze_pointcloud


二、什么是三维点云

2.1 定义

三维点云(point cloud)就是很多点的统称(^_^),当然这里点可以是普通意义上的点,即三维向量,表示点在三维坐标系中的位置;也可以是广义上的点,可能是一个N纬的向量,其中包含点的三维位置,颜色,语义信息等等,笼统的可以认为是三维位置加其他属性。这些其他属性有的可以从传感器中直接获取,有的则需要点云数据分析后得到。为了简单起见,我们从最简单的三维点云开始(后面简称点云),即每个点由他的三维位置表示。那么很多点就可以用3 * N矩阵表示,或者N * 3的矩阵表示,如下图左边所示,右边就是广义的情况。

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第2张图片

2.2 点云的来源

点云的来源有很多:激光雷达,深度摄像头,CAD模型,SLAM/SFM

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第3张图片

2.3 点云的应用

在机器人和自动驾驶领域:定位(包括3DoF,6DoF的定位),场景描述等

在消费电子领域:Face ID,hololens的hand pose, human pose等

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第4张图片

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第5张图片

2.4 点云的优缺点

点云可以看做是空间的一种表达,除此之外,空间还可以使用mesh,voxel grid,octree表示。

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第6张图片

点云相比于其他表达而言,优点是简单,不仅理解起来简单,而且数学表示上也非常简单。缺点也很明显,具有稀疏性,平移和旋转不变性,无序性等。


三、PCA(Principle Component Analysis)

PCA在点云预处理,平面检测,法向量求解等中都有应用,我之前还有见过用PCA对点云中的点分类,地面点,墙面点,物体上的点等,然后再做其他处理。所以我们就从PCA的推导开始,在开始之前,我们先介绍两个定理,会在PCA的证明中用到。

第一个是谱定理,大致意思是对于一个对称矩阵,我们可以用他的特征值特征向量的线性组合表示,严格说明如下:

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第7张图片

第二个是瑞利熵(瑞利熵和广义瑞利熵_人工智能_wyl1813240346的博客-CSDN博客)

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第8张图片

下面介绍PCA,他的输入输出是:

9da7f8e572e66e7d6a475d5e4a69c589.png

和线性代数中一样,我们默认是列向量。

PCA叫主成分分析,那么什么是主成分(或主方向)?数据在该方向上的方差最大。从主方向的定义上就可以看出PCA和方差有千丝万缕的联系,在下面的证明过程中,我们可以留意一下。

首先,对输入数据去均值:

839e06b13e00fd4eeec46d83a838a6f9.png

屏蔽向量中的具体数字对计算的影响,去除均值之后,留下可以理解为数据的分布特征,只不过他依然蕴含在所有的向量中。

PCA希望寻找一个方向(主方向),使得数据在该方向上的方差最大,我们假设一个主方向

,然后投影到该方向上,即内积:

9ce099b161e9bb7d26908fce3990647f.png

由于数据已经减去了均值,那么根据方差的定义,平方求和就是方差了:

a6705248a70e1b02d3722b7141ebdf73.png

我们的目标是方差最大,所以:

0bd568734b4e2daf472875a7c77bce7d.png

注意:这个式子求解的变量是

在这里,

是对称阵,还记得瑞利熵吗?

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第9张图片

他告诉了我们对称阵两边乘上向量后的上下界,由于

是单位向量,上式和我们的目标函数一毛一样。即,当
的最大特征值对应的特征向量时,我们的目标函数取到最大值。

怎么得到特征值特征向量呢?当然是SVD喽(SVD(奇异值分解)小结 - EndlessCoding - 博客园),对

进行SVD分解:

a5a8001bb0e69824243dd5f479f6d0ed.png

那么:

如果特征值由大到小排列,那么

的第一列就是最大特征值对应的特征向量。至此,我们找到了一个主方向,数据在这个方向上投影后,方差最大。那么我们想知道投影后方差次大的方向(
),该怎么求解?

大致思路是:从原数据中减掉原数据在主防线上的投影向量后,在按照上面方法求特征向量。

43abde0233ab35fead1304d4a420f145.png

在这里

,即最大特征值对应的特征向量。
表示
在主方向上的投影长度,然后在左乘
表示
投影到主方向上的向量,我们将这个向量从
中减掉,得到

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第10张图片

上式相当于得到了

的SVD分解,即,我们从原数据上减掉了主方向上的分量,那么,新的得到的数据的SVD分解中刚好是之前SVD分解不包含最大特征值和特征向量的样子。

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第11张图片

当我们再去求方差最大时对应的向量时,可以发现,正式原始数据的第二大特征向量,至此我们得到了

。以此类推,我们可求
等等。

总结一下PCA算法:

1)去中心:

6619c4dc375a275a26b749898f04b123.png

2)求协方差矩阵:

3)对

进行SVD分解,并且特征向量按照由大小排列。

a16eb9376b09e9a320a80748b49e1407.png

4)主要方向就是

中的列向量。

四、PCA的应用之一

54ca7c181dbdf7c778f7d3837d5f9e8f.png

注意:

将原始数据进行压缩(降维):

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第12张图片

解压(升维),就是等式两边同时乘上特征向量组成举证的转置(因为是正交阵,所以逆和转置相等):

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第13张图片

五、核PCA(Kernel PCA)

5.1 核PCA推导

传统PCA本质上是线性的,我们可以回想不管是PCA推到过程还是PCA的应用例子,其中基本应用的都是矩阵乘法,矩阵乘法本质上是一只中线性变换。

如下图所示,绿色和红色各表示一类数据,我们想找到一个主方向,将数据投影后,可以用直线将两类点分开。但是在二维空间上我们很难找到这一个主方向。

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第14张图片

假设上图中的数据为:

c99242618c31a61b96393f8f659c0673.png

我们设计一个函数:

572ea5e87f610a428d01cff52a8f7d37.png

可以将原来二维数据升到三维数据,如下图所示,当然这个函数,你可以设计成各种各样:

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第15张图片

此时,我们发现绿色和红色点线性可分了。

我们套用前面介绍的PCA算法:

1)使用

函数将原始数据升维,并且假设均值为零,即:

75e1d4a121da99270a19e3a2eeb2a255.png

2)计算协方差矩阵:

e9489a38897e9d9de67f1bc8abe085cf.png

3)求

的特征值特征向量。

不知道你有没有注意到,

会是一个高纬矩阵,有时候维度可能非常高,比如将一帧1280*720的图像向量化后,再使用
升维,可想而知,维度会非常高,处理起来比较麻烦。

下面我们来推到核PCA,看看他是怎么解决这个问题。

根据特征值特征向量的定义:

2936712298edf930c9a30be83a47a47f.png

其中:

是特征向量,
是特征值。

带入到上述定义中:

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第16张图片

发现等式左边除了

是向量外,其他都是标量,那我们就可以把他们合并到一起:

27718addd13c703314829e897113d609.png

这个式子在说,特征向量是输入数据的线性组合。其实这个也可以直观理解,原来的PCA也就是把数据旋转平移缩放后,找到了一些主方向。

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第17张图片

在这里我们定义一个核函数

94373b8c3649583783a5d459e066a20a.png

带入上式

fe5162da22eb461bd3d4f2bef8c6b87e.png

等式两边同乘

8b0d9aa9eb6e91efa206321673978456.png

定义一个gram矩阵(Gram矩阵_人工智能_wangyang20170901的博客-CSDN博客):

881322e8129ffa6f004566359309a8ce.png

整理上式,得:

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第18张图片

a6552312826cc77802a33219198685be.png

我们稍微回头看一下,上面这一堆做了什么工作。因为

可以表示成输入数据的线性组合,这里求得的
正是组合系数。

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第19张图片

好事往往多磨,组合后我们还得保证

是单位向量,很简单,我们就单位化一下呗。

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第20张图片

替换掉等式右边的
,得:

也就说为了单位化

,我们需要

fb245c942f4b64b6f4d645950c6b5109.png

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第21张图片

为什么说上式,依然没有办法求解,因为

函数我们还没有定义。但是怎么定义呢?不知道呀,这是个玄学问题,看看数学家是怎么解决的。

我们想一下,这里求主方向的目的是什么?其中一个很重要的原因是为了把数据投影到主方向上。那我们就先把数据投影到

,然后看看会发生什么:

4a1a302bc037ef130ae69206e49820c1.png

哎,核函数又出现,也就说说如果我们可以求出这个核函数,那么问题就得解了,因为不用管

的定义,我就可以计算出投影后的向量了。那么怎么求这个核函数的值呢?当然是按照他的定义展开了,但是:

2f183cf674ec56f6b80e433084651e8f.png

那就去中心化喽:

160f212222ea5dd6de480d248bfb19ac.png

接着:

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第22张图片

对于所有数据我们可以写一个核矩阵:

4502ff879d174ffa54297818c2d15a47.png

所有的矛头都指向了核函数,下面介绍几种常用的核函数。

5.2 核函数

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第23张图片

5.3 核PCA算法

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第24张图片

5.4 核PCA的例子

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第25张图片

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第26张图片

5.5 核PCA的讨论

1)核函数是得我们避免显式计算高纬向量。

2)核PCA是得我们突破了输入数据空间的限制。


六、PCA在点云中的应用

6.1 平面法向量估计

思想:找一堆点最小特征值对应的特征向量。

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第27张图片

6.2 平面发向量算法

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第28张图片

6.3 如何处理噪声

三维叉乘怎么算_《三维点云处理》学习笔记(1):平面法向量估计_第29张图片

参考:

[1] 常用数学符号的 LaTeX 表示方法: http://www.mohu.org/info/symbols/symbols.htm

你可能感兴趣的:(三维叉乘怎么算,点云的无序性)