其实不想记录这一块内容,因为实在没啥新意,但又怕时间久了就忘记了。不贴代码,网上一堆。
参考:https://www.cnblogs.com/li-yao7758258/p/6489585.html 主要是不想打字。
配准的实质就是把不同的坐标系中测得到的数据点云进行坐标系的变换,以得到整体的数据模型,问题的关键是如何让得到坐标变换的参数R(旋转矩阵)和T(平移向量),使得两视角下测得的三维数据经坐标变换后的距离最小,,目前配准算法按照过程可以分为整体配准和局部配准。PCL中有单独的配准模块,实现了配准相关的基础数据结构,和经典的配准算法如ICP。
PCL中实现配准算法以及相关的概念
两两配准的简介:一对点云数据集的配准问题是两两配准(pairwise registration 或 pair-wise registration).通常通过应用一个估计得到的表示平移和旋转的4*4刚体变换矩阵来使得一个点云的数据集精确的与另一个点云数据集(目标数据集)进行完美的配准
具体的实现步骤:
(1)首先从两个数据集中按照同样的关键点选取的标准,提取关键点
(2)对选择所有的关键点分别计算其特征描述子
对于(1)(2)步骤,不一定非要选择特征点,也有 直接采用原始点云数据的。具体依赖配准算法。
(3)结合特征描述子在两个数据集中的坐标位置,以两者之间的特征和位置的相似度为基础,来估算它们的对应关系,初步的估计对应点对。
(4)假设数据是有噪声,出去对配准有影响的错误的对应点对
(5)利用剩余的正确的对应关系来估算刚体变换,完整配准。
对应估计(correspondences estimation):假设我们已经得到扫描的点云数据获得的两组特征向量,在此基础基础上,我们必须找到,相似特征再确定数据的重叠部分,然后才能进行配准,根据特征的类型PCL使用不同的方法来搜索特征之间的对应关系
使用点匹配时,使用点的XYZ的坐标作为特征值,针对有序点云和无序点云数据的不同的处理策略:
(1)穷举配准(brute force matching)
(2)kd——数最近邻查询(FLANN)
(3)在有序点云数据的图像空间中查找
(4)在无序点云数据的索引空间中查找
对应关系的去除(correspondence rejection)
由于噪声的影响,通常并不是所有估计的对应关系都是正确的,由于错误的对应关系对于最终的刚体变换矩阵的估算会产生负面的影响,所以必须去除它们,可以采用随机采样一致性估计,或者其他方法剔除错误的对应关系,最终使用对应关系数量只使用一定比例的对应关系,这样既能提高变换矩阵的估计京都也可以提高配准点的速度。
变换矩阵的估算(transormation estimation)
估算对应矩阵的步骤如下
1. 在对应关系的基础上评估一些错误的度量标准
2.在摄像机位姿(运动估算)和最小化错误度量标准下估算一个刚体变换
3.优化点的结构
4.使用刚体变换把源旋转/平移到与目标所在的同一坐标系下,用所有点,点的一个子集或者关键点运算一个内部的ICP循环
5,进行迭代,直到符合收敛性判断标准为止。
迭代最近点算法(Iterative CLosest Point简称ICP算法)
ICP算法对待拼接的2片点云,首先根据一定的准则确立对应点集P与Q,其中对应点对的个数,然后通过最小乘法迭代计算最优的坐标变换,即旋转矩阵R和平移矢量t,使得误差函数最小,ICP处理流程分为四个主要的步骤:
1. 对原始点云数据进行采样
2.确定初始对应点集
3.去除错误对应点对
4.坐标变换的求解
缺点:
A.要剔除不合适的点对(点对距离过大、包含边界点的点对)
B.基于点对的配准,并没有包含局部形状的信息
C.每次迭代都要搜索最近点,计算代价高昂
NDT算法
- 将空间(reference scan)划分成各个格子cell
- 将点云投票到各个格子
-
计算格子的正态分布PDF参数
-
将第二幅scan的每个点按转移矩阵T的变换
-
第二幅scan的点落于reference的哪个 格子,计算响应的概率分布函数
-
求所有点的最优值,目标函数为
PDF可以当做表面的近似表达,协方差矩阵的特征向量和特征值可以表达表面信息(朝向、平整度)
格子内少于3个点,经常会协方差矩阵不存在逆矩阵,所以只计算点数大于5的cell,涉及到下采样方法。
- NDT的优化:
格子参数最重要,太大导致精度不高,太小导致内存过高,并且只有两幅图像相差不大的情况才能匹配
- 固定尺寸
- 八叉树建立,格子有大有小
- 迭代,每次使用更精细的格子
- K聚类,有多少个类就有多少个cell,格子大小不一
- Linked-cell
- 三线插值 平滑相邻的格子cell导致的不连续,提高精度
缺点:插值导致时间是普通的4倍,其实确定不只这点,因为作者假设点云服从多维高斯分布,因此,按道理应该是点数量越大越好,因此,小批量点云配准,这个算法再调也是调不好的额。
优点:可以提高鲁棒性
SAC-IA
基于RNSAC算法,在原始点云中,选择4点,针对每点在目标点云中选择相似特征的1到多个点(多点随机选1),计算刚体变换矩阵,接着计算变换损失(误差),完成一次迭代,持续迭代,直到所有点数的Huber损失最小。