基于MVS的三维重建算法学习笔记(三)— 立体匹配概述

声明

本人书写本系列博客目的是为了记录我学习三维重建领域相关知识的过程和心得,不涉及任何商业意图,欢迎互相交流,批评指正。

立体匹配

在之前的博客中简单介绍过立体匹配,它是MVS稠密重建中的重要环节,而在这篇博客中,将详细的介绍立体匹配的相关概念,其中详细的过程和原理参考教程:70. 三维重建5-立体匹配1,立体匹配算法总体理解,该作者对意大利Bologna大学的Stefano Mattoccia教授在2012年编写的"Stereo vision: algorithms and applications"做了详细且透彻的解读。

立体视觉系统概述

在这里插入图片描述
在上一文中介绍了许多立体视觉相关的基础知识,将每一部分进行整合运用,就能够建立起完整的立体视觉系统,其中包括相机标定、极线矫正、立体匹配、三角测量,最终得到场景或者物体的深度信息:

1. 相机标定

在这里插入图片描述

相机标定的目的是获得两个相机的内参(焦距、图像中心、畸变参数等)以及外参(世界坐标系与相机坐标系之间的变换矩阵R和T),之后对图像进行校准,处理并获取图像的立体点对;

2. 极线矫正

在这里插入图片描述
接下来,利用校准得到的图像点对信息进行极线矫正,目的是消除镜头畸变,并且将立体点对转华为标准形式。(对应点对依据对极约束理论被限制两图像极线所形成的平面上,并且通过极线矫正进而将对应点的二维搜索空间缩小到了一维)
在这里插入图片描述
当做到这一点后,就可以很方便的在水平方向搜索一个图像上的一点在另外一个图像上的对应点。如上图所示,左图上的一点p在右图上的对应点是p’,视差 d = x R − x T d=x_R-x_T d=xRxT,而b是两个相机光心的距离, f是焦距。

3. 立体匹配

旨在寻找目标图像在原图相中的对应点,而找到对应点后,求取空间点和相机之间距离的关键就变成了求取其投影点视差了。而整个图像上所有点的视差构成了一幅图像,这个图像叫做视差图;而通过校正后的一对图像获取到视差图的过程,叫做立体匹配;立体匹配属于立体视觉以及MVS稠密重建的重要部分,将在下面详细讨论;

4. 三角测量

如上图所示,根据相似三角形的计算,很容易可以得到物体距离相机观测点的距离(或深度): b Z = ( b + x T ) − x R Z − f → Z = b ⋅ f x R − x T = b ⋅ f d \frac{b}{Z}=\frac{(b+x_T)-x_R}{Z-f} \rightarrow Z=\frac{b·f}{x_R-x_T}=\frac{b·f}{d} Zb=Zf(b+xT)xRZ=xRxTbf=dbf
而给定视差图(立体匹配得到)、基线和焦距(校准后),三角测量就可以计算三维空间中点对应的位置,从而得到深度图。
在这里插入图片描述

立体匹配基本流程

若想要求得两个已校正的图像间的视差图,即转换为给定源图像上一点,在目标图像中的同一行约束范围 d m a x d_{max} dmax内搜索与源图像匹配的对应点,如下图1所示;设匹配代价为 ∣ I R ( x , y ) − I T ( x + d , y ) ∣ |I_R(x,y)-I_T(x+d,y)| IR(x,y)IT(x+d,y),那么目标图像中所有待定像素的匹配代价如下图2所示;WTA(Winner Takes All,赢者通吃)是一种搜索策略,即从所有候选像素中挑选匹配代价最低的最为对应点;
在这里插入图片描述
在这里插入图片描述
但是由于噪声和距离等因素的影响,通过最基础的方法并不能得到理想的视差结果,这就引出了立体匹配优化视差结果的基本思路——图像预处理、匹配代价计算、代价聚合、视差优化、视察细化;
在这里插入图片描述

基本思路

