UCAS - AI学院 - 计算机视觉专项课 - 第7讲 - 课程笔记

UCAS - AI学院 - 计算机视觉专项课 - 第7讲 - 课程笔记

立体视觉与三维重建

  • 立体视觉重建:多视角图像——相机位姿——三维重建模型
  • 图像获取
    • 室内环境
      • 光照可控
      • 相机稳定
    • 室外环境
      • 自然光线
      • 手持拍摄
    • 网络图片
      • 不可控
  • 相机位姿获取
    • 机械臂——小场景
    • 人工标志物——小场景
    • Global SfM——大场景(有先验)
    • Incremental SfM——大场景
  • 三维建模基本流程
    • 相机位姿——图像一致性——三维模型
    • 图像一致性
      • 对应图像投影点周围区域的一致性
      • SSD(可进一步优化):ρSSD(f,g)=fg2\rho_{SSD}(f, g) = \|f - g\|^2
      • SAD(更加鲁棒):ρSAD(f,g)=fg\rho_{SAD}(f, g) = \|f - g\|
      • NCC(避免光照问题):ρNCC(f,g)=(ffˉ)(ggˉ)δfδg\rho_{NCC}(f, g) = \frac {(f - \bar f) \cdot (g - \bar g)}{\delta_f \cdot \delta_g}
  • 两视图三维建模——立体视觉
    • 极几何
      • 人类视觉远近的感知:对应点在左右两幅图像上水平方向的跳变
      • 问题:需要找到所有点的匹配点
      • PlP_l在右图像的匹配点在PlP_l的极线上——一维搜索
    • 极线校正
      • 理想情形:左右图像在同一水平面,x轴与基线平行,对应点具有相同y坐标
      • PlP_l在右图像的极线平行于x轴——水平扫描线(坐标易于确定)
      • 很难保证完全平行——极线需要进一步矫正
      • 设置一个虚拟摄像机实现矫正——通过图像单应变换H\bold H完成
        • H=K2R2R11K11\bold H = \bold K_2 \bold R_2 \bold R_1^{-1} \bold K_1^{-1}
      • 立体视觉假设都完成了校正
    • 单应变换的几种形式
      • 经典单应:平面上的点到投影面的单应
      • 通过空间平面诱导的单应(空间点在一个平面(X,n)(\bold X, \bold n)上):H=K2(R2R11+R2(C1C2)nnX)K11\bold H = \bold K_2 (\bold R_2 \bold R_1^{-1} + \frac {\bold R_2 (C_1 - C_2) \bold n^\top}{\bold n^\top \bold X}) \bold K_1^{-1}
        • 基本矩阵满足所有空间点,单应矩阵只满足同平面点
      • 相机纯旋转单应(与空间平面(X,n)(\bold X, \bold n)无关):H=K2R2R11K11\bold H = \bold K_2 \bold R_2 \bold R_1^{-1} \bold K_1^{-1}
        • 极线校正:纯旋转虚拟相机
    • 视差:左右图像匹配点在水平线上的差异
      • 视差大小与距离的远近成反比
    • 视差图:逐像素视差对应的灰度图
      • 越亮越近
      • 利用视差图可以得到单视点下的三维模型(稠密点云)
    • 视差和深度
      • UCAS - AI学院 - 计算机视觉专项课 - 第7讲 - 课程笔记

      • 基线BB:两个相机光心之间的距离

      • 相似三角形:XZ=xlf\frac {X}{Z} = \frac {x_l}{f}XBZ=xrf\frac {X-B}{Z} = \frac {x_r}{f}

      • 深度:Z=BfxlxrZ = \frac {B \cdot f}{x_l - x_r}

      • 可见,视差和深度成反比

    • 基线越大、焦距越大、同样分辨率,深度测定精度越高
      • 但是公共可见区域就会很小
      • 需要折衷选择
    • 建模流程
      • 极线校正——立体匹配(视差图)——三角化(寻找比例因子,稠密点云)
  • 立体匹配
    • 最简单:对点pp,寻找极线上颜色最相似点:dp=argmindc(p,pd)d_p = \arg \min_d c(p, p - d)
      • 可能会有很多颜色类似的点
      • 比较容易出现错误
    • 平滑性约束
      • 真值视差图大多数区域平滑(边缘存在跳变)
      • 匹配过程中考虑平滑性约束
    • 窗口匹配法
      • 对于一个点pp,在极线上寻找对应点
      • 通过一个窗口区域衡量匹配程度
      • dp=argmindqWpc(p,pd)d_p = \arg \min_d \sum_{q \in W_p} c(p, p - d)
      • 提高度量的稳定性和鲁棒性
      • 但是结果仍然不够理想,窗口尺寸影响结果
        • 弱纹理,窗口内像素值类似,度量函数不显著
        • 孔径问题,包含纹理区域太小,区分度不足(纹理沿水平分布)
        • 重复纹理,容易产生匹配误差
        • 前景放大效应,遮挡问题造成,尽在一个图像中出现的点造成匹配错误,背景错分为前景,造成前景放大(错误匹配点视差增大)
      • 窗口选择
        • 大窗口,利于解决前三个问题
        • 小窗口,利于解决后一个问题
    • 自适应窗口匹配法
      • 融合大小窗口的优势
      • 位于边缘区域的窗口不利于匹配
      • 自适应窗口
        • 分为9个子窗口
        • 每个子窗口分别计算相似度
        • 选择5个相似度最高的子窗口作为整个窗口相似度结果
      • 可以有效解决边缘区域的视差
    • 自适应权值窗口匹配法
      • dp=argmindqWpw(p,q)c(p,pd)d_p = \arg \min_d \sum_{q \in W_p} w(p, q) c(p, p - d)
      • 对每一个像素值独立衡量
      • w(p,q)w(p, q)表示两个像素点视差相同的可能性
      • 权值设定
        • 颜色,颜色相似,视差相同可能性大
        • 距离,距离中心点越近,视差相同可能性大
      • w(p,q)=exp((δcpqγc+δgpqγg))w(p, q) = \exp \left(- \left( \frac{\delta c_{pq}}{\gamma_c} + \frac {\delta g_{pq}}{\gamma_g} \right)\right)
        • 颜色:RGB差的绝对值和
        • 距离:欧式距离
        • 两个γ\gamma人工指定
    • PathMatch Stereo
      • 放开两图像对应窗口区域相同的强假设(所有空间平面平行于相机)
      • 寻找真实的平面朝向
      • 空间面片patch的表达:dd,一个自由度;nn,两个自由度——单应变换
      • 窗口的投影区域(单应变换)上计算相似度
      • 三个自由度,在连续三维空间寻找——解决!
      • 核心思想
        • 随机生成每个像素点的深度和法向
        • 左上到右下(随机传播)
          • 检测邻域点的深度和法向是否更好(新面片——新单应——新投影——更高的一致性——更好)
          • 检测自身随机扰动后的点是否更好
        • 右上到左下
      • 根据:大数定律
  • 标准评测库
    • Middlebury
    • KITTI
    • SOTA:PatchMatch,CRF,CNN
  • 多视图三维建模
    • 寻找空间中具有图像一致性的点
    • 差异:相机不能保证位置
    • 分类
      • 深度图融合方法 Depth Map
      • 体素方法 Voxel
      • 点云扩散方法 Feature Point
    • 深度图融合MVS
      • 为每一幅图像选择邻域图像构成立体图像对
      • 计算每一幅图像的深度图
      • 深度图融合
      • 抽取物体表面
    • 体素MVS
      • 等价为一个3D空间Voxel的标记问题
      • Voxel表达:类似3D的像素表示
      • 物体表面:物体内部体素和外部体素的界面
      • 离散空间标记:典型MRF优化问题
      • 利用两个体素的相似度差异对分类结果进行惩罚:一致性越低,惩罚越高——对应二阶能量越大
      • 一阶能量:气球力,推动平面向外扩张
      • 能量函数:E(kv)=vΦ(kv)+(v,w)NΨ(kv,kw)E({k_v}) = \sum_v \Phi (k_v) + \sum_{(v, w) \in N} \Psi (k_v, k_w)
      • 求解:图割算法
        • 只有两个label
        • 二阶项满足sub-modular约束
      • 问题:计算代价太大
      • 处理大场景?自适应多分辨率表格(表面高分辨率,其余低分辨率)
      • Pros
        • 生成规则点云
        • 易于提取Mesh(连续面片)
      • Cons
        • 精度取决于Voxel粒度
        • 难以处理大场景
    • 特征点扩散MVS
      • 从初始稀疏特征点扩展得到点云
      • Patch表达:中心 + 法向
      • 步骤
        • 生成初始点云
        • 点云扩散(向空白区域扩散)
        • 点云过滤(去除深度不一致或一致性较低点)
      • Pros
        • 点云精度高
        • 点云分布均匀
      • Cons
        • 弱纹理区域造成扩散空洞
        • 需要一次读入所有图像