欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 三维重建 —— 7. 透视结构恢复

三维重建 —— 7. 透视结构恢复

2025/6/19 14:09:23 来源:https://blog.csdn.net/2501_90669630/article/details/148731798  浏览:    关键词:三维重建 —— 7. 透视结构恢复

文章目录

  • 1. 基本概念
  • 2. 代数方法
  • 3. 捆绑调整

课程链接: 计算机视觉之三维重建(深入浅出SfM与SLAM核心算法)—— 7.多视图几何(下)。

1. 基本概念

透视结构恢复问题的数学模型如下图所示:
在这里插入图片描述
透视结构恢复的歧义如下图所示。从图中可以看出, x i j = M i X j = ( M i H − 1 ) ( H X j ) = M ∗ X ∗ x_{ij} = \mathbf{M}_i X_j = (\mathbf{M}_i \mathbf{H}^{-1})(\mathbf{H} X_j) = \mathbf{M}^* X^* xij=MiXj=(MiH1)(HXj)=MX。因此,估计的投影矩阵 M ∗ \mathbf{M^*} M 与真实的投影矩阵 M \mathbf{M} M 至多相差一个可逆矩阵 H − 1 \mathbf{H}^{-1} H1(这里 H \mathbf{H} H 4 × 4 4 \times 4 4×4 可逆矩阵),而重建的三维点 X ∗ X^* X 与真实三维点 X j X_j Xj 之间相差矩阵 H \mathbf{H} H 所定义的线性变换。
在这里插入图片描述
在相差一个 4 × 4 4 \times 4 4×4 可逆矩阵 H \mathbf{H} H 的情况下,恢复摄像机运动与场景结构的方法有两种:

  • 代数方法(通过基础矩阵 F \mathbf{F} F
  • 捆绑调整(Bundle Adjustment, BA)

2. 代数方法

我们先讨论 2 视图的解法,再拓展到 N N N 视图的解法。2 视图的代数解法如下:
代数方法的求解步骤如下图所示。首先,通过归一化八点法求解出基础矩阵 F \mathbf{F} F。然后,我们需要通过基础矩阵 F \mathbf{F} F 估计出两个相机的投影矩阵 M 1 \mathbf{M}_1 M1 M 2 \mathbf{M}_2 M2。最后,利用三角化求解三维点。
在这里插入图片描述
由于透视歧义存在,即 x i j = M i X j = ( M i H − 1 ) ( H X j ) = M ∗ X ∗ x_{ij} = \mathbf{M}_i X_j = (\mathbf{M}_i \mathbf{H}^{-1})(\mathbf{H} X_j) = \mathbf{M}^* X^* xij=MiXj=(MiH1)(HXj)=MX。因此,我们总是可以找到一个可逆矩阵 H \mathbf{H} H,使得:
{ M 1 ∗ = M 1 H − 1 = [ I ∣ 0 ] M 2 ∗ = M 2 H − 1 = [ A ∣ b ] \begin{cases} \mathbf{M}^*_{1} = \mathbf{M}_1 \mathbf{H}^{-1} = [\mathbf{I} | 0] \\ \mathbf{M}^*_{2} = \mathbf{M}_2 \mathbf{H}^{-1} = [\mathbf{A} | b] \end{cases} {M1=M1H1=[I∣0]M2=M2H1=[Ab]我们通过下图的方法建立基础矩阵 F \mathbf{F} F A \mathbf{A} A b b b 之间的数学关系,即
F = [ b × ] A \mathbf{F} = [b_{\times}] \mathbf{A} F=[b×]A这里用到了向量叉积的性质: a × b = − b × a \boldsymbol{a} \times \boldsymbol{b} = -\boldsymbol{b} \times \boldsymbol{a} a×b=b×a
在这里插入图片描述
根据基础矩阵 F \mathbf{F} F 估计 A \mathbf{A} A b b b 的方法如下图所示:
在这里插入图片描述
从图中可知, b b b 为方程 F T b = 0 \mathbf{F}^T b = 0 FTb=0 的解,且 A = − [ b × ] F \mathbf{A} = -[b_{\times}] \mathbf{F} A=[b×]F。上述证明中应用了如下公式: [ b × ] [ b × ] = b b T − ∣ b ∣ 2 I [b_{\times}][b_{\times}] = b b^T - |b|^2 \mathbf{I} [b×][b×]=bbTb2I证明如下:
[ b × ] [ b × ] = ( 0 − b z b y b z 0 − b x − b y b x 0 ) ( 0 − b z b y b z 0 − b x − b y b x 0 ) = ( − b z 2 − b y 2 b x b y b x b z b x b y − b z 2 − b x 2 b y b z b x b z b y b z − b y 2 − b x 2 ) = ( b x 2 b x b y b x b z b x b y b y 2 b y b z b x b z b y b z b z 2 ) − ( b x 2 + b y 2 + b z 2 0 0 0 b x 2 + b y 2 + b z 2 0 0 0 b x 2 + b y 2 + b z 2 ) = ( b x b y b z ) ( b x b y b z ) − ( b x 2 + b y 2 + b z 2 ) ( 1 0 0 0 1 0 0 0 1 ) = b b T − ∣ b ∣ 2 I \begin{align*} [b_{\times}][b_{\times}] &= \begin{pmatrix} 0 & -b_z & b_y \\ b_z & 0 & -b_x \\ -b_y & b_x & 0 \end{pmatrix} \begin{pmatrix} 0 & -b_z & b_y \\ b_z & 0 & -b_x \\ -b_y & b_x & 0 \end{pmatrix} \\ &= \begin{pmatrix} -b_z^2 - b_y^2 & b_x b_y & b_x b_z \\ b_x b_y & -b_z^2 - b_x^2 & b_y b_z \\ b_x b_z & b_y b_z & -b_y^2 - b_x^2 \end{pmatrix} \\ &= \begin{pmatrix} b_x^2 & b_x b_y & b_x b_z \\ b_x b_y & b_y^2 & b_y b_z \\ b_x b_z & b_y b_z & b_z^2 \end{pmatrix} - \begin{pmatrix} b_x^2 + b_y^2 + b_z^2 & 0 & 0 \\ 0 & b_x^2 + b_y^2 + b_z^2 & 0 \\ 0 & 0 & b_x^2 + b_y^2 + b_z^2 \end{pmatrix} \\ &= \begin{pmatrix} b_x \\ b_y \\ b_z \end{pmatrix} \begin{pmatrix} b_x b_y b_z \end{pmatrix} - (b_x^2 + b_y^2 + b_z^2) \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} = b b^T - |b|^2 \mathbf{I} \end{align*} [b×][b×]= 0bzbybz0bxbybx0 0bzbybz0bxbybx0 = bz2by2bxbybxbzbxbybz2bx2bybzbxbzbybzby2bx2 = bx2bxbybxbzbxbyby2bybzbxbzbybzbz2 bx2+by2+bz2000bx2+by2+bz2000bx2+by2+bz2 = bxbybz (bxbybz)(bx2+by2+bz2) 100010001 =bbTb2I又因为:
{ e ′ T F = 0 F T b = 0 ⇒ ( F T b ) T = 0 ⇒ b T F = 0 \begin{cases} e^{\prime T} \mathbf{F} = 0 \\ \mathbf{F}^T b = 0 \Rightarrow (\mathbf{F}^T b)^T = 0 \Rightarrow b^T \mathbf{F} = 0 \end{cases} {eTF=0FTb=0(FTb)T=0bTF=0因此, b b b 可以取值为 e ′ ∥ e ′ ∥ \dfrac{e^{\prime}}{\|e^{\prime}\|} ee,其中 e ′ e^{\prime} e 为极点。

由上述讨论知,当设置第一个相机的投影矩阵为 M 1 ∗ = [ I 0 ] \mathbf{M}^*_1 = [I \quad 0] M1=[I0] 时,第二个相机的投影矩阵 M 2 ∗ = [ − [ b × ] F b ] ] \mathbf{M}^*_2 = [-[b_{\times}] \mathbf{F} \quad b]] M2=[[b×]Fb]]。当我们已知相机的投影矩阵时,就可以使用三角化计算三维点,关于三角化可以参考博客:三维重建 —— 4. 三维重建基础与极几何。

上述已讨论过两视图的代数解法。通过计算每个图像对 ( I k ​ , I h ​ ) (I_k​, I_h​) (Ik,Ih) 的运动与结构,即可将该方法推广到 N N N 视图情况,如下图所示。
在这里插入图片描述

3. 捆绑调整

代数法与分解法的局限性如下图所示:
在这里插入图片描述
捆绑调整(Bundle Adjustment, BA)是计算机视觉、摄影测量和机器人领域中用于联合优化相机参数(位姿、内参)与三维点坐标的核心技术,其目标是通过最小化重投影误差,提升三维重建或运动恢复结构的全局一致性。重投影误差是指三维点通过相机模型投影到图像平面后,与真实观测点之间的欧氏距离。最小化重投影误差的数学公式如下:
min ⁡ { K i , R i , T i , X j } ∑ i = 1 m ∑ j = 1 n ∥ proj ( K i [ R i ∣ T i ] X j ) − ( u i j , v i j ) ∥ 2 \min_{\{\mathbf{K_i}, \mathbf{R_i}, T_i, X_j\}} \sum_{i=1}^{m} \sum_{j=1}^{n} \left\| \text{proj}(\mathbf{K_i} [\mathbf{R_i} \mid T_i] X_j) - (u_{ij}, v_{ij}) \right\|^2 {Ki,Ri,Ti,Xj}mini=1mj=1nproj(Ki[RiTi]Xj)(uij,vij)2BA 依赖迭代优化,常用方法包括:​梯度下降法、牛顿法​、​LM 算法等。下图介绍了 BA 算法以及其优势和局限性。值得注意的是:BA 算法常用作 SfM 的最后一步,而分解或代数方法可作为优化问题的初始解
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词