给定两个来自不同坐标系的三维数据点集,找到两个点集空间的变换关系,使得两个点集能统一到同一坐标系统中,即配准过程。配准的目标是在全局坐标框架中找到单独获取的视图的相对位置和方向,使得它们之间的相交区域完全重叠。对于从不同视图(views)获取的每一组点云数据,需要一个能够将它们对齐在一起的单一点云模型,从而可以应用后续处理步骤,如分割和对象重构。
这篇博文就基于PCL中的ICP算法,实现不同视图点云数据的配准,并延伸相关知识。
两个(pairwise)点云数据集的配准,即在其中一个数据上进行旋转和平移,使得他们之间的相交区域完全重合。这里输出结果是一个(4x4)刚性(rigid)变换矩阵。
两个数据集的计算步骤:
1. 识别最能代表两个数据集中的场景的兴趣点(interest points)(即关键点 keypoints)
2. 在每个关键点处,计算特征描述符;
3. 从特征描述符集合以及它们在两个数据集中的 x,y,z 位置,基于特征和位置之间的相似性来估计对应关系;
4. 假设数据被认为包含噪声的,并不是所有的对应关系都是有效的,所以舍弃对配准过程产生负面影响的那些负影响对应关系;
5. 从剩下的一组好的对应关系中,估计一个变换行为。
点云中的特征点是一些兴趣点,如目标的转点、角点等具有明显特征(feature)的点或点集。
基于发现的关键点,提取特征组合信息并生成向量来进行比较。
给定两组数据获取相应的特征描述向量,找到相应的特征以在数据中找到重叠的部分。
不是所有的一致性估计都是正确的,错误的一致性将对变换产生负影响,因此需要舍弃。
步骤:
1. 根据一致性评价误差度量(error metric)
2. 估计变换矩阵
3. 优化点结构
ICP算法本质上是基于最小二乘法的最优配准方法。该算法重复进行选择对应关系点对,计算最优刚体变换这一过程,直到满足正确配准的收敛精度要求。ICP是一个广泛使用的配准算法,主要目的就是找到旋转和平移参数,将两个不同坐标系下的点云,以其中一个点云坐标系为全局坐标系,另一个点云经过旋转和平移后两组点云重合部分完全重叠。ICP算法最早由Chen and Medioni,and Besl and McKay提出。
算法的输入:参考点云和目标点云,停止迭代的标准。
算法的输出:旋转和平移矩阵,即转换矩阵。
旋转矩阵是欧式空间中执行旋转变换的矩阵,ICP算法在做点云配准时,变换矩阵包含了平移和旋转,因此,这里有必要研究一下坐标系的平移和旋转过程。三维变换与二维变换相似,采用齐次坐标技术来描述空间的各点坐标及其变换,描述空间三维变换的变换矩阵是4×4的形式。由此,一系列变换可以用单个矩阵来表示。
以坐标系的三个坐标轴 X,Y,Z 分别作为旋转轴,则点实际上只在垂直坐标轴的平面上作二维旋转。此时用二维旋转公式就可以直接推出三维旋转变换矩阵。规定在右手坐标系中,物体旋转的正方向是右手螺旋方向,即从该轴正半轴向原点看是逆时针方向。
两角和差公式:
下面直接给出右手系中绕三轴的基本旋转矩阵,选装角度分别位 θ,α,β :
假设用 Qi,i=1,2,3,⋯ 表示第一个点集, Pi,i=1,2,3,⋯ 表示第二个点集。两个点集的对齐配准转换为使下列目标函数最小。
其中,旋转矩阵 R 和平移矩阵 T ,就是找到的待配准点云数据与参考点云数据之间的旋转参数和平移参数,使得两点集数据之间满足某种度量准则下的最优匹配。
ICP配准过程:
1. 计算 P 中的每一个点在 Q 点集中的对应最近点
2. 求得使上述对应点对平均距离最小的刚体变换,求得平移参数和旋转参数
3. 对 P 使用上一步求得的平移和旋转参数,得到新的变换点集 P′
4. 如果新的变换点集与参考点集满足上面目标函数要求,即两点集的平均距离小于某一给定阈值,则停止迭代计算,否则新的变换点集 P′ 作为新的 P 继续迭代,直到达到目标函数的要求。
提示:这里的目标函数的要求,也可以是迭代次数。
PCL官网手册中ICP例子使用的是monkey模型,这里同样使用monkey点云。下图中,左侧猴子为原始模型,右侧猴子是自己旋转平移后的目标猴子模型。接下来的实验将右侧猴子进行旋转平移和左侧猴子进行匹配。
PCL ICP算法配准中的代码,使用一个输入模型作为原始模型A,通过变换(旋转和平移)原始模型得到一个新的模型B,将B模型使用ICP算法配准到A模型上。下图是PCL中源码未经修改运行出来的结果。
现在对PCL ICP配准源码稍作修改,这时候输入两个点云数据,参数1为原始模型,参数2为转换后的模型,参数3为重复次数。下图实验是再Blender中保存的两个模型。
提示:配准效果和点集初始位置关系很大,博文中实验数据的初始位置都比较合适。
https://github.com/PointCloudLibrary/data
博文中实验的数据(猴子模型)从Blender中制作导出。
参考
http://pointclouds.org/documentation/tutorials/registration_api.php#registration-api
https://en.wikipedia.org/wiki/Iterative_closest_point
http://www.cnblogs.com/sddai/p/6129437.html
Chen, Yang; Gerard Medioni (1991). “Object modelling by registration of multiple range images”. Image Vision Comput. Newton, MA, USA: Butterworth-Heinemann: 145–155. doi:10.1016/0262-8856(92)90066-C
Besl, Paul J.; N.D. McKay (1992). “A Method for Registration of 3-D Shapes”. IEEE Trans. on Pattern Analysis and Machine Intelligence. Los Alamitos, CA, USA: IEEE Computer Society. 14 (2): 239–256. doi:10.1109/34.121791.
https://cn.mathworks.com/matlabcentral/fileexchange/27804-iterative-closest-point?requestedDomain=www.mathworks.com
http://www2.imm.dtu.dk/~jakw/publications/bscthesis.pdf
http://blog.sina.com.cn/s/blog_3fd642cf0101cc8w.html
https://en.wikipedia.org/wiki/Rotation_matrix
http://www.cnblogs.com/yuzhongwusan/p/4121815.html