【学习笔记】深蓝学院-三维点云处理

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:

  1. 选择数据中的点作为初始化点,而不是随机选点
  2. 由于K-menas选点的初始值有关,所以跑几次K-menas,选择惩罚函数最小的一次作为结果
  3. Mini-Batch K-means
  4. 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) maxp(θX)。通过在 p ( θ ∣ X ) p(\theta|X) p(θX)引入预测的label,变成 p ( θ , Z ∣ X ) p(\theta, Z|X) p(θ,ZX)。通过最大化
在这里插入图片描述
来求取模型参数 θ \theta θ

由于 P ( θ ∣ X ) P(\theta|X) P(θX)不好求,所以转为求上图中的Q,Q中的第一项就是给了模型估计点的label,很方便,第二项的求法是将 p ( X , Z ∣ X ) = p ( Z ∣ θ ) p ( X ∣ Z , θ ) p(X, Z|X) = p(Z |\theta)p(X |Z,\theta) p(X,ZX)=p(Zθ)p(XZ,θ),其中第一项是label的分布,在GMM中就是每个GM的权重,第二项是数据的先验分布。

Spectral Clustering

谱聚类先构建一个图,计算点与点之间的关系。用每个点与其他点的联系的权重组成的向量作为改点的vector。对所有点的vector进行压缩,然后使用压缩后的特征值进行k-menas。

不归一的谱聚类倾向于每个类中点的数量相似。归一化的谱聚类倾向于每个类中的点的密度相似。

谱聚类可以自适应的选择类别的多少。

缺点:复杂,慢
优点:1)不对类的预先形状做假设,2)对任意维度的数据都可以处理,3)可以自动找出需要聚成多少个类

Mean Shift

不需要预先确定有多少个类
O(Tnlgn)
还是认为类的分布是椭圆的

DBSCAN

同样不需要预先确定有多少类
与Spectral Clustering同为是考虑连接的,不假设类别是椭圆的。

Model Fitting

最小二乘

对噪声敏感

Hough Transformation

只适用于低维空间,否则计算量太大

RANSAC

要预估一个sample次数

Feature Detection

Harris 3D&6D

Harris3D分为使用intensity的和使用距离的两种。

使用intensity的方式,求得的梯度,投影到局部平面更好

Harris6D,把intensity和法向量结合起来

ISS(Intrinsic Shape Signatures)

在邻域内点分布变化很大的地方。就是把邻域内的点拿出来,求协方差矩阵,然后再做特征值分解,找最小的特征值。

传统方法,对噪声不鲁棒

USIP

1)一个物体提取的特征点,在任意角度看仍然是特征点
2)特征点应该是local的
3)特征点应该在点云中

Feature Description

PFH & FPFH

Point Feature Histogram
1)对6DOF的变化保持不变性
2)使用法向量的变化描述一个邻域

输入:
点云及其法向量+特征点

计算特征点邻域中每对点的3个特征,把这三个特征作为一个向量,放到一个voxel中。得到一个BxBxB大小的特征,B是voxel每个分量的grid的山数量

SHOT

1)使用加权的协方差矩阵做特征值分解,得到局部坐标系
2)按照这个局部坐标系把邻域分成一些小块
3)用法向量来计算每个小块中直方图的特征
4)使用插值实现软投票,解决boundary effect

3DMatch & Perfect Match

3DMatch
1)在特征点周围建立局部的voxel,然后放到神经网络里面
2)在不同视角下的相同点,做同样操作,得到positive的feature
3)在不同点得到negative的feature
4)用feature的距离代表相似程度
5)使得negative的feature距离大,positive的feature距离近

局限:
1)对旋转过于敏感
2)loss约束过于强

改进:
1)建立局部坐标系,对于旋转是稳定的,然后在局部坐标系中简历voxel
2)使用 triplet loss,如何找到难度适中的三元组。

Perfect Match
主要就是如上两点改进
1)使用PCA建立局部坐标系
2)使用triplet loss

PPFNet & PPF-FoldNet

PPFNet结合了全局信息和局部信息,考虑了patch对patch的triplet loss
PPF-FoldNet使用了autoencoder

Registration

ICP

correspondence是根据两个点的距离计算。

改进:
在这里插入图片描述

NDT

1)建立voxel,每个grid使用高斯模型来建模。如果一个格子中的点过于少,就丢掉,认为格子是空的。
2)将source中的点,通过RT转到target frame中,然后用1)中建立的概率构建最大似然估计

使用mixture prob来代替高斯分布,使得对外点鲁棒
用高斯分布模拟最大似然中的-log函数
使用牛顿法来求解高斯分布的极值,从而完成优化。可以求出NDT中牛顿法的解析解,所以很快。

猜你喜欢

转载自blog.csdn.net/wqwqqwqw1231/article/details/106196809