On Building an Accurate Stereo Matching System on Graphics Hardware

1. 前言

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

  • 算法流程:

    • Step 1. Cost(AD+Census)
    • Step 2. Cross-based Cost Aggregation (手动五角星)
    • Step 3. Scanline Optimization
    • Step 4. Multi-step Disparity Refinement
  • 代价计算:采用AD + Census的代价融合方式,具体见原文。他这样其实是有三个目的:

    • 利用AD保留原图的细节信息,也就是直接利用像素颜色或者灰度信息,可以理解为颜色空间相似度
    • 利用Census保留原图的局部结构信息,可以理解为距离/结构空间相似度
    • 利用鲁棒性函数处理代价值,可以进一步降低代价噪声,方便两种不同量级的代价融合
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的主要好处有以下几点:

  • 将规则Constant Square Region,变为多边形代价聚合方式,更符合实际场景分布
  • 相对于Adaptive Weight Aggregation,计算量小
  • CBCA使用的Local Support Region,可以在后处理或其他阶段复用,这个很不错
CBCA

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

  • Step1:对全图像素建立Upright Cross(十字架),规则见原文
  • Step2:计算像素点P的Local Support Region,先把十字架分为水平方向和竖直方向,固定竖直方向不动,只需要统计竖直区域上的像素点的水平方向范围就可以得到P点的Local Support Region。先固定水平方向,再统计水平方向各点的竖直方向范围也是一样的。类似下面这样:
计算Local Support Region
  • Step3:Local Support Region水平方向聚合至同一竖直方向
  • Step4: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。

  • Outliers Detection
    其实就是左右一致性检测(Left-Right Check),主要目的是检测遮挡区域。
  • Iterative Region Voting
    主要是针对上一个步骤产生的遮挡区域,因为遮挡区域本身就没有视差,所以前面的步骤得到的视差肯定是错误的,现在要通过Iterative Region Voting的方式,对每个遮挡像素计算新的视差值。Iterative Region Voting需要用到CBCA过程中计算的Local Support Region,在该区域内选择出现次数最多的视差值作为遮挡像素的视差值。因为是Iterative,所以论文中给的是重复5次这样的操作。因为,根据Local Support Region 给遮挡区域赋值的时候,也是有约束条件的,比如该区域类遮挡像素太多,或者该区域某视差为最高频率视差,但频率仍然小于指定频率,那么这样的赋值是无效的,因此会通过多次迭代的方式,尽可能的对遮挡区域填充可靠的视差值。也就是下面两个约束条件:


    Iterative Region Voting
  • Proper Interpolation
    我们刚才说了,Iterative Region Voting是要在满足条件的情况下,才能赋值的,那么剩下的Outliers怎么办呢,就要用到下一个步骤Proper Interpolation。Proper Interpolation就是利用邻域颜色信息约束的16方向插值,比较简单,不赘述。
  • Depth Discontinuity Adjustment
    假设上面步骤完成了错误视差的检测和正确视差值填充,那么接下来就到了视差边缘精修的部分,也就是Depth Discontinuity Adjustment 。这个部分主要是以视差图为主,假如某像素点刚好在边缘上(视差图的边缘),那么论文中就直接对比该像素点左右两个像素的代价值,用代价值较小的那个像素点的视差来代替当前视差。对,就是这么简单粗暴。
  • Sub-pixel Enhancement
    完成上述操作以后,就只剩下最后一步了。我们都知道,我们的真实场景时连续表面,而这里只是用了离散的数字来模拟深度,特别是对于斜坡,平面,是很不友好的,会出现视差断层现象。因此,要进行最后一个步骤:Sub-pixel Enhancement,它的计算公式大家可以直接查看论文,这里就不贴出来了。

5. 结束语

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354