三维重建:对极约束,基础矩阵、本质矩阵、三角化详细推导过程

对极几何

描述两个视图之间的射影几何关系,计算相机不同位置的变换关系。

对极约束

三维重建:对极约束,基础矩阵、本质矩阵、三角化详细推导过程_第1张图片
以上图为例, I 1 I_1 I1 I 2 I_2 I2是两帧图像,它们之间的相机运动关系是 R , t R, t R,t O 1 O_1 O1 O 2 O_2 O2分别是这两个位姿处的光心,设通过特征匹配等手段确定 p 1 和 p 2 p_1和p_2 p1p2是同一个特征点在两幅图像上的投影,设它为 [ X , Y , Z ] T [X, Y, Z]^T [X,Y,Z]T。定义以下术语:
对极平面: O 1 , O 2 , P O_1, O_2, P O1,O2,P所在的平面,显然, p 1 和 p 2 p_1和p_2 p1p2应该也在这个面上;
基线: O 1 , O 2 O_1, O_2 O1,O2的连线;
极点:基线与像平面 I 1 I_1 I1 I 2 I_2 I2的交点 e 1 e_1 e1 e 2 e_2 e2
极线:对极平面与两个像平面的交线 l 1 l_1 l1 l 2 l_2 l2
由小孔成像模型知
s 1 p 1 = K P , s 2 p 2 = K ( R P + t ) s_1p_1=KP, s_2p_2=K(RP+t) s1p1=KP,s2p2=K(RP+t)
其中 s 1 s_1 s1 s 2 s_2 s2是缩放系数,如果将 p 1 p_1 p1 p 2 p_2 p2写成齐次坐标,可以写成up to scale(在某个尺度下成立)的等式
p 1 = K P , p 2 = K ( R P + t ) p_1=KP, p_2=K(RP+t) p1=KP,p2=K(RP+t)
像素点的相机归一化的坐标
x 1 = K − 1 p 1 , x 1 = K − 1 p 2 ( 1 ) x_1=K^{-1}p_1, x_1=K^{-1}p_2(1) x1=K1p1,x1=K1p2(1)
带入得
x 2 = R x 1 + t x_2=Rx_1+t x2=Rx1+t
t × x 2 = t × R x 1 + t × t t\times x_2=t\times Rx_1+t\times t t×x2=t×Rx1+t×t
两端同时左乘 t t t,做外积
t × x 2 = t × R x 1 + t × t t\times x_2=t\times Rx_1+t\times t t×x2=t×Rx1+t×t
其中 t × t = 0 t\times t=0 t×t=0,两边同时左乘 x 2 T x_2^T x2T
x 2 T ⋅ t × x 2 = x 2 T ⋅ t × R x 1 x_2^T\cdot t\times x_2=x_2^T\cdot t\times Rx_1 x2Tt×x2=x2Tt×Rx1
左侧为0,得出
x 2 T ⋅ t × R x 1 = 0 x_2^T\cdot t\times Rx_1=0 x2Tt×Rx1=0
如果将 p 1 , p 2 p_1, p_2 p1,p2代入得
p 2 T K − T ⋅ t × R K − 1 p 1 = 0 p_2^TK^{-T}\cdot t\times RK^{-1}p_1=0 p2TKTt×RK1p1=0
以上两式都叫做对极约束。令
E = t × R E=t\times R E=t×R F = K − T E K − 1 F=K^{-T}EK^{-1} F=KTEK1 p 2 T F p 1 = x 2 T E x 1 = 0 p_2^TFp_1=x_2^TEx_1=0 p2TFp1=x2TEx1=0
其中E称为本质矩阵,F称为基础矩阵。

本质矩阵及求解

