ICP算法
1.ICP算法(迭代最近点算法)
ICP(迭代最近点算法)是一种古老而又经典的点云匹配算法,其思路也很清晰。点云配准就是求解两堆点云之间的变换关系——也就是旋转关系 R R R 和平移关系 t t t。
ICP算法的思路就是:找到两组点云集合中距离最近的点对,根据估计的变换关系( R R R 和 t t t)来计算距离最近点对经过变换之后的误差,进过不断的迭代直至误差小于某一阈值或者达到迭代次数来确定最终的变换关系。
ICP算法的数学描述:
给定两个点云集合:
X = ( x 1 , x 2 , x 3 . . . x n ) X =(x_{1},x_{2},x_{3}...x_{n}) X=(x1,x2,x3...xn) P = ( p 1 , p 2 , p 3 . . . p m ) P=(p_{1},p_{2},p_{3}...p_{m}) P=(p1,p2,p3...pm)
求解 R R R 和 t t t,使下式最小
E ( R , t ) = 1 n ∑ i = 1 n ∣ ∣ x i − ( R p i + t ) ∣ ∣ 2 E(R,t) =\frac{1}{n}\displaystyle\sum_{i=1}^{n}||x_{i}-(Rp_{i}+t)||^{2} E(R,t)=n1i=1∑n∣∣xi−(Rpi+t)∣∣2
1.ICP算法的求解
1.1 已知对应点的情况
如果已知两个点云中点的对应关系,那么ICP算法的求解过程将非常简单,这个在视觉slam中较为常用,因为我们可以根据特种匹配的方式找出空间点的对应关系。
具体方法为:
- 首先,计算两组点云的质心
u x = 1 n ∑ i = 1 n ∣ ∣ x i ∣ ∣ 2 u_{x} =\frac{1}{n}\displaystyle\sum_{i=1}^{n}||x_{i}||^{2} ux=n1i=1∑n∣∣xi∣∣2
u p = 1 m ∑ i = 1 m ∣ ∣ p i ∣ ∣ 2 u_{p} =\frac{1}{m}\displaystyle\sum_{i=1}^{m}||p_{i}||^{2} up=m1i=1∑m∣∣pi∣∣2 - 计算两组点云中的点以质心为原点的坐标
X ′ = ( x i − u x ) = ( x i ′ ) X' =(x_{i}-u_{x})=(x_{i}') X′=(xi−ux)=(xi′) P ′ = ( p i − u p ) = ( p i ′ ) P'=(p_{i}-u_{p})=(p_{i}') P′=(pi−up)=(p