一、透视结构恢复问题
1.1 概述
1. 透视结构恢复问题:摄像机为透视相机,内外参数均未知。
2. 问题:已知 n n n 个三维点 X j X_j Xj 在 m m m 张图像中的对应点的像素坐标为 x i j x_{ij} xij,且 x i j = M i X j x_{ij}=M_iX_j xij=MiXj,其中 M i M_i Mi 为第 i i i 张图片对应的摄像机投影矩阵,求解 n n n 个三维点 X j X_j Xj 的坐标以及 m m m 个摄像机投影矩阵 M i M_i Mi。
1.2 透视结构恢复歧义
1. 透视结构与仿射结构的区别在于,透视结构计算得到的投影矩阵 M i M_i Mi,与真实投影矩阵差一个 4 ∗ 4 4*4 4∗4 的可逆矩阵 H H H,也就是差了一个透视变换关系。
2. 对于给定 m m m 个相机, n n n 个三维点,我们将有 2 m n 2mn 2mn 个等式, 11 m + 3 n − 15 11m+3n-15 11m+3n−15 个未知量。
1.3 代数方法
1. 求解步骤:(1) 求解基础矩阵
F
F
F (归一化八点法)。 (2) 基于
F
F
F 估计摄像机矩阵
F
→
M
1
,
M
2
F \rightarrow M_1,M_2
F→M1,M2。 (3) 三角化。
关键是第二步的求解。
2. (1)令 M 1 ∗ = [ I ∣ 0 ] M_1^*=[I|0] M1∗=[I∣0], M 2 ∗ = [ A ∣ b ] M_2^*=[A|b] M2∗=[A∣b]。推导出基础矩阵 F F F 与 A A A 和 b b b 的关系: F = [ b x ] A F=[b_x]A F=[bx]A。注:同方向的向量叉乘为 0 0 0。
(2)如何计算 A A A 和 b b b:
1.4 捆绑调整
1. 捆绑调整(Bundle Adjustment):捆绑调整使用最小化重投影误差,可以进行多次迭代,使重构点足够拟合真实值,可以应用于欧式结构、仿射结构和透视结构多种情况,是一个恢复结构和运动的非线性方法。
2. 代数法与分解法的局限性:(1) 因式分解法:假定所有点都是可见的,所以对于存在遮挡,建立对应点关系失败的情况将不得不删除该对应点关系。 (2) 代数法:应用于 2 2 2 视图重建,多视图容易出现误差累积。
3. 最小化重投影误差: m i n ( E ( M , X ) ) = ∑ i = 1 m ∑ j = 1 n D ( x i j , M i X j ) 2 min(E(M,X))=\sum_{i=1}^m \sum_{j=1}^nD(x_{ij},M_iX_j)^2 min(E(M,X))=∑i=1m∑j=1nD(xij,MiXj)2
4. 捆绑调整的优势:同时处理大量视图,处理丢失的数据。局限性:大量参数的最小化问题,需要良好的初始条件(即初始 M i M_i Mi)。一般来说,捆绑调整作为运动恢复问题的最后一步,首先通过分解或代数方法先求出优化问题的初始 M i M_i Mi。
二、P3P问题
1. (1) PnP 问题:指通过世界中 N N N 个三维点坐标及其在图像中 N N N 个像点坐标,计算出相机或物体位姿的问题。 (2) P3P 问题:我们只讨论世界中 3 3 3 个三维点和图像中 3 3 3 个像点的关系,计算欧式结构恢复相机位姿的问题,也就是计算出摄像机的外参数 R R R、 T T T。 (3) 相比于之前求 F F F 和三角化得到摄像机外参数的方法,该方法误差更小。
2. P3P 问题解法如下所示。其中步骤 1 1 1 的计算方法:由于 a = K [ I 0 ] P a a=K[I \hspace{0.2cm} 0]P_a a=K[I0]Pa,则 K − 1 a = [ I 0 ] P a K^{-1}a=[I \hspace{0.2cm} 0]P_a K−1a=[I0]Pa,所极点到像点 a a a 的方向向量为: o a → = K − 1 a ∣ ∣ K − 1 a ∣ ∣ \overrightarrow{oa}=\frac{K^{-1}a}{||K^{-1}a||} oa=∣∣K−1a∣∣K−1a,同理可以计算出 o b → \overrightarrow{ob} ob 和 o c → \overrightarrow{oc} oc。
三、随机采样一致性
1. 随机采样(Random sample consensus):一种适用于数据受到异常值污染的模型拟合方法,通过选择随机均匀采样一定的点,估计模型参数,并输出模型分数最高的模型。
2. 算法流程:
(1) 随机均匀采样获取模型求解所需的最小子集。
(2) 适用该子集估计模型参数。
(3) 计算剩余样本与当前模型的一致性,统计满足当前模型的内点(在正确拟合模型上的点为内点,负样本点为外点)个数,作为当前模型分数。
(4) 按照设定次数重复(1)-(3)步,最终输出分数最高的模型。