本征矩阵具有以下性质

  1. 由于对极约束是一侧为0,本征矩阵乘以任何常数对极约束都成立,E在不同尺度下是等价的;
  2. 根据 E = t × R E=t\times R E=t×R,E的奇异值是 [ σ 1 , σ 2 , 0 ] [\sigma_1, \sigma_2, 0] [σ1,σ2,0]的形式;
  3. 平移和旋转各有三个自由度,但由于尺度等价,所以本质矩阵有5个自由度;
    因此要求解本质矩阵至少需要5对点,但E内部的非线性性质会使得线性方程组很复杂,所以通常用八点法来求解,设有一对匹配点 x 1 = [ u 1 , v 1 , 1 ] , x 2 = [ u 2 , v 2 , 1 ] , x_1=[u_1, v_1, 1], x_2=[u_2, v_2, 1], x1=[u1,v1,1],x2=[u2,v2,1],得到等式
    [ u 1 , v 1 , 1 ] T [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] [ u 2 , v 2 , 1 ] = 0 [u_1, v_1, 1]^T\begin{bmatrix} e_1 & e_2 & e_3 \\ e_4 & e_5 & e_6 \\ e_7 & e_8 & e_9 \end{bmatrix} [u_2, v_2, 1]=0 [u1,v1,1]Te1e4e7e2e5e8e3e6e9[u2,v2,1]=0
    得到
    [ u 1 u 2 , u 1 v 2 , u 1 , v 1 u 2 , v 1 v 2 , v 1 , u 2 , v 2 , 1 ] ⋅ [ e 1 , e 2 , e 3 , e 4 , e 5 , e 6 , e 7 , e 8 , e 9 ] T = 0 [u_1u_2, u_1v_2, u_1, v_1u_2, v_1v_2, v_1, u_2, v_2, 1]\cdot [e_1, e_2, e_3, e_4, e_5, e_6, e_7, e_8, e_9]^T=0 [u1u2,u1v2,u1,v1u2,v1v2,v1,u2,v2,1][e1,e2,e3,e4,e5,e6,e7,e8,e9]T=0
    每一对点可以得到一个上述方程,当有8对匹配点时,就可以求解本质矩阵了。但是通常匹配点的对数都会大于8,这个时候就会形成一个超定方程组,由于我们的特征点存在误差,不能完全满足上述约束,需要采用RANSAC和LMEDS(least median square)方法
  • 1 RANSAC
    随机抽样一致性方法。即每次随机从所有点中抽出8个点求解本质矩阵,然后计算误差,大量抽样选择误差最小的那个。
  • 2 LMEDS
    最小二乘法,通过数值方法选择误差最小的解。所有点形成的系数矩阵是A,对它进行SVD分解
    A = U Σ V T A=U\Sigma V^T A=UΣVT
    可以看出当解最小的奇异值对应的右奇异矢量,也就是V的最后一列。
    由以上方法得到解 E ′ E' E后,考虑到本质矩阵第二个特性,需要对它做SVD分解,将最小的特征值置为0,由于尺度不变特性,用1代替奇异值,得
    E = U D V T , D = d i a g ( 1 , 1 , 0 ) E=UDV^T, D=diag(1, 1, 0) E=UDVT,D=diag(1,1,0)
    由E分解得到R,t
    由于求解的E具有以上形式,对它分解R,t有以下几种可能,
    ( t 1 , R 1 ) = ( U R z ( π 2 ) D U T , U R z ( π 2 ) V T ) (t_1, R_1)=(UR_z(\frac{\pi}{2})DU^T, UR_z(\frac{\pi}{2})V^T) (t1,R1)=(URz(2π)DUT,URz(2π)VT)
    ( t 2 , R 2 ) = ( U R z ( − π 2 ) D U T , U R z ( − π 2 ) V T ) (t_2, R_2)=(UR_z(-\frac{\pi}{2})DU^T, UR_z(-\frac{\pi}{2})V^T) (t2,R2)=(URz(2π)DUT,URz(2π)VT)
    其中 R z ( π 2 ) R_z(\frac{\pi}{2}) Rz(2π)表示绕z轴 π 2 \frac{\pi}{2} 2π的旋转矩阵
    R z ( ± π 2 ) = [ 0 ± 1 0 ∓ 1 0 0 0 0 0 ] R_z(\pm\frac{\pi}{2})=\begin{bmatrix} 0 & \pm1 & 0 \\ \mp1 & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix} Rz(±2π)=010±100000
    两种可能组合有四种分解形式,但实际上只有一组解能满足深度都为正,(可以通过三角化求出深度,下文会讲到),以上过程即可求得E。
    同理可以求出F,但是由于E、F是个病态矩阵,因此点的值很小的时候,可能带来很大的误差。因此还需要进行归一化处理,对极约束写成
    P l T F P r = 0 = > ( H r P l ) T F ‾ ( H r P r ) = 0 P_l^TFP_r=0 => (H_rP_l)^T\overline F(H_rP_r)=0 PlTFPr=0=>(HrPl)TF(HrPr)=0
    使用矩阵 H L , H r H_L, H_r HL,Hr对点进行归一化处理,按照以上计算过程得出 F ‾ \overline F F,再进一步计算
    F = ( H r ) T F ‾ H l F=(H_r)^T\overline FH_l F=(Hr)TFHl
    归一化处理:
    对点做归一化
    [ x ^ i , y ^ i , 1 ] = [ ( x i − x ‾ ) / d ‾ , ( y i − y ‾ ) / d ‾ , , 1 ] [\hat x_i, \hat y_i, 1] = [(x_i-\overline x)/\overline d, (y_i-\overline y)/\overline d,, 1] [x^i,y^i,1]=[(xix)/d,(yiy)/d,,1]
    其中 x ‾ = 1 n ∑ x , y ‾ = 1 n ∑ y , d ‾ = ∑ ( x i − x ‾ ) 2 + ( y i − y ‾ ) 2 n \overline x=\frac{1}{n}\sum{x}, \overline y=\frac{1}{n}\sum{y} , \overline d=\frac{\sum{(x_i-\overline x)^2+(y_i-\overline y)^2}}{n} x=n1x,y=n1y,d=n(xix)2+(yiy)2,归一化过程可以写成矩阵
    [ 1 / d ‾ 0 − x ‾ / d ‾ 0 1 / d ‾ − y ‾ / d ‾ 0 0 1 ] \begin{bmatrix} 1/\overline d & 0 & -\overline x/\overline d \\ 0 & 1/\overline d & -\overline y/\overline d \\ 0 & 0 & 1 \end{bmatrix} 1/d0001/d0x/dy/d1

三角测量

通过三角测量方法计算特征点的深度
x 1 = P , x 2 = R P + t x_1=P, x_2=RP+t x1=P,x2=RP+t,用点左叉乘后有
x 1 × x 1 = x 1 × P = 0 , x 2 × x 2 = R P + t = 0 x_1\times x_1=x_1\times P=0, x_2\times x_2=RP+t=0 x1×x1=x1×P=0,x2×x2=RP+t=0,得到方程组的系数矩阵
[ x 1 P 2 − P 1 P 0 − P 2 x 0 − x 1 P 0 + x 0 P 1 ] \begin{bmatrix} x_1P_2-P_1\\ P_0-P_2x_0\\ -x_1P_0+x_0P_1 \end{bmatrix} x1P2P1P0P2x0x1P0+x0P1
其中 P = [ R , t ] P=[R, t] P=[R,t], P i P_i Pi是它的行向量,对第二个点 s 2 s_2 s2也可以列出类似方程组,第三行和一二行线性相关,一般省略,求解齐次超定方程组就可以(LMEDS)。

你可能感兴趣的:(计算机视觉,计算机视觉)