对极几何

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

对极约束

三维重建:对极约束,基础矩阵、本质矩阵、三角化详细推导过程
以上图为例,I1I_1I2I_2是两帧图像,它们之间的相机运动关系是R,tR, tO1O_1O2O_2分别是这两个位姿处的光心,设通过特征匹配等手段确定p1p2p_1和p_2是同一个特征点在两幅图像上的投影,设它为[X,Y,Z]T[X, Y, Z]^T。定义以下术语:
对极平面:O1,O2,PO_1, O_2, P所在的平面,显然,p1p2p_1和p_2应该也在这个面上;
基线:O1,O2O_1, O_2的连线;
极点:基线与像平面I1I_1I2I_2的交点e1e_1e2e_2
极线:对极平面与两个像平面的交线l1l_1l2l_2
由小孔成像模型知
s1p1=KP,s2p2=K(RP+t) s_1p_1=KP, s_2p_2=K(RP+t)
其中s1s_1s2s_2是缩放系数,如果将p1p_1p2p_2写成齐次坐标,可以写成up to scale(在某个尺度下成立)的等式
p1=KP,p2=K(RP+t) p_1=KP, p_2=K(RP+t)
像素点的相机归一化的坐标
x1=K1p1,x1=K1p2(1) x_1=K^{-1}p_1, x_1=K^{-1}p_2(1)
带入得
x2=Rx1+t x_2=Rx_1+t
t×x2=t×Rx1+t×tt\times x_2=t\times Rx_1+t\times t
两端同时左乘tt,做外积
t×x2=t×Rx1+t×tt\times x_2=t\times Rx_1+t\times t
其中t×t=0t\times t=0,两边同时左乘x2Tx_2^T
x2Tt×x2=x2Tt×Rx1x_2^T\cdot t\times x_2=x_2^T\cdot t\times Rx_1
左侧为0,得出
x2Tt×Rx1=0x_2^T\cdot t\times Rx_1=0
如果将p1,p2p_1, p_2代入得
p2TKTt×RK1p1=0p_2^TK^{-T}\cdot t\times RK^{-1}p_1=0
以上两式都叫做对极约束。令
E=t×RE=t\times RF=KTEK1F=K^{-T}EK^{-1}p2TFp1=x2TEx1=0p_2^TFp_1=x_2^TEx_1=0
其中E称为本质矩阵,F称为基础矩阵。

本质矩阵及求解

本征矩阵具有以下性质

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

三角测量

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

相关文章: