单应矩阵分解

xiaoxiao2021-02-28  198

单应矩阵分解

  这一篇是单应矩阵(Homography Matrix)分解得到 R t的笔记。ORB-SLAM2中用Faugeras(1988)的方法实现了单应性矩阵分解的,而在OpenCV中decomposeHomographyMat函数是用INRIA(2007)的方法实现的,并且源码里面也有Zhang(1996)的实现。这篇主要参考了泡泡机器人ORB-SLAM2注释和Faugeras 论文,介绍Faugeras SVD-based decomposition的推导。

  首先,设空间上的点 X=(XYZ)T 和点在图像平面的坐标 x=(xy1)T ,它们有如下关系:

Xx=Yy=Z(1)   令第一个相机坐标系为世界坐标,投影模型为 P1=K1[I|0] P2=K2[R|t] 。设3D点所在的世界平面的方程为 aX+bY+cZ=d ,平面单位法向量 n=( abc)T ,对在平面上的点 X ,平面方程可表示为 1dnTX=1(2)   对于两个相机坐标系的点有如下关系 X2=RX1+t(3)   由于点 X1 满足直线方程 (2) ,有 1dnTX1=1 ,则把该式乘到 (3) t 的右侧得 X2=(R+1dtnT)X1(4)   根据单应性变换,对图像齐次坐标 x=(xy1)T 和齐次单应矩阵 H ,两个图像坐标满足αhx2=Hx1,根据投影模型 x1=K1X1 x2=K2X2 ,我们有 X2=K12HK1X1(5)   对比 (4) (5) 我们有 A=dR+tnT=dP12HP1(6)   对 A 进行奇异值分解得到A=UΛVT UTU=VTV=I ), Λ=diag(d1,d2,d3) d1d2d3 ),则有 Λ=UTAV=dUTRV+(UTt)(VTn)T   有 s=detUdetV s2=1 ,令 R=sUTRVt=UTtn=VTnd=sds=detUdetV   我们有 Λ=d1000d2000d3=dR+tnT(7)   取基底 e=(100)T e=(010)T e=(001)T ,令 n=(x1x2x3)T=x1e1+x2e2+x3e3 ,根据 (7) 式可得 [d1e1d2e2d3e3]=[dRe1dRe2dRe3]+[tx1tx2tx3](8)   即有三个等式 d1e1=dRe1+tx1d2e2=dRe2+tx2d3e3=dRe3+tx3(8.1)(8.2)(8.3)

  注意到 n 是单位法向量, V 是旋转矩阵,则n也是单位法向量,则有 Σ3i=1x2i=1 。对 (8) 的三个式子消去 t

dR(x2e1x1e2)=d1x2e1d2x1e2dR(x3e2x2e3)=d2x3e2d3x2e3dR(x1e3x3e1)=d3x1e3d1x3e1(9.1)(9.2)(9.3)   这里的 R 也是旋转矩阵,满足 RTR=I 。也就是 R 具有保范性,也就是 RX=X ,对 (9) 式两边取二范数可得 (d2d22)x21+(d2d21)x22=0(d2d23)x22+(d2d22)x23=0(d2d21)x23+(d2d23)x21=0(10)    (10) 式是一个关于 x21 x22 x23 的一个齐次线性方程,其必然有非零解,那么系数矩阵的秩小于 3 ,其行列式必为0,也就有 (d2d21)(d2d22)(d2d23)=0(11) 根据 A 奇异值的大小顺序d1d2d3,从而有三种情况

d1d2d3 d1=d2d3 或者 d1d2=d3 d1=d2=d3

  对于上述3种情况,都有 d=±d2 ,而解 d=±d1 d=±d3 都是不可能的。对于第一种我们考虑如果 d=d1 ,则根据 (10) 式有

x1=0(d2d23)x22+(d2d22)x23=0   由于 d1d2d3 ,但是根据上式得到的是 x2=x3=0 ,那么不满足 n 是单位阵的条件 Σ3i=1x2i=1 ,则这样的情况不存在。

  如果 d1d3 ,根据式 (10) 以及 Σ3i=1x2i=1 ,有

x1=ε1d21d22d21d23x2=0x3=ε3d22d23d11d23ε1,ε3=±1(12)   接下来分成两种情况进行讨论

d=d2>0

