COLMAP之Structure-from-Motion Revisited论文笔记

贡献:

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={Grr=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=vavb/vavb
来衡量。在构建分组时,首先依据 ∣ ∣ 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固定不变,即在优化过程中,小组内部的相机相对位置是不变的,通过引入一个局部坐标系,来整体地对该组内的相机进行一致的位姿调整,从而大大提高了效率。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值