如何用鲁棒估计与5点算法求解本质矩阵的原理?
摘要:探讨了在存在大量误匹配(外点)的真实场景下,如何鲁棒地估计本质矩阵 EE ,核心方案是结合 RANSAC 框架与 5点算法(通过 OpenGV 库实现)来剔除异常值,随后利用 8点算法 提供初值并基于 Sampson 误差 使用 Ceres
1 引言
在上一篇文章《最小二乘问题详解13:对极几何中本质矩阵求解》中,我们系统地探讨了在相机内参已知的前提下,如何从两视图的2D-2D特征匹配中恢复相机的相对位姿。我们首先建立了对极几何的数学模型,并推导出核心约束——对极约束 \(\tilde{\mathbf{x}}_2^\top \mathbf{E} \tilde{\mathbf{x}}_1 = 0\)。在此基础上,我们详细分析了两种求解本质矩阵 \(\mathbf{E}\) 的方法:经典的8点线性算法,它通过求解一个齐次线性系统获得初值;以及基于Sampson误差的非线性优化,它能有效提升解的几何精度。
然而,上述方法都建立在一个关键且脆弱的假设之上:所有的输入匹配点都是正确的(即内点)。在真实的计算机视觉应用中,这一假设几乎从不成立。由于重复纹理、遮挡、运动模糊或特征描述子的局限性,特征匹配阶段不可避免地会引入大量错误的对应关系,即外点(outliers)。这些外点完全不遵循由真实相对位姿所决定的对极几何,若直接将包含外点的数据送入8点算法或非线性优化器,其结果将会被严重污染,甚至完全失效。
因此,在实际的视觉系统应用中,必须采用更为鲁棒的估计方法,以保证在存在大量异常数据的情况下,依然能够准确地估计出模型参数。在多视图几何领域,最著名、最有效的鲁棒估计算法莫过于 RANSAC(Random Sample Consensus,随机抽样一致性)。
RANSAC 本身是一个通用的框架,其性能很大程度上取决于其内部所使用的最小解法(Minimal Solver)。对于本质矩阵估计问题,理论上最少需要多少对点才能求解?答案是5对点:因为本质矩阵 \(\mathbf{E}\) 必须满足奇异值必须为 \((\sigma, \sigma, 0)\) 的的代数约束。这催生了由 David Nistér 提出的高效 5点算法,它利用5对归一化匹配点,通过求解一个10次多项式来恢复本质矩阵的所有可能解。
因此,RANSAC 算法和5点算法,正是在对极几何的工程实践中稳健求解本质矩阵的关键所在。
2 理论
2.1 5点算法
在上一节中,我们明确了5点算法作为RANSAC框架内最小解法的核心地位。现在,我们需要深入理解其本质:5点算法是一个代数求解过程,而非数值优化过程。这一区分至关重要,因为它决定了我们为何不能用Ceres等通用优化库来实现它。
与《最小二乘问题详解13:对极几何中本质矩阵求解》中介绍的8点算法(求解线性方程组)和Sampson优化(最小化非线性损失函数)不同,5点算法的目标是在恰好5对无噪声的归一化匹配点这一最小数据集上,完备地找出所有在几何上可能成立的本质矩阵。为了实现这一目标,算法必须严格遵守两个核心约束:
对极约束:对于每一对点 \((\tilde{\mathbf{x}}_{1i}, \tilde{\mathbf{x}}_{2i})\),必须满足 \(\tilde{\mathbf{x}}_{2i}^\top \mathbf{E} \tilde{\mathbf{x}}_{1i} = 0\)。
内在约束:本质矩阵 \(\mathbf{E}\) 的奇异值必须为 \((\sigma, \sigma, 0)\) 的形式。
将这两个约束条件结合起来,问题被转化为一个复杂的多项式方程组。David Nistér在其开创性工作中,通过精巧的代数操作(包括利用\(\mathbf{E}\)的内在约束将其参数化,并将对极约束代入),最终将这个系统简化为一个10次多项式方程。求解这个10次多项式的根,即可得到最多10个实数解。每一个实数解都对应一个候选的本质矩阵 \(\mathbf{E}\)。因此,5点算法的输出不是一个单一的解,而是一个包含最多10个候选模型的集合。
然而,这仅仅是第一步。由于多项式求解会引入数学上有效但物理上无效的解,我们必须对这些候选解进行后处理筛选。最常用的方法是Cheirality Check(深度一致性检查):利用每个候选 \(\mathbf{E}\) 分解出对应的旋转 \(\mathbf{R}\) 和平移方向 \(\mathbf{t}\),然后将空间点三角化,并检查这些点是否同时位于两个相机的前方(即深度为正)。只有通过此检查的解,才是物理世界中真实可行的解。
可以看到,整个5点算法流程——从建立多项式、求根到物理验证——是一个典型的符号计算与代数几何过程。它追求的是全局性和完备性,即不遗漏任何一个可能的正确答案。相比之下,以Ceres为代表的数值优化方法,其工作方式截然不同。它们需要一个初始猜测,并通过迭代的方式沿着梯度下降的方向去寻找一个局部最优解。
