如何将三角化中的非线性优化问题转化为?

摘要:系统讲解了多视图几何中三角化问题的建模、线性(DLT)与非线性(重投影误差最小化)求解方法,并通过实例对比验证了非线性优化在提升3D点重建精度上的有效性,同时分析了实际应用中的挑战与应对策略。
1 引言 在前两篇文章《最小二乘问题详解10:PnP问题求解》和《最小二乘问题详解11:基于李代数的PnP优化》中,我们分别通过常规思想与李代数思想,深入探讨了计算机视觉中 SFM(Structure from Motion)系统的核心子问题之一——PnP 问题。该问题建模于针孔成像原理,本质上是利用单视图中的2D-3D对应关系求解相机位姿,常被归入单视图几何的范畴。 然而,仅靠单视图无法恢复场景的三维结构:深度信息在投影过程中永久丢失。要重建真实世界,必须引入多视图几何(Multi-view Geometry)。而在多视图框架下,最基础、最关键的优化问题之一,便是三角化(Triangulation)——即:在已知多个相机位姿的前提下,通过多视角下的同名点观测,反推空间中对应 3D 点的位置。 三角化看似简单,却是 SfM 和 SLAM 系统中“结构恢复”的基础,本文要讲解就是三角化问题的非线性优化求解方法。 2 问题建模 2.1 三角化定义 在计算机视觉中,三角化(Triangulation)是指已知多个相机的位姿和同一空间点在各图像中的观测位置,求解该点在世界坐标系下的三维坐标。其名称源于几何直观:从两个(或多个)相机光心向对应的图像点作射线,这些射线理论上应交于空间中的同一点——形成一个“三角形”。在理想无噪声情况下,两射线精确相交;但在实际中,由于位姿误差、特征匹配噪声等,射线往往不交,此时需通过优化找到“最佳”交点。 需要注意的是,三角化假设相机位姿已知(通常由 PnP 或 SfM 前端提供),因此它是一个纯结构恢复问题,与 PnP(已知结构求位姿)互为对偶。 2.2 成像模型回顾 回顾一下《最小二乘问题详解10:PnP问题求解》和《最小二乘问题详解11:基于李代数的PnP优化》中提到的针孔相机成像模型。设某空间点在世界坐标系下的位置为: \[\mathbf{X} = [X, Y, Z]^\top \in \mathbb{R}^3 \] 对于第 \(i\) 个相机,其位姿由旋转矩阵 \(\mathbf{R}_i \in SO(3)\) 和平移向量 \(\mathbf{t}_i \in \mathbb{R}^3\) 描述(即世界到相机的变换)。 该点在第 \(i\) 幅图像上的投影像素坐标 \(\mathbf{u}_i = [u_i, v_i]^\top\) 满足: \[s_i \begin{bmatrix} u_i \\ v_i \\ 1 \end{bmatrix} = \mathbf{K}_i \left( \mathbf{R}_i \mathbf{X} + \mathbf{t}_i \right) \tag{1} \] 其中: \(\mathbf{K}_i\) 为第 \(i\) 个相机的内参矩阵(通常假设已标定且恒定,记为 \(\mathbf{K}\)); \(s_i\) 为未知尺度因子(深度)。 去齐次化后,得到重投影函数: \[\pi(\mathbf{X}; \mathbf{R}_i, \mathbf{t}_i, \mathbf{K}) = \begin{bmatrix} f_x \cdot \dfrac{r_{i1}^\top \mathbf{X} + t_{ix}}{r_{i3}^\top \mathbf{X} + t_{iz}} + c_x \\ f_y \cdot \dfrac{r_{i2}^\top \mathbf{X} + t_{iy}}{r_{i3}^\top \mathbf{X} + t_{iz}} + c_y \end{bmatrix} \tag{2} \] 其中 \(\mathbf{r}_{ij}^\top\) 表示 \(\mathbf{R}_i\) 的第 \(j\) 行。 2.3 优化目标函数 设某空间点被 \(N \geq 2\) 个视角观测到,对应图像坐标为 \(\{\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_N\}\),相机位姿为 \(\{(\mathbf{R}_1, \mathbf{t}_1), \dots, (\mathbf{R}_N, \mathbf{t}_N)\}\)。我们的目标是找到一个 \(\mathbf{X} \in \mathbb{R}^3\),使得其在所有视角下的重投影结果尽可能接近观测值。
阅读全文