利用SVD求得两个对应点集合的旋转矩阵R和转移矩阵t的数学推导

4 篇文章 0 订阅
3 篇文章 0 订阅
1.问题描述

给定两个在d维空间中对应的点集合 P = { p 1 , p 2 , … , p n } P = \{ p_1,p_2 ,\dots , p_n\} P={p1,p2,,pn} Q = { q 1 , q 2 , … , q n } Q = \{ q_1 ,q_2, \dots , q_n \} Q={q1,q2,,qn},为了计算出它们之间的刚体变换,即 R R R t t t,可以将其建模为如下的数学形式:
( R , t ) = a r g m i n ∑ i = 1 n w i ∣ ∣ ( R p i + t ) − q i ∣ ∣ 2 (1) (R,t)=argmin \sum_{i=1}^n w_i||(Rp_i+t)-q_i||^2 \tag{1} (R,t)=argmini=1nwi(Rpi+t)qi2(1)
w i w_i wi 表示每个点对之间的权重。

2. 计算转移矩阵

首先,对公式(1)求导,可以得到:
0 = ∂ F ∂ t = ∑ i = 1 n 2 w i ( R p i + t − q i ) = 2 t ( ∑ i = 1 n w i ) + 2 R ( ∑ i = 1 n w i p i ) − 2 ∑ i = 1 n w i q i (2) 0=\frac{\partial F}{\partial t} = \sum_{i=1}^{n}2w_i(Rp_i +t-q_i) = 2t(\sum_{i=1}^nw_i)+ 2R(\sum_{i=1}^nw_ip_i)-2\sum_{i=1}^{n}w_iq_i \tag{2} 0=tF=i=1n2wi(Rpi+tqi)=2t(i=1nwi)+2R(i=1nwipi)2i=1nwiqi(2)
现在,引入点集合P的中心点 p ^ \hat p p^和点集合Q的中心点 q ^ \hat q q^,它们分别为:
p ^ = ∑ i = 1 n w i p i ∑ i = 1 n w i q ^ = ∑ i = 1 n w i q i ∑ i = 1 n w i (3) \hat p = \frac{\sum_{i=1}^{n}w_ip_i}{\sum_{i=1}^{n}w_i} \\ \hat q = \frac{\sum_{i=1}^{n}w_iq_i}{\sum_{i=1}^{n}w_i} \tag{3} p^=i=1nwii=1nwipiq^=i=1nwii=1nwiqi(3)
公式(2)两边同时除以, ∑ i = 1 n w i \sum_{i=1}^nw_i i=1nwi则得到:
0 ∑ i = 1 n w i = 2 t ( ∑ i = 1 n w i ) ∑ i = 1 n w i + 2 R ( ∑ i = 1 n w i p i ) ∑ i = 1 n w i − 2 ∑ i = 1 n w i q i ∑ i = 1 n w i 0 = 2 t + 2 R p ^ − 2 q ^ q ^ − R p ^ = t (4) \frac{0}{\sum_{i=1}^nw_i} = \frac{2t(\sum_{i=1}^nw_i)}{\sum_{i=1}^nw_i}+ \frac{2R(\sum_{i=1}^nw_ip_i)}{\sum_{i=1}^nw_i}-\frac{2\sum_{i=1}^{n}w_iq_i }{\sum_{i=1}^nw_i}\\ 0 = 2t+2R\hat p-2\hat q \\ \hat q-R\hat p = t \tag{4} i=1nwi0=i=1nwi2t(i=1nwi)+i=1nwi2R(i=1nwipi)i=1nwi2i=1nwiqi0=2t+2Rp^2q^q^Rp^=t(4)

