一、点云配准
点云配准的实质是把不同坐标系中测得的数据点云进行坐标系的变换,以得到整体的数据模型,问题的关键是如何得到坐标变换的旋转矩阵R和平移向量T,使得两视角下测得的三维数据经坐标变换后距离最小。目前的配准算法按照过程可以分为:整体配准和局部配准。
二、两两配准
一对点云数据集的配准问题就是两两配准(pair-wise registration),通过一个估计得到的表示平移和旋转的4*4刚体变换矩阵来使得一个点云的数据集精确地与另一个点云数据集(目标数据集)进行配准。
实现步骤:
1.首先从两个数据集中按照同样的关键点选取的标准,提取关键点(也可以采用原始点云数据,这依赖于配准算法);
2.对所有选择的关键点分别计算其特征描述子;
3.结合特征描述子在两个数据集中的坐标位置,以两者之间的特征和位置的相似度为基础,来估算他们的对应关机,初步估计相应的点对;
4.假设数据存在噪声,除去对配准有影响的错误的对应点对;
5.利用剩余的正确的对应关系来估算刚体变换实现完整配准。
三、对应估计
假设我们已经得到的扫描点云数据获得的两组特征向量,在此基础上,我们必须找到相似特征在确定数据的重叠部分,然后才能进行配准,根据特征的类型,使用不同的方法来搜索特征之间的对应关系:
使用点匹配时,使用点的XYZ坐标作为特征值,针对有序点云和无序点云数据的不同处理策略:
1.穷举配准(brute force matching)
2.kd-tree最近邻查询(FLANN)
3.在有序点云数据的图像空间中查找
4.在无序点云数据的索引空间中查找
四、对应关系的去除
由于噪声的影响,通常并不是所有估计的对应关系都是正确的,由于错误的对应关系对于最终的刚体变换矩阵的估算会产生负面的影响,所以必须去除它们。采用随机采样一致性估计,或者其他方法剔除错误的对应关系,最终使用对应关系数量只使用一定比例的对应关系,这样既能提高变换矩阵的估计精度也可以提高配准点的速度。
五、变换矩阵的估算
估算对应矩阵:
1.在对应关系的基础上评估一些错误的度量标准;
2.在摄像机位姿(运动估算)和最小化错误度量标准下估算一个刚体变换;
3.优化点的结构;
4.使用刚体变换把点云旋转/平移到与目标所在的同一坐标系下,用所有的点、点的一个子集或关键点运算一个内部的ICP循环;
5.进行迭代,直到符合收敛性判断标准为止。
六、迭代最近点算法(Iterative Closest Point,简称为ICP)
ICP对待需要进行拼接的两片点云,首先根据一定的准则确立对应点集P与Q中对应点对的个数,然后通过最小二乘法迭代计算最优的坐标变换矩阵(旋转矩阵R和平移矢量T),使得误差函数最小,ICP处理步骤如下:
1.对原始点云数据进行采样;
2.确定初始对应点集;
3.去除错误对应点对;
4.求解坐标变换。
缺点:
a:需要剔除不合适的点对(点对距离过大、包含边界点的点对)
b:基于点对的配准,并没有包含局部形状的信息
c:每次迭代都要搜索最近点,计算代价高昂
七、NDT算法
1.将空间(reference scan)划分为各个格子cell;
2.将点云投票到各个格子;
3.计算格子的正态分布PDF参数:
PDF参数可以当作表面的近似表达,协方差矩阵的特征向量和特征值可以表达表面信息(朝向,平整度);
格子内少于3个点时,协方差矩阵不存在逆矩阵,所以只计算点数大于5的格子,涉及到下采样方法。
4.将第二幅scan的每个点按转义矩阵T进行变换;
5.第二幅scan的点落于reference的哪个格子,计算响应的概率分布函数:
6.求所有点的最优值,目标函数为:
NDT的优化:
格子参数最重要,格子太大会导致精度不高,太小导致内存过高,并且只有两幅图像相差不大的情况才能匹配。
八、SAC-IA算法
基于RNSAC算法,在原始点云中,选择4点,针对每点在目标点云中选择相似特征的1到多个点(多点随机选1),计算刚体变换矩阵,接着计算变换损失(误差),完成一次迭代,持续迭代,直到所有点数的Huber损失最小。
点云处理学习笔记只是自己看了Eason.wxd博主的文章之后,记录的一些概念性的内容,仅供参考用,后续会根据《PCL从入门到精通》这本书做进一步的学习和实践,会对内容进行补充或者调整,也会更新新的笔记。