Two-View Stereo

  • 输入:具有已知摄像机矩阵的stereo对(已校准)

  • 输出:密集深度图

Basic Stereo Matching Algorithm

  • 使用一对校准的相机,我们可以通过以下方式重建 3D:Correspondence + Triangulation

  • 具体流程:对左图中的每一个像素

    1. 在右侧图像中找到相应的极线
    2. 检查极线上的所有像素点并选择最佳匹配
    3. 对匹配点进行三角测量(Triangulate)以获取深度信息

A Simple Stereo System

  • 最简单的情况:极线 = 相应的扫描线

  • 相机的图像平面彼此平行并平行于baseline

  • 相机中心位于同一高度

  • 焦距相同

  • 然后极线沿着图像的水平扫描线落下

image.png

The Essential Matrix for Simple Stereo

  • Epipolar constraint for simple stereo:

image.png

  • 对应点的 v 坐标是相同的

A General Stereo System

  • 对于一般的stereo系统,图像平面通常不平行

  • 我们可以使用fundamental matrix来查找homographies,将每个视图投影到与基线平行的公共平面上(stereo校正)

image.png

Stereo Image Rectification: A Simple Implementation

  • 计算stereo图像校正的流程如下:

    1. 从基本矩阵或基本矩阵计算 R1
    2. 将右侧相机旋转 R1 以对齐两个相机的方向
    3. 通过 Rrect 旋转两个相机,使图像平面平行于基线,即将原始极点映射到无穷大
    4. 按 H 缩放两个图像以减少扭曲
  • 计算Rectifying Rotation Matrix(Rrect):

image.png

image.png

Depth from Disparity(差异的深度)

image.png

  • 差异与深度成反比

image.png

  • Effect of Baseline on Stereo Results:

    1. 更长的baseline:精度高误差小,但是难以匹配
    2. 更小的baseline:更容易匹配,但是精度低误差大
  • Basic Stereo Matching Algorithm的修正:

    1. 在处理像素前,如果需要,校正两个stereo图像
    2. 在右侧图像中找到相应的极线
    3. 检查极线上的所有像素点并选择最佳匹配
    4. 对匹配点进行三角测量(Triangulate)以获取深度信息。计算差异x - x’,并将z置为Bf / (x - x’)

Local Stereo Matching(使得局部的利益最大化)

Stereo Matching

  • 沿右侧扫描线滑动窗口并比较两个窗口的内容。不用考虑周围只在扫描线上特征匹配取最大值

  • 忽略暗区,因为 x > x′。下图中右侧不用进行计算,因为有x - x’ > 0的限制

image.png

Similarity Metrics

  • 考虑两个 K × K 像素窗口,这些像素被展平为矢量 wL 、 wR ∈ RK²。其中K是超参数,需要调整

image.png

  • SSD由于受到明暗影响,效果较差

  • Local Stereo Matching的流程:

    1. 选择视差范围 [0, D],D是最大范围
    2. 对于每个像素,x = (x, y) 计算最佳视差。与深度成反比,d越大depth越小
    3. 对两个图像执行此操作,并应用左右一致性检查以删除异常值。左找右,右找左,需要一致性

image.png

Local Stereo Matching: Half Occlusions(半遮挡)

  • 形成上图中“黑洞”的原因——半遮挡

  • 半遮挡:红色区域在左侧图像中可见,但在右侧图像中不可见

  • 半遮挡会导致输出深度图中出现裂缝或孔洞

Local Stereo Matching: Effect of Window Size

  • Small window size: more details, more noise

  • Larger windows size: less details, less noise (smoother results)

image.png

Local Stereo Matching: Failure Cases

  • 缺乏纹理,匹配失败。左右一致性检验时可以删除或者引入噪音

image.png

  • 相同的纹理可能导致匹配失败

image.png

  • 高光,漫反射可能导致匹配失败

image.png

Global Stereo Matching

Global Stereo Matching with Non-Local Constraints

  • local stereo为每个窗口独立查找最佳匹配项

  • 需要非局部约束和全局优化匹配

image.png

Non-Local Constraints

  • 唯一性:一个图像中的每个点最多应匹配另一个图像中的一个点。但是在极端情况下可能失效

  • 保序性:相应的点应按相同的顺序显示。大平面有小凸起时可能失效

  • 平滑性:相邻点应具有相似的视差值,即视差应为平滑

Disparity Space Image(视差空间图像)

  • 此图像的每个像素都表示匹配成本作为能量函数

  • 只用在“带”中运算即可,x’ > x为负不用考虑,偏移量大时也不用考虑

image.png

  • 将有效值的对角线带重新排列成一个矩形数组(在本例中为 64xN)。被称为视差空间图像 (DSI)

  • DSI 中的每条路径都是立体匹配(stereo matching),我们希望路径成本最低。即在矩阵条中路径能量相加找最优值

image.png

Correspondence Types in the Disparity Space Image(对应类型)

  • 斜着走说明匹配上,如果被遮挡,则坐标不变“横竖着走”,说明没有匹配上

image.png

  • 如果匹配:添加匹配代价(如果强度一致,则较小)

  • 如果被遮挡:添加不匹配的费用(大额费用)

image.png

Stereo Matching with Dynamic Programming

  • 问题设置:找到最小路径花费总和c(i,j):其中e(q,p)是每一条边的matching cost

image.png

  • 核心思路:𝐶(𝑖,𝑗) = min𝑘( e𝑘𝑗 + 𝐶(𝑘,𝑗 − 1))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import numpy as np

# Initialize
n, m = 5, 7
C = np.full((n, m), float('inf'))
e = np.random.rand(n, m)

# Base case: Initialize the first column, if needed.
for i in range(n):
C[i][0] = 0 # or any other base case value

# Fill the cost table according to the given formula
for j in range(1, m):
for i in range(n):
for k in range(n):
C[i][j] = min(C[i][j], e[k][j] + C[k][j - 1])
  • 上述算法的复杂度:指数->多项式

  • 优化:扫描网格以计算给定其左上角邻居的每个节点的最佳成本

  • 最佳结构如下:

image.png

image.png

image.png

  • 可以利用矩阵 B 通过回溯来恢复路径

Occlusion Filling

  • 使用扫描线中位于其前面的最近有效像素的值填充左侧被遮挡的像素

  • 同样,对于右遮挡,查找右侧的有效像素

image.png

Dynamic Programming: Seam Carving for Resizing

  • 问题描述:对图片进行压缩会导致图片中的内容变形。处理时应该将不重要的部分删去一些,对视觉影响小的部分,即能量小的部分删去一些。通过最优路径来估计能量大小

image.png

  • 通过动态规划找到接缝(Seam):

image.png

Stereo Matching via Global Optimization

  • 动态规划只考虑了每条扫描线的优化

  • 可以将输出视差图像视为一个整体,形成E函数

image.png

  • 能量函数可以用graph cuts求解:

image.png

Global Optimization with Joint Bilateral Upsampling

  • 为了显著提高速度:
    1. 降低输入图像的采样率
    2. 估计深度图像
    3. 对深度图像进行上采样

如何对结果上采样:重复使用原始输入图像中的边缘信息

Deep Learning for Stereo Matching

image.png

Unsupervised Learning for Stereo Matching

image.png

Activate Stereo

Active Stereo with Structured Light

  • 用打了光的图片作匹配效果更好

  • 将“结构化”光图案投射到对象上:简化对应问题,使用一台相机和一台投影仪

image.png

Kinect: Structured Infrared Light

Apple TrueDepth

Laser Scanning

  • 通过凹陷程度来推算深度

image.png