论文特点
这篇论文最大特点是提出了便于利用GPU进行CUDA编程的立体匹配计算框架。此外,它的技术要点在于:
- 提出了结合AD(absolute difference)和Census Transform的代价,称Ad-census。
- 改进了由参考资料[2]提出的cross-based region的代价对比窗口的生成方式,并且改进了代价的聚合方式。
- 引入了[3]提出的scanline optimization的优化方式,并且减少了计算量。
Ad-census代价
首先来认识Ad-census代价。
代价Ad,一般可以看做是两个对应像素灰度的差的绝对值。
不过论文里面用了两个对应像素的RGB三通道分别求差的绝对值,再对三个绝对值求平均。运算量大一点,不过可以用的信息比灰度丰富些。又因为后期可以并行处理,所以运算量的负担并没有增加多少。
代价Census Transform[4],是在以当前像素为中心,构造出长宽为9x7大小的矩形区域。该区域中的63个像素依次与中心像素p比较像素值,包括中心像素它自己也跟自己比较,若大于像素p,则该位置标记为1,否则标记为0。于是我们得到了长度为63的0/1编码。
与Ad代价相似,我们还要求两个像素对应的Census Transform的距离(差),我们采用汉明距离Hamming Distance[5]。汉明距离比较简单,就是衡量这两组0/1编码的相同位置的不同字符的个数。也就是说,如果两个Census Transform的不同的编码越多,我们就认为这两个Census的距离更远。
代价Ad对像素的强度差别比较敏感,可以用来比较颜色、光照的不同。
代价Census对像素的纹理差别比较敏感。
比如一个黑色的圆圈和在另一幅图中显得有点灰色的圆圈,在ad看来是不一样的。但在Census看来,它们都比圆圈中心的白色要来的暗一些。所以census的0/1编码是一样的。
但是如果一个图中有很多个圆圈,红色绿色蓝色的,那么census就蒙圈了,这时候ad说不定恰恰可以用颜色来寻找对应的圆圈的位置。
代价Ad-census就是将以上两种代价进行结合,census用来弥补ad对光照的判断带来的失误,而ad用来在弥补census对重复纹理区域的判断带来的失误。
论文采用了
公式(2)的方式定义了Ad-census代价,函数rho的范围为[0, 1],将ad和census代价归一化。
基于Cross-based region的代价聚合方式
立体匹配来确定disparity,就是去寻找对于被匹配图像中的像素p来说,如果在匹配图像中的像素q与p之间的代价最小,那么我们就认为q是p的对应点,并且q与p的距离,就是p的disparity。
可是,往往这种简单的一对一的像素的代价匹配精度较低。所以一些工作引入了以像素p为中心的高宽为HxW窗口区域,将该窗口中的像素的对应代价的总和,来作为像素p的代价。这么做比起单一的像素代价,让匹配的结果精度更高一些。普遍被使用的有SSD,SAD,NCC,ZNCC等。
这里提到的Cross-based region也是一种窗口的设置方式,它不是矩形,而是一个可以是任意形状的区域。
Cross-based region的构建方式分为两步,第一步以像素p为中心,往p的左边,右边,上边,下边分别延伸出去若干个像素,就像画了一个十字,也就是cross-based命名的缘由。至于这个十字要“画的”多大,我们以十字的左臂为例子。(待续)
参考资料:
[1]On Building an Accurate Stereo Matching System on Graphics Hardware
[2]K. Zhang, J. Lu, and G. Lafruit. Cross-based local stereo matching using orthogonal integral images. IEEE TCSVT, 19(7):1073–1079, 2009.
[3]H. Hirschm ̈uller. Stereo processing by semiglobal matching and mutual information. IEEE TPAMI, 30(2):328–341, 2008.
[4]http://blog.csdn.net/qianchenglenger/article/details/19931259
[5]https://zh.wikipedia.org/wiki/%E6%B1%89%E6%98%8E%E8%B7%9D%E7%A6%BB