该部分@Wang Hawk也对"Stereo vision: algorithms and applications"进行了详细的解读,具体分为以下几个模块:
71. 三维重建6-立体匹配2,立体匹配中的代价聚合
72. 三维重建7-立体匹配3,立体匹配算法中的视差优化
73. 三维重建8-立体匹配4,利用视差后处理完善结果

  1. 图像预处理(Pro-processing):若两幅图像的亮度、噪声不一致,一般会先对图像做预处理,使得两幅图像的整体质量区域一致;
  2. 匹配代价计算(Cost Computation):衡量待匹配像素与候选像素之间的相关性。两个像素无论是否为同名点,都可以通过匹配代价函数计算匹配代价,代价越小则说明相关性越大,是同名点的概率也越大。
  3. 局部代价聚合(Cost aggregation):通过对代价立方体中同一视差的代价进行某种程度的聚合,来减少或消除错误代价的影响;
  4. 全局视差优化(Disparity optimization):通过最优化某个能量函数 E ( d ) = E d a t a ( d ) + E s m o o t h ( d ) E(d)=E_{data}(d)+E_{smooth}(d) E(d)=Edata(d)+Esmooth(d),寻找到每个像素的最优视差结果,使得全局的、整体的匹配代价最小;
  5. 视差细化/后处理(Disparity refinement):根据前面的步骤最终将输出一张视差图,然而即便是在上面那些受约束的场景,得到的视差图依然不是完美的,还是有很多错误。因此,还需要一个细化的步骤,来消除其中的错误,得到更准确的视差图;

方法分类

关于立体匹配的策略,一般存在几种不同(不是互相排斥)的类别:

  1. 局部匹配算法:1+2+WTA(Winner Takes All,赢家通吃)——使用简单的WTA视差选择策略,并且通过在支持窗口(support window)上聚合匹配代价来减少模糊(ambiguity);
  2. 全局匹配算法:1+(可选2)+3——使用基于像素的匹配代价,通过最优化某个能量函数 E ( d ) = E d a t a ( d ) + E s m o o t h ( d ) E(d)=E_{data}(d)+E_{smooth}(d) E(d)=Edata(d)+Esmooth(d),寻找到每个像素的最优视差结果;
  3. 半全局匹配算法:1+2+3,例如SGM;

参考文献和资料

[1]70. 三维重建5-立体匹配1,立体匹配算法总体理解
[2]“Stereo vision: algorithms and applications”

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于深度学习三维重建(Multi-View Stereo,MVS),最常用的方法之一是使用卷积神经网络(Convolutional Neural Networks,CNN)进行处理。MVS 是通过从多个视角的图像中恢复场景的维几何形状。下面是一个使用深度学习进行 MVS 的基本步骤: 1. 数据准备:收集多个视角的图像,并估计它们之间的相机姿态。通常会使用结构光或者多视角立体摄影机等硬件设备来获取这些信息。 2. 特征提取:对每个图像进行特征提取,例如使用卷积神经网络(CNN)提取图像的特征表示。常用的网络架构包括 VGG、ResNet、或者用于图像配准的特定架构。 3. 匹配:在每个视角中,将图像特征与其他视角中的特征进行匹配,以找到对应的特征点。这可以通过计算特征之间的相似度,例如使用光流法或者局部特征描述子。 4. 深度估计:使用匹配的图像特征来估计每个像素点的深度值。这可以通过训练一个深度估计网络,将图像中每个像素处的特征输入网络,预测其深度值。 5. 高级优化:对估计的深度图进行后处理和优化,以提高重建结果的精度和稳定性。这可以包括平滑滤波、边缘保持、去除噪声等技术。 总体而言,深度学习在MVS中的应用可以显著提高重建的精度和效率,但也需要大量的训练数据和计算资源来实现。在实际应用中,还需要考虑场景复杂性、纹理信息和光照变化等因素,以获取更准确的三维重建结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

右边的口袋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值