On Building an Accurate Stereo M

2019-11-06  本文已影响0人  OrdinaryW

1. 前言

    在了解SGBM算法以后,可能大家都会发现SGBM算法中最不牛逼的关键点,就是对全图用统一尺寸的矩形框来完成代价聚合(矩形框内代价求和)。因此,今天我为大家继续介绍新的,而且很经典的立体匹配算法。该算法来源于以下论文:《On Building an Accurate Stereo Matching System on Graphics Hardware》

AD+Census
鲁棒性函数

可以想象一下,图像上能用到的信息(颜色和结构),都用了一下。但是这里还是想简单对比一下ADCensus 和 SGBM的Cost有什么不一样呢,我们以最简单的 CostComputation + WTA来对比,对比结果如下:


Cost vs

    可以看出,两种Cost的结果还是有差别的,ADCensus的细节和结构保护的好,但是白色噪声也是非常的多,SGBM的Cost虽然细节没有那么好,但是噪声算是较少的。都有优缺点。看你如何选择。

2. Cost Aggregation

只要大家阅读立体匹配算法论文就应该知道,代价聚合绝对不止CBCA一种,特别是从高质量聚合方面讲。例如:

    但是他们的耗时也是你肯定的。具体可以在具体来说,就是很难将其普及并转化为科技生产力(高性能运算平台除外)。如果他只能停留在高性能运算平台,或者实验室里面。那么他的社会价值肯定是会打折扣的,只能依靠硬件平台性能的不断提升和优化。所以如何才能做到快速高效的代价聚合呢,CBCA就这样诞生了。最先提出CBCA的论文是:Cross-Based Local Stereo Matching Using Orthogonal Integral Images

那么CBCA的主要好处有以下几点:

CBCA

    所以大家也可看出来了,CBCA在对不同像素进行Local Support Region计算的时候,有点像图像分割/区域生长的快速版本。毕竟,真实的图像分割算法还是很耗时的,特别是包含复杂数学公司的算法。那么他又是怎么做到图像分割并降低计算量的呢?通过上面的图,大家应该也能看出一点逻辑,下面就详细解释一下。其实CBCA应该是分Local Support Region计算和Aggregation两个部分,每个部分又分两个步骤,总计4个步骤。

计算Local Support Region CostAggregation

3. Scanline Optimization

    扫描先优化部分,这里直接引用作者原文说的:“We employ a multi-direction scanline optimizer based on Hirschm¨uller’s semi-global matching method”。论文中采用了4方向的SGM,单方向的SGM公式如下:


单方向SGM聚合

同时,通过左右图邻域像素颜色差D1和D2分别对P1和P2两个参数分成四种情况约束:


根据邻域颜色信息对P1和P2约束
最后对四个方向的代价聚合值求平均:
代价聚合平均

这部分内容,如果大家看过我之前写的SGBM算法详解,应该比较熟悉,不过多介绍。

4. Multi-step Disparity Refinement

    这部分主要是指视差图后处理,包括Outlier Detection、Iterative Region Voting、Proper Interpolation、Depth Discontinuity Adjustment、Sub-pixel Enhancement。

5. 结束语

    立体匹配作为计算机视觉领域的热点研究区域,本次介绍的算法从整个流程来看,算是集各家所长,综合得到一个较好的立体匹配算法,还算比较优秀的。而且现在基本是CV + NN都有研究,而且NN的趋势愈演愈烈,但是CV算法也有他的经典之处,不管哪个方向,代码计算和优化重要,但是视差Refine的步骤也很重要,主要看大家的用途是什么,需要大家去多读多想多写代码,慢慢体会。
    好了,今天的内容就分享到这里啦,如果大家有什么问题,可以直接在评论区评论,或者有什么新的论文想交流和了解的,也可以在评论区写出论文名字,大家一起交流学习。
  PS:本文所述论文在github上面是有源码的,大家可以边看论文边看代码,快速学习。

上一篇下一篇

猜你喜欢

热点阅读