3D Reconstruction of Cameras and Structure

本章主要描述了如何利用2张图片来恢复相机的参数以及物体在三维空间中的形状。

问题

第一个问题:三维空间的点 XiX_i,这是未知量。已知量是:xix_i位于第一幅图像, xix^{'}_i位于第一幅图像。而且已知xix_ixix^{'}_i是相互对应的:xixix_i \leftrightarrow x^{'}_i,他们都是XiX_i分别在第一第二幅图像上的投影点,用公式表示为:xi=PXix_i = PX_i, xi=PXix^{'}_i = P^{'}X_i 三维重建就是要找到P,PP, P^{'} 并且重建是有歧义的,歧义具体是指什么,如何消除这种歧义。这是第二个问题。

10.1 三维重建的具体过程

  1. 根据xixix_i \leftrightarrow x^{'}_i计算基本矩阵FF, 其具体过程在11章叙述
  2. 根据F求出摄像机外参R,TR,T,具体过程参见结论 9.14
  3. 根据R,TR,Txixix_i \leftrightarrow x^{'}_i 求解XiX_i,这个过程叫三角化(Triangulation),具体步骤在12章

要点三角化唯一不能确定的点就是基线上的点。因为从两个光心出发的射线互相重合了

10.2 重建中的歧义

如果我们仅仅知道若干图像,是不可能恢复出三维空间点的绝对位置。 原因如下: 我们定义相似变换HSH_S

[Rt0Tλ] \left[ \begin{matrix} R & t \\ 0^T & \lambda \\ \end{matrix} \right]

我们有PXi=(PHs1)(HsXi)PX_i = (PH^{-1}_s) (H_sX_i),因为λ\lambda是任意的,所以有很多的HsH_s可以满足前式。几何解释参见书中265页图10.2.

如果摄像机的内参也不知道,那么HH矩阵就是不相似变换了,而是投影变换,投影变换只能保持直线还是直线,但是直线之间的角度就无法保持了。

以下介绍几种不同的重建类型。

10.3 projective reconstruction

projective reconstruction的特点是相机没有标定。

结论 10.1:如果两幅图像中若干对应点已知,具体表示为xixix_i \leftrightarrow x^{'}_i,那么我们可以求出基本矩阵FF, 只需要FF就可以重建出三维空间中的点。而且任意更换相机投影矩阵,对重建没有影响,因为不同重建之间是等价的(比如第一次重建用的是P1,P1P_1,P^{'}_1,第二次重建用的是P2,P2P_2,P^{'}_2,但是点不能换,不管第一次重建还是第二次重建,都是用xixix_i \leftrightarrow x^{'}_i)具体见书266页

10.4 Stratified reconstruction

Stratified reconstruction指的是先有一个projective reconstruction, 然后再把它优化到 affine reconstruction 或者metric reconstruction。当然,需要注意的是affine 和 metric reconstruction都需要额外知道一些关于重建场景本身的信息,或者相机要被标定过。

10.4.1 affine reconstruction的具体过程。

我们现有一个project reconstruction的结果,记为(P,P,{Xi})(P,P^{'},\{X_i\})。 现在我们需要找出一个平面π\pi, 使其成为无穷远平面(0,0,0,1)(0,0,0,1)在图像上的投影。则必然存在一个HH, 满足 H1π=(0,0,0,1)H^{-1}\pi = (0,0,0,1)HH可以写成如下形式:

[I0πT]\left[ \begin{matrix} I | 0 \\ \pi^T \\ \end{matrix} \right]

找到了HH以后,把HH作用在所有重建得到的点上,就完成了affine reconstruction。affine的意思就是说把我们得到的某平面投影到无穷远处。那么如何找出(0,0,0,1)(0,0,0,1)到底映射到已知图像上的什么地方?以下给出几个例子

摄像机纯平移

简单来说就是摄像机从不同位置拍两幅图,但是摄像机本身只能有平移,不能有旋转。那么这两幅图中有一些点是没有移动的,比如月亮,比如一条延伸到无穷远处的公路。这样的话,月亮这一点的三维坐标写成XiX_i, 在两幅图像中的坐标写成xi,xix_i,x^{'}_i。这样三个点就确定了一个平面。该平面就是(0,0,0,1)(0,0,0,1)投影到拍摄图像上的结果。这两图拍摄图像对应的基本矩阵FF是一个斜对称(skew-symmetric)矩阵。

对场景增加约束

场景约束主要目的就是为了找三个在无穷远平面上的点。比方说两个平行线为一组,可以确定无穷远平面上的一个点,这样找三组就可以了。具体步骤参见12章,13章。 另外一个需要注意的是,在一副图像中找出无穷远点以后,可以利用基本矩阵找出第二幅图像中的对应点,不用重新算一遍。

第二种方法是用相交直线之间的比例关系,具体过程参见书47页

The infinite homography

当我们找出了无穷远平面(0,0,0,1)(0,0,0,1)在图像中的投影,我们实质上确定了一个映射HH_{\infty}HH_{\infty}把图像PP中的点映射到PP^{'}。具体可以表示为x=Hxix^{'} = H_{\infty}x_i

怎样求出这个HH_{\infty}? 假设我们现在有一个affine reconstruction,两个摄像机的外参表示为P=[Mm]P=[M|m], P=[Mm]P^{'}=[M^{'}|m^{'}], H=MM1H_{\infty} = M^{'}M^{-1}

HH_{\infty}还可以通过基本矩阵FF和三对无穷远点来计算,参见13章

两个摄像机中有一个是affine摄像机

在这种情况下如何求出affine reconstruction。我们有以下结论:

结论 10.4

(P,P,{Xi})(P,P^{'},\{X_i\}) 是一个projective reconstruction。 P=[I0]P=[I|0]。所以PP是一个affine 摄像机,那么affine reconstruction可以这样获得:交换P,PP,P^{'}的最后两列,交换{Xi}\{X_i\} 的最后两个坐标。

10.4.2 metric reconstruction的步骤

metric reconstruction的要点是找到absolute conic。 比较实际的做法是在图像中找到absolute conic,该conic反投影回无穷远处的平面,就变成了cone,那么这个cone就定义了无穷远处的absolute conic。

结论 10.5

假设图像中的absolute conic已知,记为ω\omega, affine reconstruction的相机外参已知,记为P=[Mm]P=[M|m], 那么affine reconstruction就可以利用一个矩阵HH变成metric reconstruction. HH如下所示

[A1001]\left[ \begin{matrix} A^{-1} & 0 \\ 0 & 1 \\ \end{matrix} \right]

其中AA 满足 AA1=(MTωM)1AA^{-1} = (M^{T}\omega M)^{-1}

我们可以把上式右边用Cholesky factorization处理,就可以得到AA

那么接下来的问题就是如何找到图像中的absolute conic? (用ω\omega来表示该conic)。 我们可以对该conic施加一些约束,然后再求解它。有这么几个约束:

  1. 被重建场景中的正交性 消失点v1,v2v_1,v_2分别来自两个正交的直线,那么他们满足 v1Tωv2=0v_1^{T} \omega v_2 = 0 确定一个conic需要五个参数,那么找三对v1,v2v_1,v_2就可以解出这个方程。或者 v1,v2v_1,v_2分别来自一条直线和一个平面(直线与平面正交)。 则他们满足 l=ωvl=\omega v

  2. 相机内参 因为ω=KTK1\omega = K^{-T}K^{-1}

  3. 根据上一条约束,我们知道ω\omega只和相机内参有关系,跟外参没关系。那么我们可以用同一个相机在两个不同位置拍摄。这个过程可以表示为 ω=HTωH1\omega^{'} = H^{-T}_{\infty} \omega H^{-1}_{\infty}。 找出足够多的 HH_{\infty} 也可以解出这个方程

10.4.3 直接利用ω\omega重建

我们有一个projective reconstruction,我们还知道ω\omega, 把ω\omega在无穷远平面上的位置记为Ω\Omega_{\infty}, 然后ω\omega所在的平面记为π\pi_{\infty}。那么从ω\omegaΩ\Omega_{\infty}的矩阵就可以求解出来,参见书342页练习题(x),知道这个矩阵,把它作用在projective的重建结果上,就得到了metric 重建的结果。

10.5 利用ground truth重建

假设我们知道一些三维点的gt,记为XEiX_{Ei}, 重建出来的点记为XiX_i,那么他们满足XEi=HXiX_{Ei} = HX_i,因为前文说过重建时有歧义的。我们把XiX_i替换为图像中的点xix_i, 那么就有xi=PH1XEix_i = PH^{-1}X_{Ei},找出足够多的点,解这个方程就可以了。当我们知道了HH,就可以HH乘到相机矩阵P,PP,P^{'}上,这样projective重建就变成了真实的三维坐标。

总结

参见书277页