将等式 t = q ^ − R p ^ t = \hat q-R\hat p t=q^Rp^替换到公式(1)可以得到:
∑ i = 1 n w i ∣ ∣ ( R p i + t ) − q i ∣ ∣ 2 = ∑ i = 1 n w i ∣ ∣ R p i + q ^ − R p ^ − q i ∣ ∣ 2 = ∑ i = 1 n w i ∣ ∣ R ( p i − p ^ ) − ( q i − q ^ ) ∣ ∣ 2 (5) \sum_{i=1}^n w_i||(Rp_i+t)-q_i||^2\\ = \sum_{i=1}^n w_i||Rp_i+ \hat q-R\hat p -q_i||^2 \\= \sum_{i=1}^n w_i||R(p_i-\hat p)-(q_i-\hat q)||^2 \tag{5} i=1nwi(Rpi+t)qi2=i=1nwiRpi+q^Rp^qi2=i=1nwiR(pip^)(qiq^)2(5)
公式(5)看出,我们可以利用集合 X X X和集合 Y Y Y表示 p i − p ^ p_i-\hat p pip^ q i − q ^ q_i-\hat q qiq^,用 x i x_i xi y i y_i yi分别表示新数据集合中的点。
x i : = p i − p ^ y i : = q i − q ^ (6) x_i : = p_i-\hat p \\ y_i := q_i - \hat q \tag{6} xi:=pip^yi:=qiq^(6)
这时所以公式(1)可以等价于为:
R = a r g m i n ∑ i = 1 n w i ∣ ∣ R x i − y i ∣ ∣ 2 (7) R = argmin\sum_{i=1}^{n} w_i ||Rx_i-y_i||^2 \tag{7} R=argmini=1nwiRxiyi2(7)

3. 计算旋转矩阵

首先,扩展公式(7):
∑ i = 1 n ∣ ∣ R x i − y i ∣ ∣ 2 = ( R x i − y i ) T ( R x i − y i ) = ( x i T R T − y i T ) ( R x i − y i ) = x i T R T R x i − y i T R x i − x i T R T y i + y i T y i = R T R = I x i T x i − y i T R x i − x i T R T y i + y i T y i (8) \sum_{i=1}^{n} ||Rx_i-y_i||^2 = (Rx_i - y_i)^T(Rx_i-y_i)=(x_i^TR^T-y_i^T)(Rx_i-y_i)\\ = x_i^T R^T R x_i -y_i^TRx_i-x_i^T R^Ty_i + y_i^Ty_i \\ \overset{R^TR=I}{=}x_i^Tx_i -y_i^TRx_i -x_i^TR^Ty_i + y_i^Ty_i \tag{8} i=1nRxiyi2=(Rxiyi)T(Rxiyi)=(xiTRTyiT)(Rxiyi)=xiTRTRxiyiTRxixiTRTyi+yiTyi=RTR=IxiTxiyiTRxixiTRTyi+yiTyi(8)
在公式(8)中,需要注意的是: x i T R T y i x_i^TR^Ty_i xiTRTyi是一个标量,因为在集合中的每个点 x i x_i xi 1 × d 1\times d 1×d维的矢量,旋转矩阵 R R R是一个 d × d d\times d d×d维度的矩阵, y i y_i yi 是一个 d × 1 d\times 1 d×1的矢量。
[ ] 1 × d [ ] d × d [ ] d × 1 = [ ] 1 × 1 \left[\right]_{1\times d}\left[\right]_{d\times d} \left[\right]_{d\times 1} = \left[\right]_{1\times 1} []1×d[]d×d[]d×1=[]1×1
对任意的标量a,它满足 a T = a a^T = a aT=a,且在公式(8)中:
x i T R T y i = ( x i T R T y i ) T = y i T R x i x_i^T R^T y_i = (x_i^T R^Ty_i)^T=y_i^T R x_i xiTRTyi=(xiTRTyi)T=yiTRxi
所以公式(8)可以变成:
∣ ∣ R x i − y i ∣ ∣ 2 = x i T x i − 2 y i T R x i + y i T y i (9) ||Rx_i-y_i||^2 =x_i^Tx_i -2y_i^TRx_i+y_i^Ty_i \tag{9} Rxiyi2=xiTxi2yiTRxi+yiTyi(9)
现在重新对公式(9)进行扩展,我们可以看出:
a r g m i n ∑ i = 1 n w i ∣ ∣ R x i − y i ∣ ∣ 2 = a r g m i n ∑ i = 1 n w i ( x i T x i − 2 y i T R x i + y i T y i ) = a r g m i n ( ∑ i = 1 n w i x i T x i − 2 ∑ i = 1 n w i y i T R x i + ∑ i = 1 n w i y i T y i ) argmin\sum_{i=1}^n w_i || Rx_i - y_i||^2 = argmin\sum_{i=1}^n w_i(x_i^Tx_i -2y_i^TRx_i+y_i^Ty_i) \\ =argmin(\sum_{i=1}^nw_ix_i^Tx_i - 2\sum_{i=1}^nw_iy_i^TRx_i+\sum_{i=1}^nw_iy_i^Ty_i) argmini=1nwiRxiyi2=argmini=1nwi(xiTxi2yiTRxi+yiTyi)=argmin(i=1nwixiTxi2i=1nwiyiTRxi+i=1nwiyiTyi)
因为 ∑ i = 1 n w i x i T x i \sum_{i=1}^n w_i x_i^Tx_i i=1nwixiTxi ∑ i = 1 n w i y i T y i \sum_{i=1}^{n} w_i y_i^T y_i i=1nwiyiTyi 不依赖于旋转矩阵 R R R,所以
a r g m i n ∑ i = 1 n w i ∣ ∣ R x i − y i ∣ ∣ 2 = a r g m i n ( − 2 ∑ i = 1 n w i y i T R x i ) = a r g m a x ( ∑ i = 1 n w i y i T R x i ) argmin\sum_{i=1}^n w_i || Rx_i - y_i||^2 =argmin(-2 \sum_{i=1}^{n} w_i y_i^TRx_i) = argmax(\sum_{i=1}^{n} w_i y_i^TRx_i) argmini=1nwiRxiyi2=argmin(2i=1nwiyiTRxi)=argmax(i=1nwiyiTRxi)

