Stereo Matching文献笔记之(一):《Cross-Scale Cost Aggregation for Stereo Matching》读后感~...

2023-12-02 10:30

本文主要是介绍Stereo Matching文献笔记之(一):《Cross-Scale Cost Aggregation for Stereo Matching》读后感~...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

 

 

最近,在做立体匹配方向相关的研究,先去网上找最新鲜的论文,看到了这篇文献(简称CSCA),来源于CVPR2014,令我惊奇的是,作者竟然提供了详细的源代码,配置运行了一下,效果还真不错,速度也还可以,具有一定的实用价值,所以拿来和大家分享一下。

(转载请注明:http://blog.csdn.net/wsj998689aa/article/details/44411215, 作者:迷雾forest)

1. 立体匹配概念

立体匹配的意思是基于同一场景得到的多张二维图,还原场景的三维信息,一般采用的图像是双目图像,如下所示,第一幅图和第二幅图分别是双目相机得到的左图和右图,第三幅图就是视差图,一看就知道,这就是场景三维图像。
左图                                                              右图                                                                 视差图
目前,立体匹配领域,主要有两个评测网站,一个是KITTI(http://www.cvlibs.net/datasets/kitti/eval_stereo_flow.php?benchmark=stereo),另一个是middlebury(http://vision.middlebury.edu/stereo/),两个网站上的算法都交叉,但是又不完全一样,相对来说,KITTI更好一点,对算法的性能评测更好,虽然时间测算的并不准确(CSCA竟然要140s,太离谱了)。
下面说说立体匹配最基本的步骤:
1)代价计算。计算左图一个像素和右图一个像素之间的代价。
2)代价聚合。一般基于点之间的匹配很容易受噪声的影响,往往真实匹配的像素的代价并不是最低。所以有必要在点的周围建立一个window,让像素块和像素块之间进行比较,这样肯定靠谱些。代价聚合往往是局部算法或者半全局算法才会使用,全局算法抛弃了window,采用基于全图信息的方式建立能量函数。
3)深度赋值。这一步可以区分局部算法与全局算法,局部算法直接优化代价聚合模型。而全局算法,要建立一个能量函数,能量函数的数据项往往就是代价聚合公式,例如DoubleBP。输出的是一个粗略的视差图。
4)结果优化。对上一步得到的粗估计的视差图进行精确计算,策略有很多,例如plane fitting,BP,动态规划等。这里不再熬述。
根据我的理解,可以看作为一种全局算法框架,通过融合现有的局部算法,大幅的提高了算法效果。

2. 论文贡献

文献《Cross-Scale Cost Aggregation for Stereo Matching》有三大贡献,第一,设计了一种一般化的代价聚合模型,可将现有算法作为其特例。第二,考虑到了多尺度交互(multi-scaleinteraction),形式化为正则化项,应用于代价聚合(costaggregation)。第三,提出一种框架,可以融合现有多种立体匹配算法。
本文一直强调利用了不同尺度图像“间”的信息,不同于一般的立体匹配算法,只采用了同样尺度下,图像的“内”部结构信息,CSCA利用了多尺度信息,多尺度从何而来?其实说到底,就是简单的对图像进行高斯下采样,得到的多幅成对图像(一般是5副),就代表了多尺度信息。为什么作者会这么提,作者也是从生物学的角度来启发,他说人类就是这么一个由粗到精的观察习惯(coarse-to-line)。生物学好奇妙!
该文献生成的稠密的视差图,基本方法也是逐像素的(pixelwise),分别对每个像素计算视差值,并没有采用惯用的图像分割预处理手段,如此看来运算量还是比较可观的。

3. 算法流程

算法流程图如下所示:
其实,这篇文章的论述是很清晰的,上图是我根据自己的理解,画的一份算法流程图,下面我根据这份流程图,对文章脉络进行说明,对关键的公式进行解释。
1. 对左右两幅图像进行高斯下采样,得到多尺度图像。
2. 计算匹配代价,这个是基于当前像素点对的,通常代价计算这一步并不重要,主要方法有CEN,CG,GRD等几种,论文中给出了GRD,公式如下所示:
 
这个公式同时考虑到了颜色信息与梯度信息,i就是左图中的像素,il就是右图中的对应像素。
3. 匹配代价计算完毕,下一步就是代价聚合了,这也是本文的第一个贡献,文章建立了一个一般化的代价聚合模型,这个模型如下所示:
这个模型,神奇的地方在于,可以融合现有的多种代价聚合算法,比如the-state-of-art的NL,ST,BF,GF等,但是很遗憾,文章没有给出明确的推导公式,用以说明为什么上述代价聚合算法可以作为上述模型的特例,只有一大段的文字描述,缺乏有力的说服力。
解释一下这个一般化模型,它的目的是求解当前像素i的最小匹配代价,l为视差未知变量,j是像素i的邻域内的其他像素,K(i,j)就是像素i,j的相似度,这个相似度可以基于空间信息,也可以基于梯度,颜色信息,不同的核函数,就可以等价于不同的代价聚合算法。从另外一个角度解释一下,为何要z-C(j,l)?我认为这是基于两点假设,一个是左图右图匹配的越好,那么整体代价就越小。另一个是统一邻域内的像素深度值往往差不多。
上述模型的求解很容易,直接对z求偏导即可,形式如下:
这里,我尝试给出一个一般性的简单证明:
 
