1.介绍

2.PCA&KPCA

(1)PCA
主成分分析

SVD;

矩阵分解M:
U和V*都是正交矩阵,这里相当于旋转
Σ这里是缩放,一个对角阵,对角线储存了M的特征值.

A是对称矩阵有这么个性质,跟上面SVD很相似,不过左右是同一个U

跟上面的SVD联系起来看,这定理实际讲的是A可以拉长或者缩短这个向量多少倍(取决于Σ,因为旋转不改变大小)

公式Rayleigh quotients证明:

PCA是啥:
投影到一个方向(z1,…zk为k个最大方差方向)上方差最大

两个向量的内积就是投影

第三行可以想到Rayleigh Quotients:

上面U1就是Ur的第一列,也就是z1,上面分解H为何是Σ平方,因为X可以进一步SVD分解:

把X写成SVD的形式
除掉z1的那部分继续重复以上步骤,算出z2

发现这个矩阵的U的第一列就是原来的矩阵的Ur的第二列。
总结:

PCA降维:n–>l


例子:

上面第一列是平均值
第二列是用一个主向量z1重构
最后一列用六个主向量重构,可以看到非常接近了。
对ai做聚类可以做数字的识别。

(2)kernel PCA
在数据不是线性的情况下怎么办?

想象一下把下图拉成一个圆锥,三维空间里可以轻易分开

如图,定义一个函数,把xi提升一个维度,这里显然是用前两个的平方和,也就是点到(0,0)的距离,这个其实非常符合直觉,可以看到图一绿点是个近似的圆圈包围着一坨红点,我们现在无法线性地区分它们,那就只能找数据的”特征“作为第三维来进一步区分,由于那一坨红点到原点的距离是近似的,方差小,绿店到原点的距离是方差很大,变化很大的,也就是两者在“到原点的维度”这一特征上区分度很大,我们可以选取它位第三维。
这里的函数实际上是一个用于生维的函数(我们并不关心它)
接下来的工作就跟线性PCA是类似的:

到这问题是否解决了?
并没有,第一,如何定义升维函数,第二,如何避免高维运算(升维之后浪费了计算资源)
由于线性PCA实际上是执行了“换底操作”,也就是把原来很多的基底(或者说坐标)换成了更少的更有代表性的基底,所以以下从直觉上很容易理解,不管你如何操作你都是在同一个线性空间里面,所以基底总是可以表示为点的线性组合

很容易看到上一式1/N是数字,后面的Scalar是两个向量内积也是数字,λ也是数,所以容易得出z是各个坐标的线性组合。
所以我们的找特征向量的问题可以转化为找一系列系数apha的问题

我们把z基底转化为apha个坐标线性组合又代入这个式子,
这时候我们定义一个高维空间的内积为一个核函数

由于我们并不知道升维函数长什么样子,所以想办法把它弄掉,
所以两边同乘以一个升维函数,凑出核函数的形式。
这时候我们定义一个K矩阵:

最终,我们求特征向量z的问题转化为Kα=λα的问题。z是单位向量,
此时得到的alpha的线性组合不一定是单位向量,所以我们由z的模长为一又代入之前的alpha形式,

一顿操作代入,我们将alpha搞成1/λ的长度就可以了,
但是最后一行仍然有升维函数这个鸟
但是,噔噔等等

我们发现即使不知道这个鸟,在投影到高维空间的时候升维函数只会以核函数的方式出现。
为了让升维函数的zero-mean
做normalization

我们把所有的责任都推到核函数上面去,现在看看核函数都有哪些吧

当选择第一个,就退化为线性PCA(仔细思考下)
步骤总结:

例子:


是不是一个投影到高维空间然后找主成分的过程?
可以看到投影到第一个主成分其实就已经可以分开这几组数据了。

总结:
核函数的作用就是隐含着一个从低维空间到高维空间的映射
它的本质其实是一种trick;
以下应用自知乎:
链接:https://www.zhihu.com/question/24627666/answer/28460490

