Scene planes and homographies

本章主要讲述两个摄像机和一个世界平面之间的射影几何关系. 其特殊之处主要在于三维空间中的点都处于同一个平面上. 我们假设空间有一平面π\pi, 平面上的一点为xπx_{\pi}. xπx_{\pi}分别在两幅图像PPP P'上形成了x,xx,x'. 那么我们可以从两个方面来讨论: 第一, 从对极几何的角度来说, xxPP'上决定了一条直线, 也就是极线. 极线是由xx出发的射线在PP'上投影形成的. 第二, 从单应性(homography)角度来说, xx可以在PP'上唯一确定一个点, 因为从xx出发的射线和空间平面π\pi的交点可以求出来, 也就是xπx_{\pi}, 知道了xπx_{\pi}自然可以唯一确定xx'.

13.1 单应性与平面之间的关系

本章主要讲述空间内任意的一个平面可以唯一确定单应性, 反之亦然. 需要注意的是空间内的平面不可以包括摄像机的光心, 如果包括了光心, 单应性就变成了退化的情况.

我们首先给出一个结论:

假设两个摄像机的投影矩阵分别是P=[I0],P=[Aa]P=[I|0],P'=[A|a], 空间内的平面表示为πTX=0,π=(VT,1)\pi^T X = 0, \pi=(V^T, 1), 由该平面确定的单应性就是x=Hxx'=Hx, 并且H=AavTH = A-av^T

13.1.1 单应性与对极几何的关系

假设我们从空间平面上随机选择4个点, 把他们投影到两幅图像, 就会形成4对对应点. 这四对对应点就确定了一个单硬性矩阵HH. 而且这四对对应点是满足对极几何约束的, i.e. xTFx=0x'^T F x = 0. 这种情况叫对极几何与单应性是相容的.

假设我们从第一幅图像中随机选择四个点, 第二幅图像也随机选四个点, 可以利用他们计算出一个单应性矩阵, 他们不一定能满足对极几何的约束. 这种情况叫对极几何与单应性不相容.

现在我们考虑相容的情况. 那么对应点之间可以表示为xHxx \leftrightarrow Hx, 带入对极几何的关系式, 我们就得到 (Hx)TFx=xTHTFx=0(Hx)^T F x = x^T H^T Fx = 0

根据此式我们可以得出一个结论:

单应性矩阵HH与基本矩阵FF相容当且仅当 HTFH^T F 是一个斜对称矩阵(skew-symmetric), 我们将其表达为: HTF+FTH=0H^T F + F^T H =0 HH的自由度是8-5=3

由于以上关系是一个隐性的约束, 我们接下来给出一个显式表达式.

结论 13.3

给出由两幅图像确定的基本矩阵FF, 其对应的单应性矩阵HH可以表示为H=AeVTH=A-e'V^T F=[e]×AF=[e']_\times A

引理 13.4

