迭代最近点(Iterative Closest Point, ICP)算法及matlab实现 - Go语言中文社区

迭代最近点(Iterative Closest Point, ICP)算法及matlab实现


前言

通常,使用RGB-D相机或是其他方法获取到物体的三维点云后,由于采集设备不同、拍摄视角不同等等因素的影响,即使是同一个物体所得到的点云也会有较大的差异,主要是旋转或者平移的变化。对于一组图像数据集中的两幅图像,需要通过寻找一种空间变换把一幅图像映射到另一幅图像,使得两图中对应于空间同一位置的点一一对应起来,从而达到信息融合的目的。所以,就需要对点云进行配准。
迭代最近点算法(ICP)是一种点云匹配算法。其思想是:通过旋转、平移使得两个点集之间的距离最小。ICP算法由Besl等人于1992年提出,文献可以参考:A Method for Registration of 3D Shapes,另外还可以参考:Least-Squares Fitting of Two 3-D Point Sets。前者使用的是四元数方法来求解旋转矩阵,而后者则是通过对协方差矩阵求解SVD来得到最终的旋转矩阵。流程大体上一致,后面就主要列出前者的流程。

ICP

1、四元数

我们可以使用四元数表示旋转关系: