Colmap学习三:后端Initialization部分(基础矩阵F、本质矩阵E和单应矩阵H)

算矩阵的基础知识
解析本质、基础、单应矩阵的自由度

1 寻找初始像对

1.1手动选择ID
1.2自动筛选

①prior focal length存在情况下,开始筛选

  • 匹配点数由小到大排序
  • 第二张候选影像的匹配数目大于init_min_num_inliers(100)

②两视图Triangulation

  • R和t满足启动阈值

2 基础矩阵F

2.1 F矩阵的自由度=7
  • 从cv角度,3*3矩阵9个参数
    • 因为up2scale自由度-1
    • 又因为rank(F)=2自由度-1
  • 从摄影测量角度:
    • 5pose
      • 确定射线位姿)
    • +2 intrinsic
      • fx和fy,通常s=0,主点坐标(cx,cy)不参与优化
2.2 求解方法(都需要归一化):
  • ①八点法,有唯一解,考虑噪声实际是转为:构建超定方程 ,最小二乘求解
    • 注意:由于会有误差,我们需要强制约束rank=2
      • 具体方法:将SVD分解的特征值最后一项(最小项)置为0再重构,代码如下:
// Enforcing the internal constraint that two singular values must non-zero
  // and one must be zero.
  Eigen::JacobiSVD<Eigen::Matrix3d> fmatrix_svd(
      ematrix_t.transpose(), Eigen::ComputeFullU | Eigen::ComputeFullV);
  Eigen::Vector3d singular_values = fmatrix_svd.singularValues();
  singular_values(2) = 0.0;
  const Eigen::Matrix3d F = fmatrix_svd.matrixU() *
                            singular_values.asDiagonal() *
                            fmatrix_svd.matrixV().transpose();
  • ②七点法:9个未知参数用7个点解,未知数>方程数。可以构建新的方程来解决:
    • 有9-7=2个nullspace,把方程改写为:
      • F=λF1+μF2,λ+μ=1

3 本质矩阵E

3.1 本质矩阵自由度为5
  • cv角度:6-1=5
    • 相机位姿6pose(3位置、3角度)
    • 尺度up2scale -1
  • 摄影测量角度:直接5pose定向元素
3.2 理解本质矩阵和基础矩阵:
  • 基础矩阵内涵相机内参,本质矩阵无关内参
3.3 本质矩阵的求解:
  • 8点法,与8点法求F同,构建超定方程解最小二乘
    • 注意强制约束,通常是令λ1=(λ1+λ2)/ 2,λ2=λ1,λ3=0
  • 5点法,非线性求解过程复杂,一般都是计算基础矩阵F后结合内参K求解本质矩阵E(如orbslam2)
  • 综合来说5点法比8点法好一些,8点法适用于车载的forward-facing,但在sideways-facing表现不如5点法

4 单应矩阵H: DLT求解

5 从矩阵恢复R和t

5.1 本质矩阵Essential恢复Rt
  • SVD解出4个解
  • 三角化求出前方3D点最多的那组姿态参数
5.2 单应矩阵Homography恢复Rt
Reference:大纲参考网课

你可能感兴趣的:(自动驾驶与三维重建,Colmap,计算机视觉,三维重建)