[三维重建]立体匹配概述

立体匹配

立体匹配是二维图像恢复三维图像的其中一个阶段,目的是得到稠密的三维点云,是制作数字表面模型、深度估计、三维重建、现实增强、工业缺陷检测的基础

相关论文

最新的关于立体匹配的综述 A Survey on Dee p Stereo Matching in the Twenties在这里插入图片描述

先验知识

坐标转换

在这里插入图片描述

核线约束

传统思维寻找左图的每个像素的视差,那么需要遍历右图中的每一个像素,这样耗时过多,因此引入“核线”的约束来减少搜索空间降低复杂度。如下图所示 O1、O2 为光心,O1O2 为基线,PO1O2 组成的平面称为核平面,基线与两个像平面的交点称为基点为 e1,e2。如果 P 在 image1 的投影为 P1,那么 P 在 image2 上的投影一定在核平面与像平面的交线 e2P2 上,这样只需要搜索 e2P2 即可。
在这里插入图片描述

上面的针对两个像平面与基线不平行的情况,为了让匹配变得更加方便,通过相机标定将核线矫正将像平面与基线平行使得核平面与两张影像的交线位于同一个扫描行,这样同一核线对位于两张影像的同一行,即同名点对的行号一定相等,只存在列号的差异
在这里插入图片描述## 现有方法分类

现有精度最优的方法是全局方法,但是其计算复杂度较高,半全局方法在实时与精度达到均衡,使用较为广泛.
在这里插入图片描述

双目立体匹配

  1. 常用数据集:kitti,MiddleBuary
  2. 立体匹配原理讲解:

https://zhuanlan.zhihu.com/p/603071560

https://zhuanlan.zhihu.com/p/378738199

双目相机拍摄同一场景的左右视角的图像,运用立体匹配算法获取视差图进而获取深度图;
在这里插入图片描述

视差 d 为 X L X_L XL- X R X_R XR
在这里插入图片描述

[!TIP]
视差图:立体匹配任务的输出结果,是一种灰度图像,用来表示双目图像中每个像素的视差(Disparity)。视差是指同一场景中的某一点,在左右两幅图像中的位置偏移量。这个偏移量反映了该点的深度信息:偏移量越大,深度越小(物体离相机越近);偏移量越小,深度越大(物体离相机越远)
视差图转深度图:
Z = f ⋅ B d Z = \frac{f \cdot B}{d} Z=dfB其中 Z 为深度,f 为相机焦距,B 为基线长度即两个相机光学中心之间的距离,d 为视差值
离得越远,视差越小,离得越近,视差越大

基于深度学习的立体匹配的一般步骤

立体匹配的一般步骤为:特征提取、代价计算、代价聚合和视差回归,其本质就是是寻找匹配点,传统代价匹配的计算利用的是原图。但是在深度学习的方法中,我们一般先经过 feature extractor 进行特征提取。然后我们把左右特征图 correlate 起来.

特征提取:

通过利用卷积层提取左右图像的特征,将局部特征(特征提取网络)和上下文信息(上下文信息抓取网络)结合起来进行视差估计,全局信息和局部信息结合形成 cost volume

匹配代价计算:

对于左图中的每一个像素,算法会在右图中根据预定义的视差范围搜索所有可能的匹配像素点,对于每一个可能的视差值,算法会计算左图中与右图像中像素点的匹配差值(也就是总图像素点根据视差找到右图的像素点,然后计算匹配度)

代价体构建:

计算出来的匹配代价会被存储在一个 WxHxD 的三维矩阵中,可以将图像(WxH)拉高至 D(视差的最大值),对应于下图的红色点 C(x,y,d)表示的就是左图(x,y)像素点与右图(x-d,y)的匹配度
在这里插入图片描述

[!TIP]
代价体:
Cost Volume 就是将每一个像素的所有可能的视差遍历一遍,让网络更容易学习到不同视差下的特征的对应关系.假设你正在找两个图像中的匹配点。对于每个点,你都要尝试不同的视差值(一般可以计算出视差的范围),并计算不同视差下的“匹配质量”(代价)。最终,你得到一个立体结构(HxWxD),它告诉你每个像素在每个可能的视差下的匹配程度。

代价聚合:

视差回归:

现有方法

PSMNet在这里插入图片描述

  1. PSMNet,一个由两个主要模块组成的金字塔立体匹配网络:空间金字塔池化和 3D CNN。空间金字塔池化模块通过在不同尺度和位置聚合上下文信息,利用全局上下文信息的容量来形成成本体积
  2. 早期使用 CNN 的方法将对应估计问题视为相似度计算[27, 30],其中 CNN 计算一对图像块之间的相似度分数,以进一步确定它们是否匹配。
  3. CNN 在准确性和速度方面都取得了显著提升,但在本质上难以处理的区域(如遮挡区域、重复图案、无纹理区域和反射表面)中找到准确的对应点仍然很困难。因此,必须将来自全局上下文信息的区域支持纳入立体匹配中。
  4. 利用全局上下文信息主要有两种方法:编码器-解码器架构和金字塔池化
  5. PSMNet,它由一个用于有效融合全局上下文的 SPP[9, 32]模块和一个用于成本体积正则化的堆叠 hourglass 模块组成

Attention-Aware Feature Aggregation for Real-time Stereo Matching on Edge Devices

