从二维图像到三维重建:由运动到结构(SfM)的完整流程推导【含数学原理及推导】
结构从运动(SfM)- 稀疏特征点的3D重建
1. 引言
由运动到结构(Structure from Motion, SfM)是一种从二维图像序列中恢复三维结构和相机运动的技术。在SfM中,通过分析图像中稀疏的特征点,我们可以估计出相机在拍摄过程中经历的姿态变化,并重建出场景的三维几何结构。COLMAP等常用的SfM工具能够从大量照片中提取稀疏或密集的三维模型,这些模型在考古、建筑、虚拟现实等领域具有重要应用。
1.1 定义
运动(Motion):相机的姿态,即相机在空间中的位置和方向,通过旋转矩阵(R)和位移向量(t)描述。运动信息的恢复帮助我们确定相机在拍摄不同图像时的相对位置和视角。结构(Structure):物体的三维几何形状,通常是场景的三维点云。通过对多张图像的分析,SfM可以生成稀疏的三维点云模型,甚至可以在进一步的多视图立体视觉(Multi-View Stereo, MVS)处理中生成更为密集的模型。
1.2 SfM的应用示例
稀疏重建:图示中COLMAP的SfM模块使用约21,000张照片重建了罗马中央区域的稀疏模型,展示了场景的主要结构和特征点分布。稀疏模型主要用于相机位姿估计和初步的三维结构呈现。密集重建:通过COLMAP的多视图立体视觉(MVS)模块,可以在稀疏模型的基础上生成更高分辨率的密集模型。图示中展示了使用MVS技术重建的复杂场景,使得细节更加清晰。这种密集模型在需要高精度三维信息的场景中非常有用,例如虚拟旅游或文化遗产保护等。
2. 输入与输出
输入:一组至少包含两张的二维图像序列,图像间需要有足够的视角变化,以便提取出有效的三维信息。图像中应包含可辨认的、相互对应的特征点,这些特征点用于关联图像之间的空间关系。输出:
相机的三维运动参数:包括相机的旋转矩阵 RRR 和位移向量 ttt ,用于表示相机在三维空间中的位置和方向。物体的三维结构:即场景中的三维点云,代表场景的几何特征。根据所采用的算法,SfM可以输出稀疏或密集的点云结构。
通过这些输入输出,SfM从二维图像序列中构建了一个完整的三维模型。在实践中,SfM流程包括关键点检测、特征匹配、三角测量、运动估计和光束平差等步骤,进一步优化了重建精度。
3. 三角测量(Triangulation)
三角测量是结构从运动(SfM)中的关键步骤,核心任务是根据多个相机视角的观察结果,推算出三维空间中某个点的位置。
正如图中所示,三角测量通过在不同相机位置和角度下观察到的图像特征点,重建出物体的三维空间位置。这一过程在多视图重建中尤为重要,通常用于计算每个特征点在三维空间中的精确坐标。
3.1 问题描述
在图中,ppp表示三维空间中的点,而c1c_1c1、c2c_2c2、c3c_3c3分别为三个不同的相机位置,每个相机具有不同的姿态(Rj,tj)(R_j, t_j)(Rj,tj)。x1x_1x1、x2x_2x2和x3x_3x3是该点 ppp 在不同视图下的投影,即在图像平面上的对应位置。
三角测量的任务就是从这些已知的图像点(xj)(x_j)(xj)和相机姿态(Rj,tj)(R_j, t_j)(Rj,tj)中,反推出该空间点ppp的三维坐标。
3.2 投影方程与矩阵表示
在三角测量中,我们可以通过投影方程将三维点 ppp 映射到图像平面上的点 xjx_jxj。对于每一个视图 jjj,投影方程表示为:
xj=Pjp
x_j = P_j p
xj=Pjp
其中:
xjx_jxj 是空间点 ppp 在第 jjj 个图像上的投影坐标。PjP_jPj 是第 jjj 个相机的投影矩阵,包含内参矩阵和外参矩阵的组合,具体表示为 Pj=Kj[Rj∣tj]P_j = K_j [R_j | t_j]Pj=Kj[Rj∣tj]。其中,KjK_jKj 为相机的内参矩阵,定义了相机的焦距和光心位置等参数;[Rj∣tj][R_j | t_j][Rj∣tj] 为外参矩阵,描述相机的旋转和平移。
在实际计算中,PjpP_j pPjp 通常以矩阵的形式展开,具体为:
Pjp=[p00jp01jp02jp03jp10jp11jp12jp13jp20jp21jp22jp23j][XYZ1]
P_j p = \begin{bmatrix} p_{00}^j & p_{01}^j & p_{02}^j & p_{03}^j \\ p_{10}^j & p_{11}^j & p_{12}^j & p_{13}^j \\ p_{20}^j & p_{21}^j & p_{22}^j & p_{23}^j \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix}
Pjp=p00jp10jp20jp01jp11jp21jp02jp12jp22jp03jp13jp23jXYZ1
其中:
X,Y,ZX, Y, ZX,Y,Z 是需要求解的空间点 ppp 的三维坐标。齐次坐标的最后一项 111 允许我们处理仿射变换。
3.3 齐次坐标与归一化
在三角测量中,我们通常将图像平面上的点 xjx_jxj 表示为齐次坐标 (xj′,yj′,1)(x_j', y_j', 1)(xj′,yj′,1)。齐次坐标是一种在计算机视觉和图形学中常用的表示方式,特别适用于处理仿射变换和透视投影。它允许我们在相机投影矩阵中 统一处理 平移和缩放变换 。
当图像坐标 xjx_jxj 被映射到三维空间时,我们得到的坐标可能不在归一化平面上,而是一个带有深度(或尺度)因子的坐标表示。我们可以将这个图像坐标进一步处理为归一化坐标,使其与相机坐标系直接关联,简化后续的计算过程。
归一化坐标定义如下:
xj=1zj[xj′yj′1]
x_j = \frac{1}{z_j} \begin{bmatrix} x_j' \\ y_j' \\ 1 \end{bmatrix}
xj=zj1xj′yj′1
其中,zjz_jzj 是一个深度因子,用于归一化图像坐标。归一化坐标的主要作用是将图像坐标映射到归一化平面上(通常为 z=1z = 1z=1 的平面),使得我们能够忽略相机的尺度变化,将坐标表示与三维空间位置直接关联。
根据图片内容,我对“3.4 解析求解三维坐标”部分进行了修改和扩展,以便更详细地解释求解过程。
3.4 解析求解三维坐标
在前面的步骤中,我们通过齐次坐标和归一化,将图像上的投影点 xjx_jxj 表示为三维点 ppp 的函数形式。现在,我们可以利用多个视角中的投影点,构建方程组来反推出空间点 ppp 的三维坐标 (X,Y,Z)(X, Y, Z)(X,Y,Z)。
从投影方程到具体约束关系
对于每一个视图 jjj,三维点 ppp 投影到图像平面上的点 xj=(xj′,yj′,1)x_j = (x_j', y_j', 1)xj=(xj′,yj′,1),其关系由如下的投影方程给出:
xj=Pjp
x_j = P_j p
xj=Pjp
其中,PjP_jPj 是相机的投影矩阵,由内参和外参矩阵组成。为了更明确地表达投影过程,我们将 PjpP_j pPjp 展开为矩阵形式:
Pjp=[p00jp01jp02jp03jp10jp11jp12jp13jp20jp21jp22jp23j][XYZ1]=[xj′yj′zj′]
P_j p = \begin{bmatrix} p_{00}^j & p_{01}^j & p_{02}^j & p_{03}^j \\ p_{10}^j & p_{11}^j & p_{12}^j & p_{13}^j \\ p_{20}^j & p_{21}^j & p_{22}^j & p_{23}^j \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix}
= \begin{bmatrix} x_j' \\ y_j' \\ z_j' \end{bmatrix}
Pjp=p00jp10jp20jp01jp11jp21jp02jp12jp22jp03jp13jp23jXYZ1=xj′yj′zj′
其中,xj′x_j'xj′ 和 yj′y_j'yj′ 是点 ppp 在第 jjj 个图像平面上的坐标,zj′z_j'zj′ 是归一化因子,用于调整坐标比例。
归一化投影方程
为了求解出图像平面上的点坐标 (xj′,yj′)(x_j', y_j')(xj′,yj′),我们需要将 zj′z_j'zj′ 归一化,使得
xj=1zj′[xj′yj′1]=[xj′zj′yj′zj′]=[xjyj]
x_j = \frac{1}{z_j'} \begin{bmatrix} x_j' \\ y_j' \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{x_j'}{z_j'} \\ \frac{y_j'}{z_j'} \end{bmatrix} = \begin{bmatrix} x_j \\ y_j \end{bmatrix}
xj=zj′1xj′yj′1=zj′xj′zj′yj′=[xjyj]
从图像点构建方程约束
将每个视图的归一化投影方程展开,可以得到以下方程组:
xj′=p00jX+p01jY+p02jZ+p03jp20jX+p21jY+p22jZ+p23j
x_j' = \frac{p_{00}^j X + p_{01}^j Y + p_{02}^j Z + p_{03}^j}{p_{20}^j X + p_{21}^j Y + p_{22}^j Z + p_{23}^j}
xj′=p20jX+p21jY+p22jZ+p23jp00jX+p01jY+p02jZ+p03j
yj′=p10jX+p11jY+p12jZ+p13jp20jX+p21jY+p22jZ+p23j
y_j' = \frac{p_{10}^j X + p_{11}^j Y + p_{12}^j Z + p_{13}^j}{p_{20}^j X + p_{21}^j Y + p_{22}^j Z + p_{23}^j}
yj′=p20jX+p21jY+p22jZ+p23jp10jX+p11jY+p12jZ+p13j
其中:
xj′x_j'xj′ 和 yj′y_j'yj′ 是图像平面上的已知坐标。pmnjp_{mn}^jpmnj 是第 jjj 个相机的投影矩阵 PjP_jPj 中的已知参数。(X,Y,Z)(X, Y, Z)(X,Y,Z) 是需要求解的空间点 ppp 的三维坐标。
3.5 使用最小二乘法求解 ppp
由于噪声和测量误差的存在,上述方程组可能无法完全精确地满足。因此,我们可以通过最小二乘法来求解 (X,Y,Z)(X, Y, Z)(X,Y,Z),以最小化所有投影点的重投影误差,从而获得点 ppp 的最佳三维坐标估计。
优化目标是使得所有投影点的重投影误差最小化:
minp∑j∣∣xj−Pjp∣∣2
\min_p \sum_j ||x_j - P_j p||^2
pminj∑∣∣xj−Pjp∣∣2
其中 ∣∣xj−Pjp∣∣||x_j - P_j p||∣∣xj−Pjp∣∣ 表示实际投影点与预测投影点之间的差距。通过最小化该差距,可以得到一个最优的三维点位置 ppp。
具体优化目标如下:
minX,Y,Z∑j(∥xj′−p00jX+p01jY+p02jZ+p03jp20jX+p21jY+p22jZ+p23j∥2+∥yj′−p10jX+p11jY+p12jZ+p13jp20jX+p21jY+p22jZ+p23j∥2)
\min_{X, Y, Z} \sum_j \left( \left\| x_j' - \frac{p_{00}^j X + p_{01}^j Y + p_{02}^j Z + p_{03}^j}{p_{20}^j X + p_{21}^j Y + p_{22}^j Z + p_{23}^j} \right\|^2 + \left\| y_j' - \frac{p_{10}^j X + p_{11}^j Y + p_{12}^j Z + p_{13}^j}{p_{20}^j X + p_{21}^j Y + p_{22}^j Z + p_{23}^j} \right\|^2 \right)
X,Y,Zminj∑xj′−p20jX+p21jY+p22jZ+p23jp00jX+p01jY+p02jZ+p03j2+yj′−p20jX+p21jY+p22jZ+p23jp10jX+p11jY+p12jZ+p13j2
通过最小化该重投影误差,我们能够获得三维点 ppp 的一个最优解,从而在多个视角的约束下得到稳定的三维坐标。
4. 二视图由运动到结构(Two-frame SfM)
在只有两张图像的情况下,我们可以通过分析图像中的对应特征点,恢复场景的三维结构和相机之间的相对运动参数(旋转和平移)。这种方法依赖于对极几何(Epipolar Geometry)关系,通过两幅图像中的几何约束来确定三维空间点的位置及相机的运动。
4.1 极线约束与对极几何
对极几何(Epipolar Geometry)是描述两台相机成像时的几何关系的关键工具。它定义了一个视图中的点如何在另一个视图中关联,通过对极几何的约束,可以减少匹配点的搜索空间。这种几何关系的主要组成部分包括极平面、极线和极点。
在图中,我们可以清晰地看到对极几何的基本结构。
极平面(Epipolar Plane):极平面是由三维空间点 ppp 和两个相机中心 c0c_0c0、c1c_1c1 共同定义的平面。在图中,黄色的三角形区域即为极平面。对于空间点 ppp 的位置,它的投影在左视图为 x0x_0x0,在右视图为 x1x_1x1。由于 ppp、c0c_0c0 和 c1c_1c1 三点共面,所以 x0x_0x0 和 x1x_1x1 必然位于极平面内。
极线(Epipolar Line):极线是极平面与图像平面的交线。在左视图中,ppp 的投影点 x0x_0x0 会在右视图中对应一条极线 l1l_1l1(如图中的红色线条所指向的直线)。这个极线表示 x0x_0x0 在右视图中的可能投影范围,即 x1x_1x1 必然位于极线 l1l_1l1 上。同样地,右视图中的投影点 x1x_1x1 会在左视图中对应一条极线 l0l_0l0,约束 x0x_0x0 的位置。这种极线约束使得给定一个视图中的特征点,只需在另一个视图中的对应极线上寻找匹配点,而不需要遍历整个图像平面,从而简化了特征点匹配的问题。
极点(Epipole):极点是相机中心在另一视图中的投影点。具体来说,左视图中的极点 e1e_1e1 是右相机中心 c1c_1c1 在左视图中的投影点;右视图中的极点 e0e_0e0 则是左相机中心 c0c_0c0 在右视图中的投影点。所有极线都会通过极点,因此极点是所有极线的交汇点和汇聚点。在图中,e0e_0e0 和 e1e_1e1 分别位于左图和右图的底部,它们通过极线连接了两个视图中的对应点。极点的存在性进一步强化了对极几何约束,使得点的匹配只需沿极线进行搜索。
4.2 本质矩阵推导
在两视图结构从运动(SfM)中,本质矩阵(Essential Matrix)用于描述两幅图像中对应点之间的几何关系。通过本质矩阵,我们可以利用对极几何约束,推导出相机的相对旋转和平移信息,从而恢复三维结构。下面是详细的推导步骤:
射线方向与反投影操作
对于左视图和右视图中的对应点 x0x_0x0 和 x1x_1x1,我们可以通过 反投影 操作将它们映射到相机坐标系中的射线方向向量。
具体来说,xj^=Kj−1xj\hat{x_j} = K_j^{-1} x_jxj^=Kj−1xj 表示将图像平面上的点 xjx_jxj 反投影为相机坐标系下的射线方向向量 xj^\hat{x_j}xj^,其中 xj^\hat{x_j}xj^ 是单位长度为1的向量。
空间点的表示
设三维空间中的点 ppp 的位置为:
在左视图中,p0=d0x0^p_0 = d_0 \hat{x_0}p0=d0x0^,其中 d0d_0d0 表示从左相机中心 c0c_0c0 到点 ppp 的距离。在右视图中,p1=d1x1^p_1 = d_1 \hat{x_1}p1=d1x1^,其中 d1d_1d1 表示从右相机中心 c1c_1c1 到点 ppp 的距离。
这两个位置通过相机的相对运动联系起来,先将点 p0p_0p0 在左相机坐标系中的坐标通过旋转矩阵 RRR 旋转到右相机的方向上,然后再进行平移 ttt,以得到该点在右相机坐标系中的位置 p1p_1p1,因此我们可以表示为:
p1=Rp0+t
p_1 = R p_0 + t
p1=Rp0+t
其中 RRR 表示从左相机到右相机的旋转矩阵,ttt 为平移向量。
RRR 是一个 3×33 \times 33×3 的旋转矩阵,它表示从左相机坐标系到右相机坐标系的旋转。ttt 是一个 3×13 \times 13×1 的平移向量,它表示从左相机坐标系到右相机坐标系的位移。
代入 p0=d0x0^p_0 = d_0 \hat{x_0}p0=d0x0^ 和 p1=d1x1^p_1 = d_1 \hat{x_1}p1=d1x1^,得到:
d1x1^=R(d0x0^)+t
d_1 \hat{x_1} = R (d_0 \hat{x_0}) + t
d1x1^=R(d0x0^)+t
使用叉乘消去平移向量
为了消去平移向量 ttt,我们可以在等式两侧同时对 ttt 进行叉乘,得到:
d1[t]x1^=d0[t]Rx0^
d_1 [t] \hat{x_1} = d_0 [t] R \hat{x_0}
d1[t]x1^=d0[t]Rx0^
其中 [t][t][t] 是 ttt 的叉乘矩阵(skew symmetric matrix),定义为:
[t]=[0−tztytz0−tx−tytx0]
[t] = \begin{bmatrix} 0 & -t_z & t_y \\ t_z & 0 & -t_x \\ -t_y & t_x & 0 \end{bmatrix}
[t]=0tz−ty−tz0txty−tx0
这个叉乘矩阵的作用是将平移向量 ttt 转换为一个线性变换,方便用于矩阵运算。
两侧同时点乘 x1^T\hat{x_1}^Tx1^T
为了进一步简化方程,我们在两侧同时点乘 x1^T\hat{x_1}^Tx1^T,得到:
d0x1^T([t]R)x0^=d1x1^T([t]x1^)=0
d_0 \hat{x_1}^T ([t] R) \hat{x_0} = d_1 \hat{x_1}^T ([t] \hat{x_1}) = 0
d0x1^T([t]R)x0^=d1x1^T([t]x1^)=0
由于 x1^\hat{x_1}x1^ 与 [t]x1^[t] \hat{x_1}[t]x1^ 垂直,右侧的表达式为零,左侧可简化为:
x1^TEx0^=0
\hat{x_1}^T E \hat{x_0} = 0
x1^TEx0^=0
其中,E=[t]RE = [t] RE=[t]R 被称为本质矩阵(Essential Matrix)。
4.3 本质矩阵的意义
本质矩阵 EEE 是一个 3×33 \times 33×3 的矩阵,它在已知相机内参的情况下,将左视图中的点 x0^\hat{x_0}x0^ 映射到右视图中的极线 l1l_1l1 上,满足对极几何的极线约束关系。这意味着,给定左视图中的一个点 x0^\hat{x_0}x0^,它在右视图中的对应点 x1^\hat{x_1}x1^ 必须位于极线 l1l_1l1 上,而本质矩阵 EEE 就编码了这种几何约束。
本质矩阵的几何解释
极线约束:对于左视图中的一个点 x0^\hat{x_0}x0^,它在右视图中的对应极线 l1l_1l1 可以通过本质矩阵 EEE 来计算。具体而言,右视图中的极线 l1l_1l1 可以表示为 l1=Ex0^l_1 = E \hat{x_0}l1=Ex0^。这条极线 l1l_1l1 是在右视图中与左视图中的点 x0^\hat{x_0}x0^ 相关联的所有可能对应点的集合,满足极线约束。
约束方程:由于右视图中的对应点 x1^\hat{x_1}x1^ 必须位于极线 l1l_1l1 上,我们有 x1^Tl1=0\hat{x_1}^T l_1 = 0x1^Tl1=0。将 l1l_1l1 表示为 Ex0^E \hat{x_0}Ex0^,得到:
x1^TEx0^=0
\hat{x_1}^T E \hat{x_0} = 0
x1^TEx0^=0
这个约束方程表明,对于任何对应点对 (x0^,x1^)(\hat{x_0}, \hat{x_1})(x0^,x1^),都应该满足该关系式。这个方程本质上表明了在两个视图中,对应点之间的几何关系通过本质矩阵 EEE 来表示。
归一化平面中的点:在相机坐标系下的点 x0^\hat{x_0}x0^ 和 x1^\hat{x_1}x1^ 可以看作归一化平面上的点,即它们的坐标经过相机内参的归一化后位于单位平面上。这种归一化操作确保了本质矩阵 EEE 仅依赖于相机的相对运动(旋转和平移),而不依赖于相机的内在参数。
4.4 本质矩阵的求解
为了求解本质矩阵 EEE,我们可以通过点对的几何约束来构建线性方程组。假设有匹配点对 (x0^,x1^)(\hat{x_0}, \hat{x_1})(x0^,x1^),其中
x0^=(x0,y0,1)T,x1^=(x1,y1,1)T
\hat{x_0} = (x_0, y_0, 1)^T, \quad \hat{x_1} = (x_1, y_1, 1)^T
x0^=(x0,y0,1)T,x1^=(x1,y1,1)T
它们在两幅图像中的坐标分别为 (x0,y0)(x_0, y_0)(x0,y0) 和 (x1,y1)(x_1, y_1)(x1,y1)。
构建极线约束方程
根据极线约束的定义,我们有:
x1^TEx0^=0
\hat{x_1}^T E \hat{x_0} = 0
x1^TEx0^=0
将 EEE 展开为矩阵元素 e0,e1,…,e8e_0, e_1, \ldots, e_8e0,e1,…,e8 的形式:
E=[e0e1e2e3e4e5e6e7e8]
E = \begin{bmatrix} e_0 & e_1 & e_2 \\ e_3 & e_4 & e_5 \\ e_6 & e_7 & e_8 \end{bmatrix}
E=e0e3e6e1e4e7e2e5e8
代入后得到方程:
[x1y11][e0e1e2e3e4e5e6e7e8][x0y01]=0
[x_1 y_1 1] \begin{bmatrix} e_0 & e_1 & e_2 \\ e_3 & e_4 & e_5 \\ e_6 & e_7 & e_8 \end{bmatrix} \begin{bmatrix} x_0 \\ y_0 \\ 1 \end{bmatrix} = 0
[x1y11]e0e3e6e1e4e7e2e5e8x0y01=0
展开后得到一个线性方程:
x1x0e0+x1y0e1+x1e2+y1x0e3+y1y0e4+y1e5+x0e6+y0e7+e8=0
x_1 x_0 e_0 + x_1 y_0 e_1 + x_1 e_2 + y_1 x_0 e_3 + y_1 y_0 e_4 + y_1 e_5 + x_0 e_6 + y_0 e_7 + e_8 = 0
x1x0e0+x1y0e1+x1e2+y1x0e3+y1y0e4+y1e5+x0e6+y0e7+e8=0
将方程写成向量形式
将上式写成向量的形式,我们可以得到:
[x1x0,x1y0,x1,y1x0,y1y0,y1,x0,y0,1]⋅[e0e1e2e3e4e5e6e7e8]=0
[x_1 x_0, x_1 y_0, x_1, y_1 x_0, y_1 y_0, y_1, x_0, y_0, 1] \cdot \begin{bmatrix} e_0 \\ e_1 \\ e_2 \\ e_3 \\ e_4 \\ e_5 \\ e_6 \\ e_7 \\ e_8 \end{bmatrix} = 0
[x1x0,x1y0,x1,y1x0,y1y0,y1,x0,y0,1]⋅e0e1e2e3e4e5e6e7e8=0
记为:
Ae=0
Ae = 0
Ae=0
其中 AAA 是由匹配点对 (x0^,x1^)(\hat{x_0}, \hat{x_1})(x0^,x1^) 构成的矩阵,而 eee 是本质矩阵 EEE 展开的 9 个未知量。
利用多个点对求解 EEE
在一般情况下,我们至少需要 8 对匹配点 (x0^,x1^)(\hat{x_0}, \hat{x_1})(x0^,x1^) 才能构成一个可求解的方程组,因此称为 8 点法。将这些匹配点代入后,可以得到一个关于 eee 的超定方程组:
Ae=0
A e = 0
Ae=0
为了唯一地确定 EEE,我们通常假设 e8=1e_8 = 1e8=1,从而减少一个自由度,使得方程组可以求解。
恢复平移和旋转
求解出本质矩阵 EEE 后,可以通过奇异值分解(SVD)进一步提取平移和旋转信息。对 EEE 进行 SVD 分解:
E=UΣVT
E = U \Sigma V^T
E=UΣVT
其中 UUU 和 VVV 是正交矩阵,Σ\SigmaΣ 是奇异值矩阵。根据对极几何的性质,最小奇异值对应的奇异向量就是平移方向向量 t^\hat{t}t^。
从 SVD 分解中可以得到平移向量的方向 t^\hat{t}t^。在已知 EEE 和 t^\hat{t}t^ 的情况下,可以恢复旋转矩阵 RRR。
4.5 本质矩阵的作用与应用
本质矩阵 EEE 在对极几何中起着重要作用,除了用于计算相机的外参(旋转和平移)之外,还具有以下几个关键应用:
映射作用:本质矩阵 EEE 可以将左视图中的一个点 x0^\hat{x_0}x0^ 映射到右视图中的极线 l1l_1l1。换句话说,通过 EEE 的映射,我们可以确定在右视图中所有可能对应于 x0^\hat{x_0}x0^ 的点必须位于极线 l1l_1l1 上。这种映射作用大大简化了在右视图中寻找对应点的任务,因为我们只需在极线上搜索,而不是在整个图像中进行遍历。这一特性使得匹配问题更加高效。
对极几何约束:本质矩阵 EEE 编码了两个相机的相对位置和方向信息,使得任何一对对应点 (x0^,x1^)(\hat{x_0}, \hat{x_1})(x0^,x1^) 都满足极线约束关系,即 x1^TEx0^=0\hat{x_1}^T E \hat{x_0} = 0x1^TEx0^=0。这种几何约束在立体视觉和三维重建中尤为重要,因为它允许我们在没有深度信息的情况下,推导出图像之间点对的关系。
错误匹配检测:本质矩阵还可以用于检测错误的匹配点。如果给定的一对点 (x0^,x1^)(\hat{x_0}, \hat{x_1})(x0^,x1^) 不满足极线约束 x1^TEx0^=0\hat{x_1}^T E \hat{x_0} = 0x1^TEx0^=0,则可以判断这对点的匹配关系可能是错误的,从而提高匹配精度。
总结
本质矩阵 EEE 是对极几何的核心元素之一,它将一幅图像中的点映射到另一幅图像中的极线上,确保了对应点满足极线约束。通过本质矩阵的约束关系,我们能够从两个视图中恢复相机的相对运动(旋转和平移),并实现三维重建。
5. 基础矩阵(Fundamental Matrix)
在实际的立体视觉任务中,通常我们需要相机的内参矩阵 KKK 来计算射线方向向量 xj^=Kj−1xj\hat{x_j} = K_j^{-1} x_jxj^=Kj−1xj,从而进行本质矩阵 EEE 的求解。然而,在许多实际场景中(例如基于网络照片或老旧照片进行三维重建时),相机的内参可能是未知的。在这种情况下,无法直接计算本质矩阵,我们转而使用基础矩阵 FFF。
5.1 基础矩阵的定义
当相机内参未知时,基础矩阵 FFF 用于描述图像坐标系中的点对应关系。与本质矩阵不同,基础矩阵 FFF 是一个通用的 3×33 \times 33×3 矩阵,它直接作用于像素坐标之间的映射,无需已知内参矩阵 KKK。
对于图像坐标系下的点 x0^\hat{x_0}x0^ 和 x1^\hat{x_1}x1^,基础矩阵 FFF 满足如下极线约束关系:
x1^TFx0^=0
\hat{x_1}^T F \hat{x_0} = 0
x1^TFx0^=0
其中,x0^\hat{x_0}x0^ 和 x1^\hat{x_1}x1^ 是在左、右图像中对应的归一化像素坐标。
5.2 基础矩阵的推导与计算
当相机的内参矩阵未知时,我们可以通过以下变换,将本质矩阵 EEE 转化为基础矩阵 FFF:
F=K1−TEK0−1
F = K_1^{-T} E K_0^{-1}
F=K1−TEK0−1
其中:
K0K_0K0 和 K1K_1K1 分别是左、右相机的内参矩阵(若已知)。EEE 是本质矩阵。
在这种情况下,基础矩阵 FFF 代替了本质矩阵,直接描述了图像坐标系下的对应点关系。
5.3 基础矩阵的几何意义
基础矩阵 FFF 的几何意义在于,它能够将左图像中的任意点 x0^\hat{x_0}x0^ 映射为右图像中的一条极线 l1=Fx0^l_1 = F \hat{x_0}l1=Fx0^。对于给定的 x0^\hat{x_0}x0^,它在右图像中的对应点 x1^\hat{x_1}x1^ 必须位于极线 l1l_1l1 上,这使得两幅图像中的对应关系满足极线约束 x1^TFx0^=0\hat{x_1}^T F \hat{x_0} = 0x1^TFx0^=0。
基础矩阵提供了一个无内参情况下的几何约束关系,在没有相机内参的情况下,基础矩阵可以直接用于:
描述两幅图像中对应点的关系:基础矩阵是图像平面内的一种几何描述,它与相机的具体内参无关。简化匹配搜索:利用极线约束,基础矩阵 FFF 将左图中的点映射到右图中的极线,大大缩小了匹配点的搜索范围。
5.4 基础矩阵的应用
匹配点对的约束:当我们在图像间寻找匹配点对时,基础矩阵提供了一个强约束,使得给定的一个点在另一幅图像中只需在极线上搜索,大大简化了匹配过程。三维重建:尽管基础矩阵无法直接提供深度信息,但它可以作为三维重建的初始几何约束条件,结合多视角信息来逐步恢复三维结构。
综上所述,基础矩阵 FFF 是在未知相机内参情况下的一种描述图像点对应关系的工具。它通过极线约束将左图像中的点映射到右图像中的极线,为无内参的立体视觉任务提供了必要的几何基础。
根据当前图片内容,我对“光束平差法(Bundle Adjustment)”部分进行了扩展。
6. 光束平差法(Bundle Adjustment)
光束平差(Bundle Adjustment)是一种在计算机视觉和立体重建中广泛应用的优化技术,其目标是通过最小化重投影误差来优化相机参数和三维点的位置。该方法可以确保最终重建的三维结构具有更高的精度和一致性。
6.1 光束平差的目标
在多视图重建中,我们通常会从不同视角观测到同一个三维点,这些观测点存在于不同图像上。设:
XjX_jXj 表示第 jjj 个三维点的空间坐标。PiP^iPi 表示第 iii 个相机的投影矩阵(包括相机的内参和外参)。xjix_j^ixji 表示第 iii 个图像上第 jjj 个三维点 XjX_jXj 的观测坐标。
在理想情况下,投影点 PiXjP^i X_jPiXj 应该与实际观测到的点 xjix_j^ixji 完全一致。然而,由于噪声和测量误差的影响,重建结果往往存在一定偏差。光束平差的目的是通过调整相机参数 PiP^iPi 和三维点坐标 XjX_jXj,来最小化这种偏差,即最小化重投影误差。
6.2 光束平差的优化目标
光束平差通过最小化以下目标函数来进行优化:
minPi,Xj∑i,jd(PiXj,xji)2
\min_{P^i, X_j} \sum_{i,j} d(P^i X_j, x_j^i)^2
Pi,Xjmini,j∑d(PiXj,xji)2
其中:
d(PiXj,xji)d(P^i X_j, x_j^i)d(PiXj,xji) 表示投影点 PiXjP^i X_jPiXj 与观测点 xjix_j^ixji 之间的距离(即重投影误差)。优化变量包括相机的投影矩阵 PiP^iPi 和三维点的位置 XjX_jXj。
目标是找到一组最优的 PiP^iPi 和 XjX_jXj,使得所有图像中的观测点与重建点之间的重投影误差之和最小。
6.3 光束平差的意义
精度提高:光束平差通过迭代优化,减少了相机投影点与实际观测点之间的偏差,从而提升了三维重建的精度。一致性增强:在多视图条件下,每个三维点通常会被多个相机观测到。光束平差通过全局优化,确保每个三维点在所有视图中的位置一致,从而提高了重建结果的整体一致性。应用广泛:光束平差方法不仅在立体视觉中广泛应用,还被用于各种三维重建和场景理解任务中。
7. SfM 流程总结
结构从运动(Structure from Motion, SfM)是一种从多张二维图像中重建三维场景结构的技术。该过程依赖于多视角之间的几何关系,逐步估计相机的姿态并重建三维点。以下是 SfM 的主要流程:
关键点检测(Keypoint Detection):
从多张图像中提取关键点(如图中的雕塑)。这些关键点通常是图像中具有显著特征的点,例如角点或纹理丰富的区域。关键点的提取有助于在不同视图中进行匹配。
关键点匹配(Matching Keypoints):
在不同的图像之间对关键点进行匹配,找到在不同视图中对应的点对。这些匹配的点对为后续的几何推导奠定基础。通过匹配,可以确定哪些点在多幅图像中是相同的三维点的投影。
基础矩阵计算(Fundamental Matrix Calculation):
使用匹配到的关键点对,计算基础矩阵 FFF。基础矩阵 FFF 描述了两个图像之间的几何约束关系,而不依赖于相机的内参。这一矩阵可以将一个图像中的点映射到另一个图像的极线上,定义了视图间的点对几何约束。
本质矩阵计算(Essential Matrix Calculation):
在相机的内参已知的情况下,将基础矩阵 FFF 转换为本质矩阵 EEE。本质矩阵包含了两台相机之间的相对旋转和平移信息。它不仅描述了点在两幅图像之间的几何关系,还体现了相机的相对姿态。
相机位姿恢复([R|t] Decomposition):
从本质矩阵 EEE 中分解出相机的相对位姿,即旋转矩阵 RRR 和平移向量 ttt。这些参数描述了相机在三维空间中的相对位置和方向,从而使我们能够将两个图像的坐标系关联起来。
三角测量(Triangulation):
利用多视角的点对和已估计的相机位姿,通过三角测量恢复三维空间中关键点的实际位置。这一步通过几何关系计算出三维点的空间坐标,从而生成场景的稀疏三维结构。
构建三维结构(3D Structure Construction):
最终,经过上述步骤,得到的三维点可以组合成稀疏的三维点云模型,描述了场景的基本结构。这一稀疏模型可进一步用于密集重建、光束平差优化等后续步骤。
结论
结构从运动(SfM)是计算机视觉领域的重要技术,能够有效地从图像序列中恢复出三维结构和相机运动信息。通过三角测量、极线约束和光束平差等方法,SfM为三维重建提供了强有力的理论基础和实用工具。