文章目录
PCA & Kernel PCA
Kernel PCA可以理解为,先通过非线性变换,将点云投影到高维空间中,然后在高维空间中做PCA。但这个非线性变换函数很难找,所以通过数学变换,改写,用核方法表示。使用常用的,多项式的核,高斯的核就可以实现Kernel PCA。
Suface Normal & Filters
Surface Normal就是PCA中中最后一维的向量,将点云做PCA,最后一个主成分就是法向量的方向,curvature也与PCA中最小的特征值有关。
降采样的方法:
grid sampling:pcl库中使用排序的方法,时间时间复杂度是O(NlogN),如果使用哈希表,其实感觉就像是桶排序,可以做到O(N)
FPS
Normal Space Sampling:在曲率大的地方多采样
DeepLearning:《learning to sample》,语义上进行降采样
Nearset NeighborProblem
KD-Tree
KD-Tree:k-dimensional tree,高维度的二叉树,每个维度切一刀
切法:
1)轮流切,xyzxyz
2)adaptive,按照点的分布切
两种速度差别并不是很大,结果是一样的。
构建速度,最快O(nlogn),使用O(n)的求中值的方法,但很复杂。有以下两个trick:
1)找中值时,不用某个区域的全部点,而是只用一部分
2)用平均值代替中值
这两个trick生成的树不是平衡树,但用起来还算可以
Octree
专门为三维数据设计的,在最近点搜索中比较高效的原因是,可以提前终止搜索。使用KD-Tree,无论如何都会返回到root。
构建八叉树的时候,要确定leaf_size和最小边长。
聚类
k-means
Tricks:
- 选择数据中的点作为初始化点,而不是随机选点
- 由于K-menas选点的初始值有关,所以跑几次K-menas,选择惩罚函数最小的一次作为结果
- Mini-Batch K-means
- Sequential K-means
欧氏距离不能用,就不能用K-menas,因为其要求平均值
加强版:为了增加对噪声的鲁棒性
k-medoids
不要求距离函数可导
GMM
K-means只给出中心点,不给出每个点的prob,还是比较粗糙的。使用GMM,每个类用一个高斯模型来拟合。
求解GMM时,也是用EM迭代优化得到GMM的参数
K-means只是GMM的一个特例:GMM中每个高斯模型的方差都趋于0
K-means的优劣:
优点:简单,快速
缺点:1)认为类别是各向同性的,2)需要预先确定K,3)易受初始化影响,4)对噪声铭感
EM
EM不是特定于针对GMM的算法,而是针对求最大似然估计的方法,最大似然估计是要求
m a x p ( θ ∣ X ) max p(\theta|X)