另外,
∑ i = 1 n w i y i T R x i = [ w 1 w 2 ⋱ w n ] [ y 1 T y 2 T ⋮ y n T ] [ R ] [ x 1 x 2 ⋯ x n ] = [ w 1 y 1 T w 2 y 2 T ⋮ w n y n ] [ R x 1 R x 2 ⋯ R x n ] = [ w 1 y 1 T R x 1 w 2 y 2 T R x 2 ⋱ w n y n T R x n ] \sum_{i=1}^{n} w_i y_i^T R x_i = \left[ \begin{matrix}w_1 & & & \\ & w_2 & & \\ & & \ddots & \\ & & & w_n \end{matrix} \right] \left[ \begin{matrix} y_1^T \\ y_2^T \\ \vdots \\ y_n^T \end{matrix}\right] \left [ \begin{matrix} & & & \\ & R & \\ & & &\end{matrix}\right] \left[ \begin{matrix} x_1 & x_2 & \cdots & x_n \end{matrix} \right] \\ =\left[ \begin{matrix} w_1 y_1^T \\ w_2 y_2^T \\ \vdots \\ w_n y_n\end{matrix} \right] \left[ \begin{matrix} Rx_1 & Rx_2 & \cdots & Rx_n \end{matrix} \right] \\ = \left[ \begin{matrix} w_1y_1^TRx_1 & & & \\ & w_2y_2^TRx_2 & & \\ & & \ddots & \\ & & & w_ny_n^TRx_n \end{matrix} \right] i=1nwiyiTRxi=w1w2wny1Ty2TynTR[x1x2xn]=w1y1Tw2y2Twnyn[Rx1Rx2Rxn]=w1y1TRx1w2y2TRx2wnynTRxn
所以,我们可以得到
∑ i = 1 n w i y i T R x i = t r ( W Y T R X ) \sum_{i=1}^{n} w_i y_i^T R x_i =tr(WY^TRX) i=1nwiyiTRxi=tr(WYTRX)
其中, W = d i a g ( w 1 , . . . , w n ) W =diag(w_1,...,w_n) W=diag(w1,...,wn) Y = [ y 1 y 2 ⋯ y n ] T Y = \left[ \begin{matrix} y_1 & y_2 & \cdots & y_n \end{matrix} \right]^T Y=[y1y2yn]T X = [ x 1 x 2 ⋯ x n ] X = \left[ \begin{matrix} x_1 & x_2 & \cdots & x_n \end{matrix} \right] X=[x1x2xn]
且矩阵的迹满足某种特性,
t r ( A B ) = t r ( B A ) tr(AB) = tr(BA) tr(AB)=tr(BA)
则,
∑ i = 1 n w i y i T R x i = t r ( W Y T R X ) = t r ( ( W Y T ) ( R X ) ) = t r ( ( R X ) ( W Y T ) ) = t r ( R X W Y T ) \sum_{i=1}^{n} w_i y_i^T R x_i =tr(WY^TRX) = tr ((WY^T)(RX))=tr ((RX)(WY^T))=tr(RXWY^T) i=1nwiyiTRxi=tr(WYTRX)=tr((WYT)(RX))=tr((RX)(WYT))=tr(RXWYT)
S = X W Y T S = XWY^T S=XWYT
∑ i = 1 n w i y i T R x i = t r ( R X W Y T ) = S = X W Y T t r ( R S ) = S V D t r ( R U Σ V T ) = t r ( ( Σ V T ) ( R U ) ) = t r ( Σ V T R U ) \sum_{i=1}^{n} w_i y_i^T R x_i =tr(RXWY^T)\overset{S = XWY^T} {=}tr(RS)\overset{SVD}{=}tr(RU\Sigma V^T) =tr((\Sigma V^T) (RU))=tr(\Sigma V^T RU) i=1nwiyiTRxi=tr(RXWYT)=S=XWYTtr(RS)=SVDtr(RUΣVT)=tr((ΣVT)(RU))=tr(ΣVTRU)