在DoubleBP中,所使用的代价函数叫做Birchfield and Tomasi’s pixel dissimilarity,基于它的代价聚合具体形式如下:
对比上面两个公式,很容易看出Zi就是下面公式的分母,也就是权值的均值,刚好和文献表述吻合,而C(j, l)就是d(Yl, Yr),代表的是代价计算函数,核函数的具体形式如下所示,代表的是支持窗口内当前优化像素与其他像素的相似度。
4. 本文的第二个贡献,建立多尺度的代价聚合模型,我们注意上面介绍的模型的邻域N是在原始图像上的,并没有考虑到多尺度信息。 何为多尺度?其实就是不同模糊程度的图像,就好比一个人向你由远到近的走过来,最开始,你肯定只能看到一个模糊的人影,到你面前你就连五官都能看的很清晰了!
 
多尺度代价聚合模型如下所示:

 
上面的公式,每一个变量都多了个s,s就代表不同尺度的变量,由于每一项都是一个正数,求解就直接简化为单独对每一个尺度下的对应公式进行求解,如下所示:
5. 建立了多尺度代价模型之后还远远不够,多尺度之间的关系呢?这个必须考虑到啊,于是本文最猛的一个创新点诞生了,作者通过添加正则化项的方式,考了到了多尺度之间的关系,牛逼啊!
我解释一下这个正则化项,请看如下图示:
正则化项的意义在于:保持不同尺度下的,同一像素的代价一致,如果正则化因子越大,说明同一像素不同尺度之间的一致性约束越强,这会加强对低纹理区域的视差估计(低纹理区域视差难以估计,需要加强约束才行),但是副作用是使得其他区域的视差值估计不够精确。不同尺度之间最小代价用减法来体现,L2范式正则化相比较于L1正则化而言,对变量的平滑性约束更加明显,关于这点可以参考我之前的博客(http://blog.csdn.net/wsj998689aa/article/details/39547771)
求解方法也很简单,直接对z求偏导即可,如下:
令偏导等于零,可以建立各个尺度下的线性关系,将各个尺度下的线性关系形式化为矩阵方程形式,很容易得到如下解公式:
6. 得到最小代价公式后,下一步就是将每一个视差值代入上式,选择最小的那个代价对应的视差值为当前像素视差值,这竟然也被称呼为一个算法(winner-takes-all),并且几乎每篇stereo matching文献都要提,感觉瞎扯淡啊。

4. 实验效果

实验效果其实没什么好说的了,大家去看看论文里面就知道了,我直说一点,该文献虽然在middlebury上找不到,但是也的确和middlebury上的算法进行了比较,比如NL,ST,BF,GF等,我也很奇怪,为何middlebury上没有CSCA?
看得出来,算法的效果还是很明显的,我在实际的双目图像上也测试过,效果的确很好。再来说说运行时间,在KITTI评测网站上,CSCA上给出的时间竟然有140s,而最快的算法运行时间只要0.2s!!!这也差距太大了吧,抱着怀疑的态度,我实验了一下,结果发现,在“CEN+ST+WM”组合下,在640p的图像上,运行时间需要6.9s,在320p的图像上,运行时间为2.1s,在160p上,需要0.43s。140s从何而来呢?从上面的表格中也可以看出,S+GF也只需要1.32s,KITTI采用的就是S+GF的组合方式。

5. 总结

1)CSCA是一个优秀的立体匹配算法,它的性价比,综合来说是比较高的,并且CSCA只是一个框架,言外之意,我们可以根据框架的思想自己创建新的算法,说不定能够获取更好的性能。
2)  CSCA最可贵的是,提供了详细的源代码,在文献中提示的地址就可以下载到,为作者这种诚实的,敢于开源的精神点赞!
3)我认为CSCA是一个多尺度的局部算法,还不应该归类为全局算法的类别,这种多尺度思想,我想在今后的工作中会有越来越多的研究人员继续深入研究。

转载于:https://www.cnblogs.com/weizc/p/5332271.html

这篇关于Stereo Matching文献笔记之(一):《Cross-Scale Cost Aggregation for Stereo Matching》读后感~...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/444965

相关文章

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个