贡献:
1.引入了一种几何验证策略来优化场景图,从而提高了初始化和三角化的鲁棒性;
2.最优新增视角的选择最大化了增量重建过程的鲁棒性和准确性;
3.使用鲁棒的三角测量方法,在降低计算成本的情况下,产生比现有技术更完整的场景结构;
4.迭代BA、重三角化和离群值滤波策略,减少累计误差,显著提高模型完整性和准确性;
5.通过冗余视角识别,使稠密图像更有效地进行BA。
1. Scene Graph 优化
根据多模型的几何验证来优化Scene Graph :
-
估计基础矩阵,至少存在 N F N_F NF个内点;
-
对于上述经过验证的图像对,计算单应矩阵,根据内点数 N H N_H NH进行分类(单应矩阵内点过多,可能对应着纯旋转或平面);
-
对于有内参的图像,计算本质矩阵及其相应内点 N E N_E NE,判断下面几个比值:
N H / N F < ϵ H F N_H/N_F<\epsilon_{HF} NH/NF<ϵHF,则认为相机是处于一般的运动状态(非纯旋转);
N E / N F > ϵ E F N_E/N_F>\epsilon_{EF} NE/NF>ϵEF,则认为相机标定是准确的;
同时满足以上两个判定条件,就对本质矩阵进行分解,得到位姿,对内点进行三角化,计算三角化夹角的中值 α m \alpha_m αm,通过这个夹角来辨识是纯旋转还是平面场景(角度过小对应纯旋转)。
-
对于网络图像,往往图像中存在水印、时间戳、边框等等,这可能会使不同场景的图像连接到一起,通过对图像边界的相似变换进行内点数量 N S N_S NS估计,若 N S / N F > ϵ S F N_S/N_F>\epsilon_{SF} NS/NF>ϵSF或者 N S / N E > ϵ S E N_S/N_E>\epsilon_{SE} NS/NE>ϵSE,那么就认为这一匹配对是由于水印、时间戳、边框的原因连接在一起的,将这样的连接从Scene Graph 中剔除;
-
对于剩下的有效的图像对,将其标记为一般运动情况、纯旋转情况、平面情况。重建初始图像对的选择只能从非纯旋转情况开始,此外,不对纯旋转的匹配对进行三角化以防止产生退化的点,从而提高相机配准的鲁棒性。
2. 最优新增视角的选择
最优新增视角的选择至关重要,它影响到后续所有的重建,新增视角通过PnP 的方法实现3D to 2D 的配准,实现实验证明PnP 的精度受到观测点的数量和其在图像上分布状态的影响。观测点数量越多,分布越均匀,配准效果越好。
首先,新增视角至少要能看到 N t N_t Nt个观测点。而后,基于一种多分辨率的栅格统计方法来计算观测点分布的均匀程度。栅格内有点则进行加分,栅格分辨率越低,每一格对应得分越低。第 l l l层栅格的每一维划分为 K l = 2 l K_l=2^l Kl=2l个区间,每一格的得分为 w l = K l 2 w_l=K_l^2 wl=Kl2(这里论文中似乎图文不符,图中直接按 K l K_l Kl来算)。
3. 鲁棒且高效的三角测量
一个好的三角化满足下面三个条件:
-
三角化的后的夹角大于某阈值;
-
在两个视角中的深度均为正数;
-
重投影误差小于某阈值。
使用RANSAC的方法对某一条track进行三角化,RANSAC过程中根据已找到的最大的内点数不断更新迭代次数。由于一条track可能包含多个独立的空间点(可能某一个点产生了错误的匹配导致不同的三维点标记为了同一track),所以递归的对该track进行RANSAC,每当找到一组一致的匹配点(即对当前三角化点为内点),就对他们进行三角化,同时将这组匹配点从现有的属于该track的匹配点集中移除,对剩下的点继续进行RANSAC,直到最新的一致匹配点数小于3。通过这种方式使空间点的完整性得到提升。
4. Bundle Adjustment
在相机配准和三角化后使用BA进行优化,每当新的相机配准进来,只对与其连接较紧密的部分相机进行局部BA,当数量增加到一定级别时,再进行全局BA。
- BA参数设置:在进行局部BA时,使用Cauchy核提升损失函数对外点的鲁棒性。对于小规模BA问题,采用稀疏方程的直接法求解,对于大规模问题采用共轭梯度下降法进行求解。在Ceres Solver中根据共享参数不同,设置了可选择的求解模型,由于纯粹靠自标定,相机模型中只包含一个径向畸变系数。
- 滤波:在BA后,对重投影误差大或者三角测量角过小的点滤除。在全局BA后,检查退化的相机模型(由于纯旋转或人为增强图像导致),通常这些相机只有离群的观测或者内参收敛到一个虚假的极小值。因此在优化过程中,不对内参数进行限制。
- 重三角化:在进行BA后,尝试对之前未成功三角化的点进行三角化,以提高模型的完整性,同时尝试合并一些tracks。
- 迭代优化:不断重复BA、重三角化、滤波的过程直到滤波点数和再三角化点数减少。
5.冗余视角挖掘
根据是否受到新增视角影响,将图像分为两组。受到影响的分组使用标准的BA独立去优化他们的参数。再将未受到影响的分组进一步细分为很多小组
g
=
{
G
r
∣
r
=
1...
N
G
}
g=\{G_r|r=1...N_G\}
g={Gr∣r=1...NG},每一小组内图像高度重合且使用其中一个相机作为该组的代表。具体方法为:对于场景中的
N
X
N_X
NX个点,每一幅图像根据每个点在该图像中的可见情况,可以生成一个长度为
N
X
N_X
NX的二进制向量。那么对于两幅图像
a
a
a,
b
b
b,其对应二进制向量为
v
a
\bf{v_a}
va,
v
b
\bf{v_b}
vb,那么两幅图像的重叠程度使用:
V
a
b
=
∣
∣
v
a
∧
v
b
∣
∣
/
∣
∣
v
a
∨
v
b
∣
∣
V_{ab}=||\bf{v_a}\wedge\bf{v_b}||/||\bf{v_a}\vee\bf{v_b}||
Vab=∣∣va∧vb∣∣/∣∣va∨vb∣∣
来衡量。在构建分组时,首先依据
∣
∣
v
i
∣
∣
||\bf{v_i}||
∣∣vi∣∣大小对图像进行降序排列得到有序集合
I
I
I,某一分组初始化时取集合中第一幅图像
I
a
I_a
Ia,并将
I
a
I_a
Ia从集合中删除,并从集合中寻找使
V
a
b
V_{ab}
Vab最大的图像
I
b
I_b
Ib,若
V
a
b
V_{ab}
Vab大于某一阈值且该分组相机数量小于某一阈值,则将图像
I
b
I_b
Ib从集合中删除并加入该分组。否则,初始化新的分组。为了加快
I
b
I_b
Ib搜索速度,只对视角差在
±
β
\pm\beta
±β角度的图像中进行搜索。
对于每一个小组来说,赋予其一个局部坐标系,该世界坐标系到该组局部坐标系的变换用 G r \bf{G_r} Gr表示,若相机的投影矩阵为 P c \bf{P_c} Pc,则引入局部坐标系后新的投影矩阵写作 P c r = P c G r \bf{P_{cr}}=P_cG_r Pcr=PcGr。在BA过程中只对 G r \bf{G_r} Gr和三维点进行更新, P c \bf{P_c} Pc固定不变,即在优化过程中,小组内部的相机相对位置是不变的,通过引入一个局部坐标系,来整体地对该组内的相机进行一致的位姿调整,从而大大提高了效率。