RAFT

在这里插入图片描述

  1. 深度学习已被证明是传统方法的可行替代方案。深度学习可以绕过优化问题的公式化,并训练网络直接预测光流
  2. RAFT 由 3 个主要组件组成:(1)一个特征编码器,从输入图像中提取每个像素的特征,以及一个上下文编码器,仅从 I1 中提取特征。(2)一个相关层,通过计算所有特征向量对的内积来构建一个 4D W×H×W×H 相关体积。4D 体积的最后两个维度在多个尺度上池化,以构建一组多尺度体积。(3)一个更新算子,通过使用当前估计来从相关体积集中查找值,循环更新光流。
  3. 我们通过构建所有对之间的完整相关体积来计算视觉相似度,给定图像特征 f&g ,相关体积是通过计算所有特征向量对的点积形成的

RAFT-Stereo

在这里插入图片描述

  1. 光流和校正立体匹配是紧密相关的问题。在光流中,任务是预测一个像素级的位移场,使得对于第一帧中的每个像素,我们都可以估计其在第二帧中的对应点。在校正立体匹配中,任务相同,但额外约束是 x 位移始终为正,对应的点位于水平线上——因此,y 位移始终为 0。

IGEV

在这里插入图片描述

  1. 与 RAFT-Stereo[24]不同,我们构建了一个 CGEV,它编码非局部几何和上下文信息以及局部匹配细节,从而显著提高每个 ConvGRUs 迭代的效率。此外,我们提供了一个更好的初始视差图,供 ConvGRUs 更新器开始使用,从而比 RAFT-Stereo[24]收敛得更快
  2. 引入迭代几何编码解决病态区引发的歧义
  3. 我们的方法通过 softargmin 从 GEV 回归初始视差图,这可以为基于 ConvGRU 的更新算子提供一个准确的起点,从而实现快速收敛。相比之下,RAFT-Stereo 从初始起点 𝐝0 =0 开始进行视差预测,需要大量 ConvGRUs 迭代才能达到优化结果。
  4. IGEV-Stereo 首先构建一个几何编码体积(GEV),通过 3D CNN 编码几何和上下文信息,并将其与成对相关性(APC)结合形成组合几何编码体积(CGEV)。然后我们从 GEV 回归一个初始视差,并通过从 CGEV 检索的局部代价值使用 ConvGRUs 迭代更新它。
  5. 它包括一个多尺度特征提取器、一个组合几何编码体积、一个基于 ConvGRU 的更新算子和一个空间上采样模块。
  6. 成本体积在遮挡区域、大纹理/反射区域和重复结构中仍可能遭受模糊问题

Selective-IGEV

在这里插入图片描述

基于小波变换相位基元的立体匹配系统

  1. 征 匹 配 算法 则 是 较 多 地 利 用 了 景物 的结构信息 ,利用 不 同 尺 度 的 图 象 特 征 来分 析 景物 ,从 而 避 免 了 相 关法 的缺 陷
  2. 小 波 变 换 的 多分 辨 率分 解 特 性 更 加 符 合 人 类的视 觉 机 制 ,与计 算 机 视 觉 中 由粗 到 细 的认 识过 程 十分 相 似 ,更加 适 合 视 觉 信息 的 变 换 处 理

OpenSterreo

数据集

  1. KITTI

1)文件目录结构,其中 training 中立体匹配需要的 image2 表示左图,image3 表示右图,视差的 GT 在 disp_occ_0 中,立体匹配只用到 xxxxx_10.png 的照片,xxxxxx_11 用于光流匹配.

在这里插入图片描述

2)数据格式

视差图为值[0,256]的 uint16 的 png 图片,其中 0 值表示无效预测,可以通过以下方法计算像素的差值

将 uint16 值转换为浮点数并除以 256.0,即可计算出像素的差距;

disp(u,v) = ((float)I(u,v))/256.0;

评价指标

  1. EPE(端点误差):预测和真实视差值之间的平均绝对差异

E P E = 1 N ∑ p ∣ D p − D p g l ∣ EPE = \frac{1}{N} \sum_p |D_p - D_p^{gl}| EPE=N1pDpDpgl

  1. bad-τ(坏点度量)定义为视差估计偏离真实值超过 τ 个像素的像素百分比

b a d − τ = 1 N ∑ p δ ( ∣ D p − D p g l ∣ > τ ) bad-\tau = \frac{1}{N} \sum_p \delta (|D_p - D_p^{gl}| > \tau) badτ=N1pδ(DpDpgl>τ)

  1. D1(D1 错误)考虑那些视差误差超过 3 个像素和真实值 5% 的视差的占比

D 1 = 1 N ∑ p δ ( ∣ D p − D p g l ∣ > 3 λ ) ∧ ∣ D p − D p g l ∣ > 0.05 ⋅ D p g l D1 = \frac{1}{N} \sum_p \delta (|D_p - D_p^{gl}| > 3\lambda) \land |D_p - D_p^{gl}| > 0.05 \cdot D_p^{gl} D1=N1pδ(DpDpgl>3λ)DpDpgl>0.05Dpgl

立体匹配难点

  1. “ill-posed region”:颜色亮度差异/噪声/反光区域,弱纹理区域,重复纹理,透明物体,遮挡以及深度不连续

在这里插入图片描述在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

warren@伟~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值