Structure-from-Motion Revisited

Structure-from-Motion Revisited

SFM流程

步骤1—特征提取

对每个图像 I i I_{i} Ii,SFM通过SIFT提取局部特征 F i ( F i = ( x j , f j ) ) F_{i} \quad\left(F_{i}=\left(x_{j}, f_{j}\right)\right) Fi(Fi=(xj,fj)), x j x_{j} xj表示关键点的位置, f j f_{j} fj表示关键点的外观描述符。

步骤2—图像匹配

基于特征匹配的图像匹配—是指建立两幅图像中的特征点之间对应关系的过程(基于特征的匹配的优点是计算量小,对噪声不敏感和能够获得精确匹配)。找出可能存在重叠部分的图像对 C = { I a , I b } C=\left\{I_{a}, I_{b}\right\} C={Ia,Ib}以及他们相关特征的对应关系 M a b ∈ F a × F b M_{a b} \in F_{a} \times F_{b} MabFa×Fb
最后假设两个图片之间的特征点匹配数不少于16个即为初选图像对。

步骤3—几何验证

验证可能存在重叠部分的图像对 C C C(在进行初步的匹配之后,形成的特征点对是很粗糙的,即其中有很多的错误匹配。这会对后续工作产生很大的影响,因此常常需要对初步的点对进行进一步的确认和完善,剔除错误的特征点对)。
SFM进行匹配验证的方法是通过估计两幅图像间的变换关系,即投影几何关系。根据图像对的空间配置,不同的映射描述它们的几何关系。单应矩阵 H H H
描述的是纯旋转或者特征点共面的场景。对极几何通过本质矩阵 E E E(已校正)或者基础矩阵 F F F(未校正)描述了一个运动相机。

单应和对极几何的区别:
· 使用场景

o 基础矩阵表示的是两视图的对极约束,和三维场景的结构无关,只依赖于相机的内参数以及外参数,需要两个相机的位置有旋转和平移

o 单应矩阵对场景的三维结构有了更多的要求,需要场景中的点在同一个平面上;或者是对相机的位姿有了要求,两个相机之间只有旋转而无平移。

· 约束关系
o 基础矩阵 F F F表示的像点和另一幅图像上的对极线的映射关系,使用基础矩阵 F F F无法得到像点对应点在另一幅图像上的确切位置。基础矩阵 F F F描述的实际是一种点和直线的映射关系。
o 单应矩阵 H H H则是点和点的映射,使用单应矩阵 H H H可以找到像点在另一幅图像上对应点的确切位置。
· 使用单应矩阵 H H H而不使用基础矩阵 F F F
o 相机只有旋转而无平移的时候,两视图的对极约束不成立,基础矩阵 F F F为零矩阵,这时候需要使用单应矩阵 H H H
o 场景中的点都在同一个平面上,可以使用单应矩阵 H H H计算像点的匹配点。
o 相机的平移距离相对于场景的深度较小的时候,也可以使用单应矩阵 H H H

如果有效的变换在图像之间映射了足够多的特征,则认为它们已进行几何验证。
像这种基础矩阵 F F F或者单应矩阵 H H H会计算出有很多噪声数据,需要用RANSAC(随机抽样一致性)算法进行滤波。

当所有的两两匹配图像对被确定以后,就可以考虑把多个图像中都出现的共同特征匹配点连接起来,就能形成轨迹了。例如,特征 f 1 ∈ C   ( 1 ) f_1\in C\ (1) f1C (1)匹配特征 f 2 ∈ C   ( 2 ) f_2\in C\ (2) f2C (2), f 2 f_2 f2匹配特征 f 3 ∈ C   ( 3 ) f_3\in C\ (3) f3C (3), 这些特征就可以形成一个轨迹 { f 1 , f 2 , f 3 } \left\{f_{1}, f_{2}, f_{3}\right\} {f1,f2,f3}

一旦符合的轨迹都找到后,就构造出了场景图,包含每个图像的节点和有共同轨迹的图像边缘。即该阶段的输出是所谓的场景图,其中图像作为节点,已验证的图像对作为边缘。

步骤4—初始化

选择合适的初始化图像对初始化的作用—选择合适的图像对作为模型的初始化)非常重要,一旦错误的初始化,将会陷入局部最优而使得之后的BA陷入死循环,无法正确求解得到全局最优。而且,重建的鲁棒性,准确性和性能取决于增量过程的seed location。

具体的初始化图像对有两个要求(选择要求):

