三维重建学习(七)运动恢复结构(SfM)系统解析

回顾

单应矩阵

单应矩阵–空间平面在两个摄像机下的投影几何。

捆绑调整BA(Bundle Adjustment)

  • 恢复结构和运动的非线性方法。

P3P求解摄像机位姿

核心思路:

  1. 求解A,B,C三点在当前摄像机坐标系上的坐标;
  2. 通过A,B,C在当前摄像机下的坐标以及其在世界坐标系下的坐标,估计摄像机相对于世界坐标系的旋转与平移。

SfM系统

输入输出

输入:多张图片

输出:3D点云(structure),摄像机位姿(motion)

问题描述

已知:三维场景的m张图像以及每张图像对应的摄像机内参数矩阵Ki(i=1,...,m)K_i(i=1,...,m)

求解:

  • 三维场景结构,即三维场景点坐标Xj(j=1,...,n)X_j(j=1,...,n)
  • m个摄像机的外参数RiR_iTii=1,...,mT_i(i=1,...,m)

特征提取SIFT

image-20240828162008548

相当于为每个像素提取一个梯度方向,并累加。所有梯度方向做累加,看最大的方向朝向。将整个图形旋转同一方向即可对应。

不直接计算像素对比,而是计算梯度对比。

特征匹配

但是里面的点存在错误的匹配点,也就是说数据收到异常值污染。

可以用RANSAC模型拟合方法解决。

2视图欧式结构恢复

三角化:

线性法:

{p=MP=K[I0]Pp=MP=K[RT]P\begin{cases} p=MP=K[I 0]P\\ p'=M'P=K'[RT]P \end{cases}

非线性法:

Pj=argmin(d(p.MP)+d(p,MP))P^*_j=argmin(d(p.MP)+d(p',M'P))

基于增量法的SfM系统(多视图)

预处理

求解SfM

1计算对应点的Tracks

track就是一个点在多张图像里的连接关系。

本质上就是选择能在多张图上匹配的点,track大说明这个点在更多图上出现,更适合作为点云。

2计算联通图

3 选取初始的两张图

也就是在连通图G中选取一条边e。也就是第一张和第二张图片开始重建。 是基础中的基础,选择会严格。

**要求:**所有点对应点三角化时射线夹角中位数不大于60度不小于3度。

角度太小,深度误差很大。角度太大,容易出现遮挡。

4 5 6 两视图重构

4:鲁棒估计e所对应的本质矩阵E

5:分解本质矩阵E,得到两张图片摄像机的位姿(即外参数)

6:三角化tet\cap e的点,作为初始的重建结果

7 删除G中的边e

推进。表示这副图的相对匹配点被使用。

8 增加视图到系统实现多视图重构

如果G中还有边:

  1. 从G中选取e满足track(e){已重建3D}track(e)\cap \{已重建3D点\}最大化:提高信息利用效果。
  2. 用PnP方法估计摄像机位姿(外参数):估计新的摄像机的位姿
  3. 三角化新的tracks
  4. 删除G中的边e
  5. 执行Bundle Adjustment 捆绑调整。误差平均。