码上实战立体匹配系列经典AD-Census: 扫描线优化

Posted 李迎松~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了码上实战立体匹配系列经典AD-Census: 扫描线优化相关的知识,希望对你有一定的参考价值。

同学们国庆假期快乐呀!潇洒7天(带娃7天),难得坐下来更新博客。

下载完整源码,点击进入: https://github.com/ethan-li-coding/AD-Census
欢迎同学们在Github项目里讨论!

接上篇十字交叉域代价聚合,本篇的内容是AD-Census的扫描线优化步骤,实际上,该步的思路和SGM的代码聚合是基本一样的,只不过在P1/P2参数设置上做了一些修改。确实,SGM的P1、P2设置策略过于简单,优点是鲁棒性高,对大部分数据都能得到一个还不错的视差结果,但明显的弊端就是很难找到一组特别好的参数组合,使特定应用场景的数据达到比较完美的状态,P1/P2的设置对整体视差效果尤其是边缘处的视差很关键,所以AD-Census的改进方向是有实际意义的。

我们不妨直接先看下AD-Census扫描线优化的成果:

代价计算
代价计算
代价聚合
扫描线优化

显然,扫描线优化后的视差图比代价聚合后的视差图更加完整,错误值更少。当然这并不能说明AD-Census的参数改进就是有效的,只能说明扫描线优化步骤是有效的。

我们来看编码介绍吧!

文章目录

算法

同样的,算法原理请看博文:

经典AD-Census: (3)扫描线优化(Scanline Optimization)

这里我就不再展开讲优化的原理了,和SGM(SemiGlobalMatching)的代价聚合策略确实是一模一样,看博主往期博客就行了,AD-Census采用4方向的扫描线优化,即上下左右4个方向。

AD-Census所做的修改在于 P 1 P_1 P1 P 2 P_2 P2值的设定方式,在SGM中, P 1 P_1 P1 P 2 ′ P_2' P2是预设的固定值,实际使用的 P 2 P_2 P2是根据左视图相邻两个像素的亮度差值而实时调整的,调整公式为 P 2 = P 2 ′ / ( I p − I q ) P_2=P_2'/(I_p-I_q) P2=P2/(IpIq)

而在Ad-Census中, P 1 P_1 P1 P 2 P_2 P2不只是和左视图的相邻像素颜色差 D 1 = D c ( p , p − r ) D_1=D_c(p,p-r) D1=Dc(p,pr)有关,而且和右视图对应同名点的相邻像素颜色差 D 2 = D c ( p d , p d − r ) D_2=D_c(pd,pd-r) D2=Dc(pd,pdr)有关。

(注1:AD-Census算法默认输入彩色图,所以是算颜色差,如果是输入灰度图,则是亮度差,颜色差的定义是 D c ( p l , p ) = m a x i = R , G , B ∣ I i ( p l ) − I i ( p ) ∣ D_c(p_l,p)=max_i=R,G,B|I_i(p_l)-I_i(p)| Dc(pl,p)=maxi=R,G,BIi(pl)Ii(p),即三个颜色分量差值的最大值)
(注2: p d pd pd 实际就是像素 p p p 通过视差 d d d 找到的右视图上的同名点 q = p − d q=p-d q=pd
(注3: p − r p-r pr代表聚合方向上的上一个像素,比如从左到右聚合,则 p − r p-r pr就是 p − 1 p-1 p1;从右到左聚合,则 p − r p-r pr就是 p + 1 p+1 p+1

具体设定规则如下:

  1. P 1 = Π 1 , P 2 = Π 2 , i f D 1 < τ S O , D 2 < τ S O P_1=Π_1,P_2=Π_2, if D_1<τ_SO,D_2<τ_SO P1=Π1,P2=Π2,ifD1<τSO,D2<τSO
  2. P 1 = Π 1 / 4 , P 2 = Π 2 / 4 , i f D 1 < τ S O , D 2 > τ S O P_1=Π_1/4,P_2=Π_2/4, if D_1<τ_SO,D_2>τ_SO P1=Π1/4,P2=Π2/4,ifD1<τSO,D2>τSO
  3. P 1 = Π 1 / 4 , P 2 = Π 2 / 4 , i f D 1 > τ S O , D 2 < τ S O P_1=Π_1/4,P_2=Π_2/4, if D_1>τ_SO,D_2<τ_SO P1=Π1/4,P2=Π2/4,ifD1>τSO,D2<τSO
  4. P 1 = Π 1 / 10 , P 2 = Π 2 / 10 , i f D 1 > τ S O , D 2 > τ S O P_1=Π_1/10,P_2=Π_2/10, if D_1>τ_SO,D_2>τ_SO P1=Π1/10,P2=Π2/10,ifD1>τSO,D2>τ以上是关于码上实战立体匹配系列经典AD-Census: 扫描线优化的主要内容,如果未能解决你的问题,请参考以下文章

    码上实战立体匹配系列经典AD-Census: 框架

    码上实战立体匹配系列经典AD-Census: 代价计算

    码上实战立体匹配系列经典AD-Census: 主类

    码上实战立体匹配系列经典AD-Census: 十字交叉域代价聚合

    码上实战立体匹配系列经典SGM:代价计算

    理论恒叨立体匹配系列经典AD-Census: 扫描线优化(Scanline Optimization)