需要注意的是: V V V R R R U U U是正交矩阵,所以 M = V T R U M = V^T RU M=VTRU同样也是正交矩阵。这也意味这在矩阵M中,每一列的向量 m j m_j mj m j T m j = 1 m_j^T m_j = 1 mjTmj=1,因此,
t r ( Σ M ) = ( σ 1 σ 2 ⋱ σ d ) ( m 11 m 12 ⋯ m 1 d m 21 m 22 ⋯ m 2 d ⋮ ⋮ ⋱ ⋮ m d 1 m d 2 ⋯ m d d ) = ∑ i = 1 d σ i m i i ≤ ∑ i = 1 d σ i tr(\Sigma M) = \left(\begin{matrix} \sigma_1 & & & \\ & \sigma_2 & & \\ & & \ddots & \\ & & & \sigma_d \end{matrix} \right) \left(\begin{matrix} m_{11} & m_{12} & \cdots & m_{1d} \\ m_{21} & m_{22} & \cdots & m_{2d} \\ \vdots & \vdots & \ddots & \vdots \\ m_{d1} & m_{d2} & \cdots & m_{dd} \end{matrix} \right) = \sum_{i=1}^{d} \sigma_i m_{ii} \leq \sum_{i=1}^{d} \sigma_i tr(ΣM)=σ1σ2σdm11m21md1m12m22md2m1dm2dmdd=i=1dσimiii=1dσi
为了求得最大化的R, a r g m a x ( ∑ i = 1 n w i y i T R x i ) argmax(\sum_{i=1}^{n} w_i y_i^TRx_i) argmax(i=1nwiyiTRxi),则
I = M = V T R U V = R U R = V U T I = M = V^T RU \\ V = RU \\ R = VU^T I=M=VTRUV=RUR=VUT

