ICP(iterative closest
point)最广泛的应用应该就是点云的配准了。它的提出也是为了解决这个问题。
假设我们有两个点云,它们应该是一一配对的(或者说在SLAM中两个场景有较大的overlap),但是我们并不知道点的配对关系。现在我们希望根据这两个点云的位置求到相机的位姿变化,也就是旋转矩阵与平移。
假设这两个点云分别为,那么我们知道$p
= Rp’ + t
R,t$,首先要做的是配对关系。而ICP非常简单,它选取距离最近(一般来说为欧几里得距离)的点作为配对的点。因此,现在我们有了两组配对点:
我们希望做的是最小化下面这个代价:
如何解这其中的和?比较容易想到的就是最小二乘法,下面我们推导介绍一下利用SVD来解决这个最小二乘问题。
首先定义点云的质心为:
则:
值得注意的是:在求和之后为0,这是由质心的定义决定的。
因此原来的问题就简化为:
观察之后,我们发现第一个式子只和旋转有关,第二个式子和旋转平移都有关,不过另一方面它只和质心相关。如果我们求得了,简单的令第二个式子为0就可以求得对应的。所以现在ICP的算法表述如下:
令为原来点的去质心坐标:
计算最佳的:
最后,根据计算:
因此求得之后,是非常容易得到的。
第一项与无关,而,因此第二项也无所谓。我们重点要做的是。
计算这个可以使用SVD来解决。
定义,根据SVD得到:
W = UV^T
则。如果,则是唯一最优解。具体的证明比较复杂。这就求得了从到的旋转,有了旋转矩阵,平移就非常容易得到了。
至于迭代的过程,就是我们根据求得的进行转换后,重复上述的步骤。
最早的关于ICP的论文为A
Method for Registration of 3-D Shapes。