基于MVS的三维重建算法学习笔记(三)— 立体匹配概述
本人书写本系列博客目的是为了记录我学习三维重建领域相关知识的过程和心得,不涉及任何商业意图,欢迎互相交流,批评指正。
在之前的博客中简单介绍过立体匹配,它是MVS稠密重建中的重要环节,而在这篇博客中,将详细的介绍立体匹配的相关概念,其中详细的过程和原理参考教程:70. 三维重建5-立体匹配1,立体匹配算法总体理解,该作者对意大利Bologna大学的Stefano Mattoccia教授在2012年编写的"Stereo vision: algorithms and applications"做了详细且透彻的解读。

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

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

接下来,利用校准得到的图像点对信息进行极线矫正,目的是消除镜头畸变,并且将立体点对转华为标准形式。(对应点对依据对极约束理论被限制两图像极线所形成的平面上,并且通过极线矫正进而将对应点的二维搜索空间缩小到了一维)

当做到这一点后,就可以很方便的在水平方向搜索一个图像上的一点在另外一个图像上的对应点。如上图所示,左图上的一点p在右图上的对应点是p’,视差
d
=
x
R
−
x
T
d=x_R-x_T
d=xR−xT,而b是两个相机光心的距离, f是焦距。
旨在寻找目标图像在原图相中的对应点,而找到对应点后,求取空间点和相机之间距离的关键就变成了求取其投影点视差了。而整个图像上所有点的视差构成了一幅图像,这个图像叫做视差图;而通过校正后的一对图像获取到视差图的过程,叫做立体匹配;立体匹配属于立体视觉以及MVS稠密重建的重要部分,将在下面详细讨论;
如上图所示,根据相似三角形的计算,很容易可以得到物体距离相机观测点的距离(或深度):
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=Z−f(b+xT)−xR→Z=xR−xTb⋅f=db⋅f
而给定视差图(立体匹配得到)、基线和焦距(校准后),三角测量就可以计算三维空间中点对应的位置,从而得到深度图。

若想要求得两个已校正的图像间的视差图,即转换为给定源图像上一点,在目标图像中的同一行约束范围
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]70. 三维重建5-立体匹配1,立体匹配算法总体理解
[2]“Stereo vision: algorithms and applications”
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。
我有一个驼峰式字符串,例如:JustAString。我想按照以下规则形成长度为4的字符串:抓取所有大写字母;如果超过4个大写字母,只保留前4个;如果少于4个大写字母,则将最后大写字母后的字母大写并添加字母,直到长度变为4。以下是可能发生的3种情况:ThisIsMyString将产生TIMS(大写字母);ThisIsOneVeryLongString将产生TIOV(前4个大写字母);MyString将生成MSTR(大写字母+tr大写)。我设法用这个片段解决了前两种情况:str.scan(/[A-Z]/).first(4).join但是,我不太确定如何最好地修改上面的代码片段以处理最后一种
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我已经在mountainlion上成功安装了rbenv和rubybuild。运行rbenvinstall1.9.3-p392结束于:校验和不匹配:ruby-1.9.3-p392.tar.gz(文件已损坏)预期f689a7b61379f83cbbed3c7077d83859,得到1cfc2ff433dbe80f8ff1a9dba2fd5636它正在下载的文件看起来没问题,如果我使用curl手动下载文件,我会得到同样不正确的校验和。有没有人遇到过这个?他们是如何解决的? 最佳答案 tl:博士;使用浏览器从http://ftp.rub
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总