一个变换HH是两幅图像的单应矩阵当且仅当这两幅图像确定的FF可以分解成[e]×H[e']_\times H, ee'是第二幅图像的极点.

根据以上介绍, 我们知道单应性矩阵HH是由空间内某一平面π\pi确定的, 那么在已知HH的情况下, 我们如何求出平面π\pi? 求解方程组λH=AavT\lambda H=A-av^T就行.

13.2 从基本矩阵和图像对应点来计算单应性矩阵

在前文我们是利用空间中的平面来计算单应性矩阵. 在本节中我们直接从两幅图像中的对应元素来计算单应性矩阵. 这是因为三维空间的平面可以用三个不共线的点来计算, 或者用一条直线和一个点. 这些元素都可以直接从两幅图中的对应元素推导出来. 对应元素应该满足一些性质:

  1. 对应元素要满足对极几何的约束.
  2. 三维空间中的元素会出现退化的情况, 这是因为元素之间共面或者共线.

我们首先讨论从三个对应点来计算单应性矩阵的情况.

13.2.1 三点法

假设我们知道空间中的三个点XiX_i在两幅图像上形成的投影, 并且我们已知基本矩阵FF, 我们可以这样计算单应矩阵HH:

首先空间点XiX_i的坐标可以计算出来 (chapter12 三角化), 知道了三个点的位置, 那么他们所在的平面就可以被计算出来(3.3-p66), 已知平面就可以根据13.1节的方法来计算HH, 这种方法叫显示法

其次, 我们也可以用四个点来计算HH, 第四个点就是极点. 所以我们可以有这样的方程组: x=Hx,e=Hex'=Hx, e'=He, 这种方法叫隐式法

那么这两种方法有啥区别? 我们应该用哪一种? 答案是我们应该用显示法, 因为隐式法包含了退化的情况. 为什么呢? 因为如果有两个点和极点共线, 那么HH就算不出来了(参见4.1.3, p91). 同时, 如果点和极点几乎共线, 那么隐式法会给出一个非常差的结果. 但是显式法没有这个问题, 他可以处理点和极点共线的情况.

我们下面来形式化的表示一下.

结论13.6 给定一个基本矩阵FF和三对对应点xixix_i \leftrightarrow x'_i, 由这三对点所在平面构成的HH可以表达为: H=Ae(M1b)TH=A-e'(M^{-1}b)^T

A=[e]×FA=[e']_\times F bb是一个三维向量,每一维可以表达成

bi=(xi×(Axi))T(xi×e)/xi×e2b_i = (x'_i \times (Ax_i))^T (x'_i \times e')/||x'_i \times e'||^2

MM3×33 \times 3的矩阵, 每一行是xiTx_i^T

一致性条件 每一对对应点都会对HH增加一个约束, 该约束可以表达为: e×xi=e×Axi=Fxie' \times x'_i = e' \times Ax_i = Fx_i, 这个等式左边e×xie' \times x'_i的几何意义是通过xix'_i的极线, 右边FxiF x_i就是xix_i在第二幅图像中的极线. 所以整个式子的意思就是xix'_ixix_i对应的极线上

存在噪声的情况 一般情况下图像中都包含噪声, 那么我们就用迭代的方法来优化x,xx,x'的位置(12.1节, p318页), 然后用12.6节的极大似然估计来求3D空间点的坐标和HH

13.2.2 点和线来估计HH

本节先将线对应关系, 再讲点对应关系.

线对应 两幅图像中的对应线确定了三维空间中的一条对应线. 三维空间中的线位于一族平面上 (不是一个平面). 这一族平面对应于一族HH

结论 13.7 由一对对应直线lll \leftrightarrow l' 确定的一族平面对应了一族单应性矩阵HH, 他可以表达为

H(μ)=[l]×F+μelTH(\mu) = [l']_{\times} F + \mu e'l^T

从这个式子我们可以看出, HH只取决于μ\mu这一个参数. 我们回忆一下13.1节, HH同样有一个表达式, 该表达式是在已知两个摄像机矩阵P=K[I0],P=K[Rt]P=K[I|0],P'=K'[R|t] 和空间平面 π=(nT,d)T\pi=(n^T,d)^T的情况下给出的.

H=K(RtnT/d)K1H=K'(R-tn^T/d)K^{-1}

这个式子由三个参数决定,因为nTn^T是一个三维向量. 对比上文的两个式子, 我们可以看出由直线确定的HH只需要一个参数, 由平面确定的HH需要三个参数, 也就是说直线将参数的维度从3压缩到了1

线和点的对应 从上文我们知道线对应关系可以确定H(μ)H(\mu), 那么怎么确定μ\mu的取值呢? 我们用点对应 xxx \leftrightarrow x' 来确定

结论13.8 已知FF和一对对应点xxx \leftrightarrow x',一对对应线lll \leftrightarrow l', HH可以表达为如下式子:

H=[l]×F+(x×e)T(x×((Fx)×l))x×e2(lTx)elTH=[l']_{\times} F + \frac{(x' \times e')^T(x' \times ((Fx) \times l'))} {||x' \times e'||^2 (l^Tx)} e'l^T

应用这个公式的前提是x,xx, x'得满足对极几何约束, 那么在有噪声的情况下, 我们首先就得用算法12.1 (p318) 先优化一下.

H(μ)H(\mu)的几何解释 H(μ)H(\mu)首先满足 x=H(μ)xx=H(\mu)x'. 我们将H(μ)H(\mu)的表达式带入, 可以得到

x=H(μ)x=([l]×F+μelT)x=[l]×Fxx'=H(\mu)x = ([l']_{\times} F + \mu e'l^T)x = [l']_{\times}Fx

最后得到的结果跟μ\mu没关系, 只和FF有关系. 所以我们说对极几何为lll \leftrightarrow l'上的每一点都确定了对应关系. 这个结论很显然. 因为FF本来就是描述两幅图像上点对应关系的, 只不过现在的点都在l,ll, l'上了.

退化的单应矩阵 如果说三维空间中的平面包括了摄像机的光心, 那么HH就属于退化的情况. 在退化情况下HH就不是满秩矩阵, 如果rank(H)=2rank(H)=2, HH投影结果就是一条直线. rank(H)=1rank(H) = 1, HH投影结果就是一个点. 如果我们从H(μ)H(\mu)的情况考虑, 那么退化就可以表达成μinf\mu \rightarrow \inf或者μ0\mu \rightarrow 0

13.3 已知HH的情况下求解FF

前几章我们讲述的是已知FF, 怎么求解HH. 现在我们反过来, 求已知HH的情况下, 如何求解FF.

主要思路就是构造一个平面π\pi, XX不在π\pi上. 那么xxπ\pi有一个交点xπx_{\pi}, 该交点向PP'投影, 得到x~\tilde{x}'. x~\tilde{x}'肯定和xx'不一样, 除非XXπ\pi上. 那么我们用x~,x\tilde{x}', x' 做叉乘, 得到的线段肯定过极点ee', 再找另外一个x~\tilde{x}', 重复一遍, 就得到第二条过极点ee'的极线, 两个极线交点就是极点ee', 知道了ee', 就可以用[e]×H=F[e']_{\times} H =F 求出FF.

所以最简单的办法就是找出6对对应点, 其中有4对共面的. 用这4对点来计算HH (求解方程组xi=Hxix'_i=Hx_i), 然后用x5,x6x_5,x_6求出两条直线(Hx5)×x5(Hx_5) \times x'_5, (Hx6)×x6(Hx_6) \times x'_6, 两个直线做叉乘就是极点ee', 所以F=[e]×HF=[e']_{\times} H

投影点的深度

一个世界平面内的点X=(xT,ρ)TX=(x^T,\rho)^T 投影在第一幅图像上形成了xx, 第二幅图像上形成了x=Hx+ρex'=Hx+\rho e', 根据上一节的模型, 我们知道x,eHxx', e' Hx三点共线. ρ\rho可以被看做偏离HH相对程度的一个指标. 那么他就可以被认为是XX与平面π\pi之间的距离. ρ=0\rho=0表明XX在平面π\piρ\rho的符号就可以表明XX位于平面的哪一边.

两个平面求F

假设我们知道两个平面π1,π2\pi_1,\pi_2, 那么他们确定两个单应矩阵H1,H2H_1,H_2. 这两个单应矩阵足以确定FF, 其实他们是超定了. 我们可以构造一个矩阵H=H2H1H=H_2 H_1, 这是第一幅图像到自己的映射. 那么极点eeHH的映射下是不变的. 那么F=[e]×Hi,i=1,2,e=HieF=[e']_{\times} H_i, i=1,2, e'=H_ie, HH的另外一个性质是他有两个相同的两个特征值. 因为H1,H2H_1,H_2在空间中会相交,然后形成一条直线. 这个直线往第一幅图像中投影, 得到的投影直线在HH的映射下是不变的. 所以这个HH有一条固定的直线, 还有一个固定点(极点ee).

13.4 无穷远处的单应矩阵

定义 13.10 HH_{\infty} 是由无穷远处平面π\pi_{\infty}定义的单应矩阵.

我们回忆参数化的HH表达式 H=K(RtnT/d)K1H=K'(R-tn^T/d)K^{-1} (由三个参数确定), 那么

H=limdH=KRK1 H_{\infty} = \lim_{d \to \infty} H = K'RK^{-1}

由上式可以看出 HH_{\infty} 并不依赖于图像之间的平移, 只和旋转, 内参有关系.

如果我们考虑两幅图之间对应的点, 我们可以由下式:

x=KRK1+Kt/Z=Hx+Kt/Zx'=K'RK^{-1} + K't/Z = H_{\infty} x + K't/Z

ZZ就是点相对于第一幅图像的深度. 从上式中我们可以看出无穷远处的点(z=z=\infty)是由HH_{\infty}映射到图像上的. 如果平移tt是零, 那么我们就可以得到HH_{\infty}, 这相当与摄像机绕自己光心进行旋转. 所以如果摄像机绕自己光心进行旋转, 那么HH_{\infty}就是关于图像上任意深度点的一个单应矩阵.

如果我们考虑到e=Kte'=K't 那么x=Hx+e/zx'=H_{\infty}x+e'/z, 我们对比书中式13.9 x=Hx+ρex'=Hx+\rho e', 可以看出来1/z1/z就相当于ρ\rho, 所以说逆深度可以解释为点相对于无穷远平面$\pi_{\infty}的距离.

*消失点和消失线

无穷远处平面上的点是由HH_{\infty}映射到图像上的, 这些点就是消失点. 所以HH_{\infty}在两幅图像中的消失点v,vv', v之间建立了映射 v=Hvv'=Hv, 所以HH_{\infty}可以由三个不共线的消失点计算. 也可以由对应的消失线计算 (13.2.2节).

仿射重建和度量重建

回忆chapter 10, 知道了无穷远平面π\pi_{\infty}可以把投影重建升级成度量重建. HH_{\infty}会出现在重建过程中, 因为我们如果指定P=[I0],P=[Hλe]P=[I|0],P'=[H_{\infty}|\lambda e'], 重建过程就是仿射重建.

假设我们规定π\pi_{\infty}的坐标是(0,0,0,1)(0,0,0,1), HH_{\infty}可以直接从摄像机矩阵中来决定. 我们假设P=[M0],P=[Mt]P=[M|0], P'=[M'|t], 那么无穷远平面上的一点X=(xT,0)TX=(x^T_{\infty},0)^T就会被映射到x=PX=Mx,x=PX=Mxx=PX=Mx_{\infty}, x'=P'X=M'x_{\infty}, 所以x=MM1x'=M'M^{-1}, 那么Hinfty=MM1H_{infty} = M'M^{-1}

HH_{\infty}还可以被用来进行两个相机之间的标定. 假设π\pi_{\infty}上的绝对圆Ω\Omega_{\infty}映射在两个图像上, 分别表示为ω,ω\omega, \omega', 他们之间存在如下关系:ω=HTωH1\omega'=H_{\infty}^{-T} \omega H_{\infty}^{-1}, 那么我们如果知道ω\omega, 就可以计算ω\omega', 然后分解它, 就知道了第二个相机的内参.

立体匹配

HH_{\infty}还可以用来缩小立体匹配时极线搜索的范围. 因为xx和无穷远平面由一个交点,记为XX_{\infty}, 它往图像二上投影, 得到xx'_{\infty}, 那么与xx匹配的xx'肯定位于ee'xx'_{\infty} 之间, 所以我们不用搜索整个极线.