算法公式推导——ICP


前言:点云配准中的迭代最近点(Iterative Closest Points,ICP)算法的推导,网上很多资料都有介绍,但是对我来说,看完这些资料还是有写些太明白的地方,前段时间学习的相关课程中讲到了ICP的算法推导,感觉很详细,因此这里详细总结一下,确保任何一个有线性代数基础的小伙伴都能看懂(若由任何问题或写的不清楚的地方,欢迎大家提出并一起交流)。

1,算法输入

两堆点集: X = { x 1 , x 2 , . . . , x M } \mathbf{X} = \{x_1, x_2, ..., x_M\} X={ x1,x2,...,xM} Y = { y 1 , y 2 , . . . , y N } \mathbf{Y} = \{y_1, y_2, ..., y_N\} Y={ y1,y2,...,yN} X \mathbf{X} X Y \mathbf{Y} Y是需要进行配准的两帧点云。首先,对点云 Y \mathbf{Y} Y 中的每个点,找到其在点云 X \mathbf{X} X中的对应点,最终得到与点云 Y \mathbf{Y} Y中每个点挨个儿对应的点集 X ∗ = { x 1 ∗ , x 2 ∗ , . . . , x N ∗ } \mathbf{X^*} = \{x_1^*, x_2^*, ..., x_N^*\} X={ x1,x2,...,xN},其中 x i ∗ ∈ X x_i^* \in \mathbf{X} xiX

2,目标函数

对于已知对应点的点集 { ( x 1 ∗ , y 1 ) , ( x 2 ∗ , y 2 ) , . . . , ( x N ∗ , y N ) } \{(x_1^*, y_1),(x_2^*, y_2),... , (x_N^*, y_N) \} { (x1,y1),(x2,y2),...,(xN,yN)}要找到一个旋转矩阵R和一个平移向量t,使得关于它们的目标函数 E ( R , t ) = 1 N ∑ i = 1 N ∣ ∣ x i ∗ − R y i − t ∣ ∣ 2 E(R, t) = \frac{1}{N} \displaystyle\sum_{i=1}^N ||x_i^* - R y_i - t||^2 E(R,t)=N1i=1NxiRyit2 最小。为了书写方便,后面用 x i x_i xi代替 x i ∗ x_i^* xi(但应注意这里的 x i x_i xi不等于点集 X \mathbf{X} X中尚未知对应点的 x i x_i xi)。

【注:其实这里我一直很疑惑,这个对应点是怎么找的,把点集 X \mathbf{X} X中距离点 y i y_i yi最近的点,作为它的对应点吗?】

因此,目标函数: m i n E ( R , t ) = m i n 1 N ∑ i = 1 N ∣ ∣ x i − R y i − t ∣ ∣ 2 minE(R, t) = min \frac{1}{N} \displaystyle\sum_{i=1}^N ||x_i - R y_i - t||^2 minE(R,t)=minN1i=1NxiRyit2

3,理论推导

步骤1:

E ( R , t ) = 1 N ∑ i = 1 N ∣ ∣ x i − R y i − t ∣ ∣ 2 = 1 N ∑ i = 1 N ∣ ∣ x i − R y i − t − ( u x − R u y ) + ( u x − R u y ) ∣ ∣ 2 = 1 N ∑ i = 1 N ∣ ∣ ( x i − u x ) − R ( y i − u y ) + ( u x − R u y − t ) ∣ ∣ 2 = 1 N ∑ i = 1 N ( ∣ ∣ ( x i − u x ) − R ( y i − u y ) ∣ ∣ 2 + ∣ ∣ ( u x − R u y − t ) ∣ ∣ 2 + 2 ( x i − u x − R ( y i − u y ) ) T ( u x − R u y − t ) ) = 1 N ∑ i = 1 N ( ∣ ∣ ( x i − u x ) − R ( y i − u y ) ∣ ∣ 2 + ∣ ∣ ( u x − R u y − t ) ∣ ∣ 2 ) + 2 ⋅ 1 N ∑ i = 1 N ( ( x i − u x − R ( y i − u y ) ) T ) ⋅ ( u x − R u y − t ) = 1 N ∑ i = 1 N ( ∣ ∣ ( x i − u x ) − R ( y i − u y ) ∣ ∣ 2 + ∣ ∣ ( u x − R u y − t ) ∣ ∣ 2 ) = 1 N ∑ i = 1 N ∣ ∣ ( x i − u x ) − R ( y i − u y ) ∣ ∣ 2 + 1 N ∑ i = 1 N ∣ ∣ ( u x − R u y − t ) ∣ ∣ 2 = E 1 ( R , t ) + E 2 ( R , t ) (1) \begin{aligned} E(R, t) =& \frac{1}{N} \displaystyle\sum_{i=1}^N ||x_i - R y_i - t||^2 \tag{1} \\ =& \frac{1}{N} \displaystyle\sum_{i=1}^N ||x_i - R y_i - t - (u_x - Ru_y) + (u_x - Ru_y)||^2 \\ =& \frac{1}{N} \displaystyle\sum_{i=1}^N ||(x_i-u_x) - R (y_i - u_y) + (u_x - Ru_y - t)||^2 \\ =& \frac{1}{N} \displaystyle\sum_{i=1}^N\big(||(x_i-u_x) - R (y_i - u_y)||^2 + ||(u_x - Ru_y - t)||^2 + 2(x_i-u_x - R (y_i - u_y))^T(u_x - Ru_y - t) \big) \\ =& \frac{1}{N} \displaystyle\sum_{i=1}^N\big(||(x_i-u_x) - R (y_i - u_y)||^2 + ||(u_x - Ru_y - t)||^2 \big) + 2 \cdot \frac{1}{N} \displaystyle\sum_{i=1}^N \big( (x_i-u_x - R (y_i - u_y))^T \big) \cdot (u_x - Ru_y - t) \\ =& \frac{1}{N} \displaystyle\sum_{i=1}^N\big(||(x_i-u_x) - R (y_i - u_y)||^2 + ||(u_x - Ru_y - t)||^2 \big) \\ =& \frac{1}{N} \displaystyle\sum_{i=1}^N ||(x_i-u_x) - R (y_i - u_y)||^2 + \frac{1}{N} \displaystyle\sum_{i=1}^N ||(u_x - Ru_y - t)||^2 \\ =& E_1(R,t) + E_2(R,t) \end{aligned} E(R,t)========N1i=1NxiRyit2N1i=1NxiRyit(uxRuy)+(uxRuy)2N1i=1N(xiux)R(yiuy)+(uxRuyt)2N1i=1N((xiux)R(yiuy)2+(uxRuyt)2+2(xiuxR(yiuy))T(uxRuyt))N1i=1N((xiux)R(yiuy)2+(uxRuyt)2)+2N1i=1N((xiuxR(yiuy))T)(ux

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值