计算出R之后,转移矩阵 t t t为:
t = q ^ − R p ^ t = \hat q - R \hat p t=q^Rp^

总结一下:

给定两个在d维空间中对应的点集合 P = { p 1 , p 2 , … , p n } P = \{ p_1,p_2 ,\dots , p_n\} P={p1,p2,,pn} Q = { q 1 , q 2 , … , q n } Q = \{ q_1 ,q_2, \dots , q_n \} Q={q1,q2,,qn},为了计算出它们之间的刚体变换,即 R R R t t t,其过程如下:

  1. 构建上述问题的模型为:
    ( R , t ) = a r g m i n ∑ i = 1 n w i ∣ ∣ ( R p i + t ) − q i ∣ ∣ 2 (R,t)=argmin \sum_{i=1}^n w_i||(Rp_i+t)-q_i||^2 (R,t)=argmini=1nwi(Rpi+t)qi2
    2.对两个点集合进行去中心化,得到新的点集合 X X X Y Y Y,表示为:
    p ^ = ∑ i = 1 n w i p i ∑ i = 1 n w i q ^ = ∑ i = 1 n w i q i ∑ i = 1 n w i x i : = p i − p ^ y i : = q i − q ^ \hat p = \frac{\sum_{i=1}^{n}w_ip_i}{\sum_{i=1}^{n}w_i} \\ \hat q = \frac{\sum_{i=1}^{n}w_iq_i}{\sum_{i=1}^{n}w_i} \\ x_i : = p_i-\hat p \\ y_i := q_i - \hat q p^=i=1nwii=1nwipiq^=i=1nwii=1nwiqixi:=pip^yi:=qiq^
    此时,转移矩阵
    t = q ^ − R p ^ t = \hat q - R \hat p t=q^Rp^
  2. 步骤一中的问题转化为:
    R = argmin ∑ i = 1 n w i ∣ ∣ R x i − y i ∣ ∣ 2 = argmax ∑ i = 1 n w i y i T R x i = argmax  t r ( W Y T R X ) = argmax  t r ( R X W Y T ) = argmax  t r ( R X W Y T ) = S V D argmax  t r ( R U Σ V T ) = argmax  t r ( Σ V T R U ) R = \text{argmin} \sum_{i=1}^{n} w_i ||Rx_i-y_i||^2 \\ = \text{argmax} \sum_{i=1}^n w_i y_i^T R x_i \\ =\text{argmax} ~ tr(WY^T R X) \\ = \text{argmax} ~tr(R X WY^T ) \\ =\text{argmax} ~ tr(R X WY^T) \\ \overset{SVD}{=}\text{argmax} ~tr(R U\Sigma V^T ) =\text{argmax} ~tr(\Sigma V^TR U ) R=argmini=1nwiRxiyi2=argmaxi=1nwiyiTRxi=argmax tr(WYTRX)=argmax tr(RXWYT)=argmax tr(RXWYT)=SVDargmax tr(RUΣVT)=argmax tr(ΣVTRU)
  3. 为了使得 t r ( Σ V T R U ) tr(\Sigma V^TR U ) tr(ΣVTRU)达到最大值,
    I = V T R U I = V^TR U I=VTRU
    逐步化简:
    V = R U R = V U T V = RU \\ R = VU^T V=RUR=VUT
    所以, t t t可以根据公式 t = q ^ − R q ^ t = \hat q - R \hat q t=q^Rq^ 计算出来。
    至此,就计算出两个点集合之间的选装矩阵 R R R和转移矩阵 t t t。另外,针对本章的推导,我写了一小段python代码验证了一下,有兴趣的可以看一下。计算两个对应点集之间的旋转矩阵R和转移矩阵T

【参考文献】
【1】Least-Squares Rigid Motion Using SVD

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值