在看视觉SLAM十四讲和ORB SLAM3源码的时候,对2D-2D单目初始化那有些不明白,主要是用八点法求本质矩阵。
问题:
1.为什么的自由度是7,而解方程又要8个点?
2.为什么用最小奇异值对应奇异向量作为的元素?
3.直接取出来的矩阵为什么不能直接用,而是要奇异值分解后,将最小奇异值置零,再带回去?
1.基础矩阵F的自由度与八点法
基础矩阵描述了在无校准立体视觉系统中,一幅图像上的一点与另一幅图像上对应点的几何关系。基础矩阵是从三维空间到二维图像的投影和对应点关系的数学表示。
1.1为什么基础矩阵有7个自由度
尺度不变性:基础矩阵(F)有9个元素,因为它是一个的矩阵。然而,由于基础矩阵定义了两个图像之间的对应关系,但这种对应关系是在无穷远的投影平面中定义的,这意味着它是在齐次坐标下表达的。齐次坐标下,矩阵乘以任何非零标量都表示同一个映射,即如果(F)是一个基础矩阵,那么
(其中
是任意非零实数)也表示相同的几何关系。这减少了一个自由度,从9降到了8。
秩2约束:理论上,由于基础矩阵是由外部参数(即相机的旋转和平移)导出,它的秩应该是2。这是因为在理想情况下,任何两个视图的基础矩阵可以写成外部参数的乘积,这个乘积的形式决定了的一个奇异值为0,从而减少了一个自由度,从8降到了7。
1.2为什么需要八对匹配点
尽管基础矩阵有7个自由度,但在实际求解过程中,我们通过构建一个线性系统来求解未知的(F)。每对匹配点给出一个关于的线性方程。理论上,7个方程足以求解7个未知数。然而,由于噪声和测量误差的存在,直接利用7对点可能得不到一个鲁棒的解。通过引入更多的对应点(如8对或更多),我们构造了一个过定(overdetermined)系统,可以通过最小二乘方法等技术求解,从而增加了计算的稳定性和解的准确性。
2.为什么用最小奇异值对应奇异向量作为
的元素
在利用八点法求解基础矩阵过程中,采用奇异值分解(SVD)来解齐次线性方程组
(其中
为根据匹配点对构建的矩阵,
为基础矩阵
的列向量形式)是为了寻找最佳解。这个过程中取最小奇异值对应的奇异向量作为基础矩阵的解的原因跟这个问题的数学性质和求解过程有关。
2.1齐次线性方程组的性质
对于齐次线性方程组(其中
是一个
的矩阵,(N)是匹配点对的数量,且通常
),求解
是在寻找一个非零向量
,使得
。在大多数情况下,我们希望找到的这个解不仅仅满足方程,而且在某种意义上是最好的解。
2.2最小奇异值与问题的最优解
在数学上,一个矩阵的奇异值分解将矩阵分解为的形式,其中
包含了奇异值,并且奇异值从大到小排序。奇异值反映了矩阵在特定方向上的"张力"或者"拉伸能力"。对于方程
,我们想要找到一个最满足这个方程的非零解
,即寻找使得
尽可能接近于零的
。在所有可能的解中,
的最小奇异值对应的右奇异向量(
中的列向量)给出了满足这个条件的向量
。换句话说,这个解使得
的长度(即方程的"误差")最小。
2.3基础矩阵约束
对于基础矩阵,理论上它应该满足秩为2的约束。直接通过最小奇异值的奇异向量求解得到的
可能不会满足这个约束,因此通常在求解后还需要对
进行调整(例如通过设置最小奇异值为0,再重新构造
)来确保其满足秩为2的条件。
总之,通过取最小奇异值对应的奇异向量作为解的原因,在于这种方法依据线性代数理论提供了满足原始方程组的最优解,在这个框架内,"最优"意味着在给定的约束下最小化错误或残差。
3.为什么要将结果的最小奇异值置0
如前所述,理论上基础矩阵的秩应该是2。由于测量误差和计算方法,直接计算可能得到一个近似的基础矩阵,其所有奇异值都不为0,即其秩为3。为了强制实现秩2的约束,可以通过将计算得到的基础矩阵进行奇异值分解,然后将最小的奇异值设置为0,最后再通过剩余的奇异值和奇异向量重构基础矩阵。这样做的依据是要确保结果的基础矩阵尽可能地反映真实的几何关系,并满足理论上的秩2约束。这一步骤不仅可以提高计算结果的准确性,还有助于后续的几何解析过程,如立体匹配和三维重建。
4.总结
八点法在求解基础矩阵时,实际上可以使用超过八对匹配点来构建齐次线性方程组。八点法是一种经典的计算两个视图间基础矩阵的方法,基础矩阵描述了图像间的对应点如何关联。基础矩阵有7个自由度,理论上需要8个点来求解(每对匹配点提供一个方程),但在实际应用中,常常采用更多的匹配点以提高求解的稳定性和准确性。
当使用超过8对点时,可以通过最小二乘法求解一个过定的(overdetermined)线性方程组来找到最佳拟合的基础矩阵。过程中,齐次线性方程组的形式如下:
其中,x代表基础矩阵的九个元素(由于
是齐次的,实际上只有八个自由度),
是由对应点构成的矩阵。当点的数量超过8时,
变成一个
×9的矩阵(
为匹配点对的数量)。
要求解这个方程组,可以使用奇异值分解(SVD)来找到空间中的最小奇异值对应的奇异向量,这个向量即为
矩阵的解。
以下是使用更多对匹配点来求解基础矩阵的基本步骤:
- 对所有匹配点应用标准化过程,以改进数值稳定性。
- 构建线性方程组
。
- 使用奇异值分解求解方程组,得到与最小奇异值对应的奇异向量,该向量即为
的解。
- 由于直接求解可能导致结果不满足基础矩阵的秩为2的约束,因此需要将得到的基础矩阵通过再次SVD分解,并将奇异值矩阵的最小奇异值设置为0,再重构基础矩阵,以确保其满足秩为2的约束。
- 可选地,对基础矩阵进行去标准化。
使用更多的匹配点可以提高求解基础矩阵的鲁棒性和准确性,尤其是在存在噪声和错误匹配的情况下。然而,这也可能引入外点(outliers),因此,通常会结合随机抽样一致性算法(RANSAC)等方法,以提高结果的稳定性。