背景
两个点云要注册在一块,一般分两个步骤:先做一个大致的对齐,也就是所谓的初始注册,一般可以通过一些可靠的点对来计算得到(如图3所示);然后在初始注册的基础上进行精细注册,提升注册的精度(如图4所示)。精细注册的方法,一般采用ICP算法,也就是最近点迭代的方法。
下面先总的介绍一下ICP算法,之后再详细介绍里面的一些重要步骤。
算法输入是两片有部分重叠的点云a和b,并且已经初始注册好了,输出是ICP注册的刚体变换T:
1. 对b进行点采样,得到采样点集s
2. 在a中寻找采样点集s的最近对应点,得到点对集合c
3. 对c中的点云进行加权处理,并删掉一些不好的点对
4. 应用目标能量来优化点对距离,得到刚体变换Ti。Ti对采样点集进行刚体变换
5. 迭代步骤2-4,直到目标能量优化停止。T=Tn * ...... T1 * T0
由于计算速度的要求,一般是需要对点云b进行采样。然后用采样点去找对应进行优化。除了计算上的要求,如果用全点云进行匹配的话,精度也不会更加的好。因为更好的采样方法可以避免陷入能量局部极小的情况。常见的采样方法有均匀采样和几何采样。
一个比较理想的采样方法,既能够采样到点云的几何特征,分布上也能做到局部均匀,然后就是计算速度要快。下面是一个采样示例,左图是原始点云,中间图是均匀采样,右图是几何采样。
从ICP的名字,就能看出点对应怎么去找,也就是给每个采样点找最近点。查找最近点是比较简单的,一般用KD Tree来加速查找。这些点对,有些是无效的,需要剔除掉。常用的剔除策略有距离和法线:
常用的目标能量有两种:点到点的能量和点到平面的能量。直观上讲,点到点的能量如左图所示,优化的是有效点对之间的距离;点到平面的能量,如右图所示,优化的是点到点云局部平面的距离。
这两个能量,各有优缺点:
能量里面只有T的旋转变换是非线性的,可以转化成线性最小二乘求解。常用的两种转化方式:
迭代算法总要有个停止条件。这个看似平凡的步骤,却是所有迭代算法的关键。它能影响算法最终的效果和性能。ICP常见的迭代停止条件:
有兴趣的读者,欢迎参考视频版本
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。