我们如果想进行原本就线性不可分的数据集进行分割,那么选项一是容忍错误分类,即引入Soft Margin;选项二是我们可以对Input Space做Feature Expansion,把数据集映射到高维中去,形成了Feature Space。我们几乎可以认为(引用Caltech的课堂用语“We are safe but not certain”)原本在低维中线性不可分的数据集在足够高的维度中存在线性可分的超平面。围绕选项二,那么我们所做的就是要在Feature Space套用原本在线性可分情况下的Input Space中使用过的优化方法,来找到那个Maximaizing Margin的超平面。原理机制一模一样,是二次规划,唯一不同是代入数据的不同,我们需要代入而不是。这时(在假设我们已知了如何选取mapping之后)才有了核函数的概念。具体Trick的意义,就是简化计算二次规划中间的一步内积计算。也即中间步骤有一步必须求得,而我们可以定义核函数,使得我们在不需要显式计算每一个、甚至不需要知道长什么样的情况下,直接求出的值来。也就是说,核函数、内积、相似度这三个词是等价的。因为inner product其实就是一种similarity的度量。核函数和映射是无关的。但为什么这么多的认知中核函数是一种映射呢。一来这两件事一般先后进行,所以常常被混为一谈。二来就像前面所述,核函数让人们不需要知道升维函数长什么样,不需要知道怎么选取映射,就能够算出内积。因此这常常被认作是一种implicit mapping。这是由Mercer Theorem保证的,即只要核函数满足一定条件,那么映射空间一定存在。

整个story可以这么说:那些搞svm,ridge regression的人,发现自己的算法对数据集的效果不好,他们认为这可能是因为数据集线性不可分。另外他们发现他们搞出的式子里,出现的都是两个数据点的内积。他们想,我们要是把原始数据集映射到高维可能就线性可分啦,但是这可是内积啊,而且怎么找映射函数呢?这时候Mercer Theorem出现了,简直就是黑暗中的一缕阳光啊!好的,那就构造一个kernel function吧,根据Mercer Theorem,那些原始维度的内积转换到高维内积只需要把数据点带进核函数就ok啦。这不就简单了?结果在数据集上居然很好!!!然后这种方法就有很多时髦名称了。大家都follow。。

Surface Normal and Filters

法向量


法向量,从直觉上来说是投影过去最没用的一个向量,因为从直觉上来说,法向量方向这个平面肯定是不变化(不是严格的平面的话就是不怎么变化),所以我们对这个点的领域点做PCA,选取最末的特征向量就是法向量。于此同时得到曲率

证明:
比较直觉,就是让这些点投影最小,最小的n就是法向量

固定n,先看c(中心点),因为不关心点哪个位置怎么平移,得到c应该是中心点。

这样一来熟悉的形式又出现了,不过不同于PCA是找最大,这里找的是最小的那个特征向量。

选取点的邻域一般是有噪声的,如何面对?

看看第二种,对于点的选择进行加权

深度学习两个法向量估计例子:

滤波

首先是离群点去除,基于半径的很好理解,半径内有大于阈值个点就保留,否则去掉。

然后是下面是statistical removal,PCL中也有实现,相当于radius的进阶版,下面n应该是m。这个判断随着每个点的不同而不同。


降采样的过程如下:
关于点的选择的问题两种策略:

总结步骤:

需要注意的是第三第四步,第三步是分别算出xyz方向分别有多少个格子(分辨力是r),第四步是算出每个点分别在哪个方向的第几个格子,然后h是定义的一个index,index相同说明在同一个格子。
可能遇到的问题:
1.32位溢出


由于排序运行复杂,所以可以用到哈希表映射,比如我们把10000个点映射到100个容器里面


这个方法不完美,会遇到冲突问题(不同的小格子映射到一个容器,就是hx hy hz三个坐标不一样)

如何处理冲突:
当出现冲突的时候,把原来的点选一个出来,清空容器

对于非常稠密的点我们还可以用FPS的方法降采样:第一次选一个点,第二次选离这个点最远的点,第三次选离上两次点最远的点。。。

考虑点云法向量的降采样-NSS,常用于ICP

用深度学习的办法来降采样(这个论文要看,代码也要跑一下),用采样之后的结果然后又用分类网络来回归,看看A采样之后的结果是否还能识别出来是A


这里的chamfer loss要记住,第一个是采样之后的点要尽可能接近原来的点,就是每个采样点的附近有一个原来的点,(4)是原来的每个点附近要有一个采样点。

跟其他采样方式的对比,S-NET更大的还原了原本的形态

用于三维重建的效果对比:

双边滤波:(既可以上采样也可以降采样)
高斯滤波:一个点用周围的点高斯函数加权平均来近似,越近权重愈大,可以看到当范围越来越大的时候图形越模糊,因为一个点开始考虑了离他很远的点就模糊了细节。有没有保留细节的平滑呢?


接下来就是双边滤波,考虑了颜色信息,把颜色也作为权重的考量,两个高斯核。


用于点云上采样

三维点云处理-chap1相关推荐

  1. CVPR2020:三维点云无监督表示学习的全局局部双向推理

    CVPR2020:三维点云无监督表示学习的全局局部双向推理 Global-Local Bidirectional Reasoning for Unsupervised Representation L ...

  2. CVPR2020:端到端学习三维点云的局部多视图描述符

    CVPR2020:端到端学习三维点云的局部多视图描述符 End-to-End Learning Local Multi-View Descriptors for 3D Point Clouds 论文地 ...

  3. CVPR2020:训练多视图三维点云配准

    CVPR2020:训练多视图三维点云配准 Learning Multiview 3D Point Cloud Registration 源代码和预训练模型:https://github.com/zgo ...

  4. Geo-CNN的三维点云

    Geo-CNN的三维点云 Modeling Local Geometric Structure of 3D Point Clouds using Geo-CNN 摘要 深度卷积神经网络(CNNs)的最 ...

  5. 三维点云去噪无监督学习:ICCV2019论文分析

    三维点云去噪无监督学习:ICCV2019论文分析 Total Denoising: Unsupervised Learning of 3D Point Cloud Cleaning 论文链接: htt ...

  6. 基于三维点云数据的主成分分析方法(PCA)的python实现

    主成分分析(PCA)获取三维点云的坐标轴方向和点云法向量 # 实现PCA分析和法向量计算,并加载数据集中的文件进行验证import open3d as o3d # import os import n ...

  7. 深蓝学院的三维点云课程:第一章

    一.前言 为什么现在点云应用这么广泛,就是因为他有深度信息. 像人脸识别用来解锁手机,比如Iphnoe手机在前边有一个深度摄像头,所以它产生的点云真的是一个三维点云:然后很多手机他可能就没有深度摄像头 ...

  8. 将三维点云投影到XOZ面上

                                       如图左边是原始的三维点云pcd格式,右边是投影到XOZ面上的数据,Y为0. #include <iostream> # ...

  9. 快速精确的体素GICP三维点云配准算法

    标题:Voxelized GICP for Fast and Accurate 3D Point Cloud Registration 作者:Kenji Koide, Masashi Yokozuka ...

最新文章

  1. [Quiz]竞赛题目 Word Trace
  2. poj(百练) 2743解题报告
  3. 使用目录服务和 Visual C# .NET 向本地系统添加用户
  4. ASP.NET Core 中的 User Agent 识别及搜索引擎爬虫鉴定方法
  5. srsLTE源码学习:RRC:(Radio Resource Control):无线资源控制协议
  6. 服务器常用的状态码及其对应的含义如下
  7. sccm2012 客户端推送安装故障解决一例
  8. XMLHttpRequest的方法
  9. Java程序员面试宝典--面向对象的基本概念
  10. [转]PKM-个人知识体系建设
  11. 佳能最新版DPP免CD安装
  12. openxml 给word添加table,复制样式和字体
  13. 采用邻接表表示法创建无向图
  14. 华硕笔记本返厂维修流程_笔记本不能更换显卡为何又叫独立显卡?
  15. 中小企业怎么创作一个具备品牌故事的软文营销方案
  16. Unity制作九宫格手机手势解锁密码
  17. 习题11-8 单链表结点删除
  18. SSRNet:用于大规模点云表面重建的深度学习网络(CVPR2020)
  19. 时空图卷积网络ST-GCN论文完全解读记录
  20. Android Telephony分析(一) ---- Phone详解

热门文章

  1. 安索夫矩阵分析市场和产品策略
  2. 搜狗老域名作用之快速大量搜狗收录
  3. iPhone/iPad 屏幕旋屏
  4. Dp-状态压缩:玉米田
  5. LPC1768以太网控制器
  6. 数据库的锁机制理解和运用
  7. java中继承的介绍
  8. vue+element-ui实现表格编辑
  9. Macbook Pro(MBP)上固态硬盘SSD,光驱位装HDD
  10. 表、视图、存储过程、函数、触发器、事件