第一,要有足够多的匹配点;

第二,要有足够远的相机中心。

特别的,在这里用到两个图像变换之间的单应性模型来找初始化图像对。采用RANSC算法四点法计算单应矩阵。满足单应矩阵的匹配点称为内点,不满足单应矩阵的称为外点, 根据单应矩阵公式可知当T越小时,内点占比越高,也就是低视差现象越明显。

因此找到一个内点占比最小的像对就是初始化像对,当然它的前提必须满足可重建,这个可以通过匹配点个数(可以设为100)保证。

步骤5—图像配准

图像配准就是根据初始化匹配对估计外参,即解决PNP问题,获得相机的外参。

从度量重建开始,可以通过使用到已配准图像中的三角点的特征对应关系(2D-3D对应关系)来解决透视n点(PnP)问题(PNP问题就是指通过世界中的N个特征点与图像成像中的N个像点,计算出其投影关系,从而获得相机或物体位姿的问题),从而将新图像配准至当前模型。

步骤6—三角化

轨迹三角化后可以提供初始化的3D点。

首先,新配准的图像必须观测到现有的场景点,不然无法确定新帧的位姿等参数。此外,它还可以通过扩展点集 X \mathcal{X} X来增加场景覆盖率(通过对其他场景点的三角化)。只要配准了至少一个图像(也就是说覆盖了新的场景部分,但来自不同的视角下的场景部分),就可以对新的场景点 x k x_k xk进行三角化并将其添加到 X \mathcal{X} X中。

三角化是SFM中的一个关键步骤,因为它通过增加冗余度(通过该步骤增加了新的场景点,从而增加了现有模型的冗余度)来增加现有模型的鲁棒性以及它通过提供额外的2D-3D对应关系来实现新图像的配准。

步骤7—光束平差法(BA)

Bundle Adjustment(BA)即光束平差法,作为SFM这种多视重建视觉算法的最后一步,它利用LM算法使得观测的图像点坐标与预测的图像点坐标之间的误差最小。若给定图像特征点的对应关系及初始三维点,BA可以同时优化这些特征点对应的3D坐标及相应的相机参数

Bundle Adjustment的名字由来于空间中每个物点和相机光学中心“发射”出的光束,人们可以根据这些光束对结构和视角参数进行调节,获得空间结构及视角参数的最优解。BA的核心问题就是最小化下面的重投影误差函数(非线性):

E = ∑ j ρ j ( ∥ π ( P c , X k ) − x j ∥ 2 2 ) E=\sum_{j} \rho_{j}\left(\left\|\pi\left(P_{c}, X_{k}\right)-x_{j}\right\|_{2}^{2}\right) E=jρj(π(Pc,Xk)xj22)

其中, E E E是重投影误差函数, P c P_c Pc是摄像机参数, X k X_k Xk是特征点参数,函数 π   ( ) \pi\ () π ()表示物点 X k X_k Xk在相机 P c P_c Pc下的投影坐标,也是我们的预测值(场景点投影到图像空间的函数),损失函数 ρ   ( ) \rho\ () ρ ()表示观测的图像坐标与预测的图像坐标之间的范数距离(降低离群权重的函数)。

上式的重投影误差最小化问题可以使用LM非线性最小二乘法解决。LM算法是解决BA问题的一种。

BA问题中特殊的参数结构需要用到舒尔补算法解决,其中首先解决简化的相机系统,然后通过反替代来更新特征点。(SLAM中利用舒尔补算法求解稀疏Hessian的逆,由于Hessian矩阵很大导致直接求逆会很慢很慢。包括求解GN、LM算法中的增量方程以及DogLeg算法中的GN步都可以用使用舒尔补算法进行加速求解!)

Bundle Adjustment是一个迭代的过程,在一次迭代过后,将所有三维点反向投影到各自相片的像素坐标并分别与初始坐标比对,如果大于某个阈值,则应将其从轨迹中去掉,如果轨迹中已经小于2个了,则整个轨迹也去掉,一直优化到没有点可去为止。

最后,不断添加新的摄像机和3D点进行BA。这个过程直到剩下的摄像机观察到的点不超过20为止,说明剩下的摄像机没有足够的点可以添加,BA结束。得到相机估计参数和场景几何信息,即稀疏的3D点云。

至于之后对SFM的改进,下次补充。
参考链接:
https://blog.csdn.net/q_z_r_s/article/details/97813700.
https://blog.csdn.net/qq_33826977/article/details/79834735.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值