1. d1d2d3

  由于 x2=0 ,代入式 (8.2) e2=Re2 ,所以 R 是沿着轴 e2 旋转,那么有

R=cosθ0sinθ010sinθ0cosθ(13)   把 R 代回式 (9.3) ,有 cosθ0sinθ010sinθ0cosθx30x1=d1x30d3x1   结合式 (12) 可以解得 sinθ=d1d3d2x1x3=ε1ε3(d21d22)(d22d23)(d1d3)d2cosθ=d1x23d3x21d2=d22+d1d3(d1+d3)d2(14)   由于 nTn=1 (8) 式两边同乘以 n 然后移位可以得到 t=d1000d2000d3x10x3d2cosθ0sinθ010sinθ0cosθx10x3(15)   把式 (12)(13) 代回 (15) t=(d1d3)x10x3(16)

2. d1=d2d3

  看式子 (12) ,这时有 x1=x2=0 x3=±1 ,这时 n=(00±1)T ,解为

{R=It=(d3d1)n(17)

3. d1=d2=d3

  这时 x1 x2 x3 未定义,根据式子 (8) (9)

{R=It=0(18)

d=d2<0

1. d1d2d3

  这时 d=d2 ,代入式 (8.2) e2=Re2 ,这时的 R 可以表示为

R=cosθ0sinθ010sinθ0cosθ(19)

  同样把 R 带回 (9.3) ,得

cosθ0sinθ010sinθ0cosθx30x1=d1x30d3x1   结合式 (12) 可以解得 sinθ=d1+d3d2x1x3=ε1ε3(d21d22)(d22d23)(d1d3)d2cosθ=d3x21d1x23d2=d1d3d22(d1d3)d2(20)   把式 (12) (19) (20) 代回 (8) t=d1000d2000d3x10x3+d2cosθ0sinθ010sinθ0cosθx10x3=(d1+d3)x10x3(21)

2. d1=d2d3

  同样结合式子 (12) ,这时有 x1=x2=0 x3=±1 ,这时的解为

R=100010001t=(d3+d1)n(22)

3. d1=d2=d3

  根据公式 (7) dI=dR+tnT ,也就有,对于与 n 垂直(在平面内)的向量 x ,有 Rx=x ,根据householder变换得到:

{R=I+2nnTt=2dn(23)

解的分析

  上述的两大类情况,除了未定义的情况,2和3都是1的特例。由于我们不知道 d 的符号,所以一共有8个可能的解。考虑

n=ε1d21d22d21d230ε3d22d23d11d23(24)   其中 R 中的 sinθ 中有 ε1ε3 项, t 中存在 n ,所以对 ε1=±1 ε3±1 一共有四种解,对于 d<0 d>0 一共有 4×2 种情况。但是从物理的角度去考虑,只有 2 种情况是可能的解。考虑(6) A=dR+tnT=dP12HP1   由于 A 是已经确定的,所以s=detUdetV是确定的,所以 d=sd 也是确定的,因此 8 个解只剩下4个。对于解得的平面单位法向量 n n1 n1 n2 n2 ,由于 nTX=d ,根据 (1) 式,考虑 Z1>0 ,有 nTX1dZ1=nTx1d>0 所以只有其中两个 n 是满足条件的。

  在Faugeras论文中提到,当观测到的点不是全部靠近一个相机光心而远离另外一个相机光心,那么只有一个解满足所有的点。如果有 d>0 ,对于上述两个解 (n1,t1) (n2,t2) ,这两个解有如下关系,也就是两个解是相同的。

{t2=(d1d3)n1n2=t1d1d3   而 ORB-SLAM2的代码,是在求出所有的8个解之后,对每一个解进行分析,检测点是不是都在两个相机的前方,并且统计重投影误差较小的点的个数,找出8个解中统计得到点数最多的的那个解作为最终的解。

参考

泡泡机器人ORB-SLAM2注释Faugeras O D, Lustman F. Motion and structure from motion in a piecewise planar environment.1988Ezio Malis, Manuel Vargas, and others. Deeper understanding of the homography decomposition for vision-based control. 2007Z. Zhang, and A.R. Hanson. 3D Reconstruction based on homography mapping, in Proc. ARPA96, pp. 1007-1012, 1996
转载请注明原文地址: https://www.6miu.com/read-17457.html

最新回复(0)