对极几何

两视图几何

对同一场景在两个不同的视角下观看,可以得到两张不同的图像,如图所示。
在这里插入图片描述
与此相关的几何问题即两视图几何问题

同一点在不同坐标系的表达

对于场景中的一个点 P w P_w Pw,假设它在两个视角的相机所成的图像对应像素点为 x 1 = ( x 1 1 , x 1 2 , 1 ) , x 2 = ( x 2 1 , x 2 2 , 1 ) x_1=(x^1_1,x^2_1,1),x_2=(x^1_2,x^2_2,1) x1=(x11,x12,1),x2=(x21,x22,1),则它们在归一化平面上对应的点为 X 1 = K 1 − 1 x 1 , X 2 = K 1 − 1 x 2 X_1=K_1^{-1}x_1,X_2=K_1^{-1}x_2 X1=K11x1,X2=K11x2

假设它们在两个视角下的深度为 z 1 , z 2 z_1,z_2 z1,z2,可以得到它们在局部坐标系的坐标
P c 1 = z 1 X 1 ,   P c 2 = z 2 X 2 P_{c1}=z_1X_1,~P_{c2}=z_2X_2 Pc1=z1X1, Pc2=z2X2

假设两个视角的相对位姿为 T 12 = ( R 12 , t 12 ) T_{12}=(R_{12},t_{12}) T12=(R12,t12),则两个局部坐标系下的坐标满足
P c 1 = R 12 P c 2 + t 12 P_{c1}=R_{12}P_{c2}+t_{12} Pc1=R12Pc2+t12
→ z 1 X 1 = R 12 z 2 X 2 + t 12 \to z_1X_1=R_{12}z_2X_2+t_{12} z1X1=R12z2X2+t12

极线约束

根据投影模型,场景中的同一点在不同的视角下所在的图像的像素位置存在一定的约束,这一约束称为极线约束。

实际求解问题时我们往往很难知道点在当前帧的深度,因此为了得到两帧像素点的约束,我们需要先消去 z 1 , z 2 z_1,z_2 z1,z2

在等式两边同时点乘
t 12 × X 1 t_{12}\times X_1 t12×X1

z 1 X 1 ⋅ ( t 12 × X 1 ) = ( R 12 z 2 X 2 + t 12 ) ⋅ ( t 12 × X 1 ) z_1X_1\cdot (t_{12}\times X_1)=(R_{12}z_2X_2+t_{12})\cdot(t_{12}\times X_1) z1X1(t12×X1)=(R12z2X2+t12)(t12×X1)
考虑到 t 12 × X 1 t_{12}\times X_1 t12×X1 t 12 t_{12} t12 x 1 x_1 x1都正交,只剩下

0 = ( R 12 z 2 X 2 ) ⋅ ( t 12 × X 1 ) 0=(R_{12}z_2X_2)\cdot(t_{12}\times X_1) 0=(R12z2X2)(t12×X1)

我们知道向量叉乘可以转换为矩阵乘法,即
a × b = a × b , ( a × ) = ( 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ) , a × = − ( a × ) T a\times b=a^\times b, \mathbf (a^\times)= \begin{pmatrix} 0 & -a_3 & a_2\\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{pmatrix} , a^\times = -(a^\times)^T a×b=a×b(a×)=0a3a2a30a1a2a10,a×=(a×)T
由此我们有
0 = ( R 12 z 2 X 2 ) ⋅ ( t 12 × X 1 ) = ( t 12 × X 1 ) T ( R 12 z 2 X 2 ) 0=(R_{12}z_2X_2)\cdot(t_{12}^\times X_1)=(t_{12}^\times X_1)^T(R_{12}z_2X_2) 0=(R12z2X2)(t12×X1)=(t12×X1)T(R12z2X2)
→ X 1 T t 12 × R 12 X 2 = 0 \to X_1^Tt_{12}^\times R_{12} X_2=0 X1Tt12×R12X2=0
→ x 1 T K 1 − T t 12 × R 12 K 2 − 1 x 2 = 0 \to x_1^TK_1^{-T}t_{12}^\times R_{12}K_2^{-1} x_2=0 x1TK1Tt12×R12K21x2=0

分别令 E = t 12 × R 12 E=t^\times_{12}R_{12} E=t12×R12, F = K 1 − T t 12 × R 12 K 2 − 1 F=K_1^{-T}t_{12}^\times R_{12}K_2^{-1} F=K1Tt12×R12K21

可以得到

X 1 T E X 2 = 0 X_1^TE X_2=0 X1TEX2=0
x 1 T F x 2 = 0 x_1^TF x_2=0 x1TFx2=0

前者表达了两帧对应归一化平面点所满足的约束,E称为Essential Matrix(本质矩阵)。

后者表达了两帧对应像素点所满足的约束,F称为Fundamental Matrix(基础矩阵)。

可以看到,两者之间只相差一个内参。

极线与本质矩阵

考虑
X 1 T E X 2 = 0 X_1^TE X_2=0 X1TEX2=0
其中E为3X3的矩阵,于是我们可以令向量
l = E X 2 l=EX_2 l=EX2
于是有
X 1 ⋅ l = 0 X_1\cdot l=0 X1l=0
这刚好满足点在直线上的条件,将l视为直线,则 P w P_w Pw T 1 w T_{1w} T1w下的归一化平面坐标必过直线l。对于基础矩阵有同样的性质。

自由度

由表达式
E = t 12 × R 12 E=t^\times_{12}R_{12} E=t12×R12
可知,E有最多6个自由度(t和R各三个)
考虑到
X 1 T E X 2 = 0 = X 1 T s E X 2 X_1^TE X_2=0=X_1^TsE X_2 X1TEX2=0=X1TsEX2
即乘以不同系数的E总是相同,因此E其实只有5个自由度。

通过对应点构建方程可以求出E,常用的方法有五点法和八点法,目前的视觉工具箱中均有包含,在此不多赘述。

退化与单应矩阵

∣ ∣ t 12 ∣ ∣ = 0 ||t_{12}||=0 t12=0时, F = 0 F=\mathbf 0 F=0
上面的极线约束变成
0 = 0 0=0 0=0
发生了退化。此时极线约束没有意义。
前面提到
z 1 X 1 = R 12 z 2 X 2 + t 12 z_1X_1=R_{12}z_2X_2+t_{12} z1X1=R12z2X2+t12
此时
z 1 X 1 = R 12 z 2 X 2 z_1X_1=R_{12}z_2X_2 z1X1=R12z2X2
→ z 1 K 1 − 1 x 1 = z 2 R 12 K 2 − 1 x 2 \to z_1K_1^{-1}x_1=z_2R_{12}K_2^{-1}x_2 z1K11x1=z2R12K21x2
→ x 1 = s K 1 R 12 K 2 − 1 x 2 \to x_1=sK_1R_{12}K_2^{-1}x_2 x1=sK1R12K21x2
考虑到上面是齐次坐标,s可以直接去掉。此时 x 1 x_1 x1 x 2 x_2 x2满足前面提到的单应矩阵的约束
H = K 1 R 12 K 2 − 1 H=K_1R_{12}K_2^{-1} H=K1R12K21
x 1 = H x 2 x_1=Hx_2 x1=Hx2
即纯旋转时两帧之间的关系可以用单应矩阵表示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值