对SGM中主要算法的理解

上一篇主要讲了双目立体视觉中的对极约束和深度计算,我们知道解决深度问题,关键就是找到视差(disparity)。本篇还是我在之前group meeting上分享的,主要涉及Stereo Processing by Semiglobal Matching and Mutual Information by Heikoin 2008 IEEE论文中对MI(mutual information)和DP(dynamic programming)的理解。希望有兴趣的童鞋能不吝赐教害羞

首先回顾一下,立体视觉匹配的一般过程:

step

简单阐述一下:确定用什么来衡量matching cost,有很多思路,比如SSD/SAD是比较普遍(简单)的,用一个移动窗口扫描式的检测窗内每组点的像素差的绝对值,它们求和得到此窗口的matching cost。然后通过一种算法来找到最佳匹配点路线,使得cost aggregation的error最低。我们找到匹配路线之后就可以计算视差了,之前两步仅仅在单方向(比如从左到右)考虑的,可能会导致视差图拖尾效应,一些更完善,降低算法误差的方法可以被使用。最后为了提高图像处理精度,也可以考虑对灰度图亚像素化。

Heikoin的论文中涉及到的上述过程,我暂时只学习了前三步,希望分享的内容能帮到大家微笑

对论文标题的解读:半全局的意思是并没有使用参考图像的所有像素点而是部分像素点,这应该是比较合理的,毕竟还有类似于像素点遮挡(在目标图像对应位置消失)的情况。衡量matching cost的是互信息(MI),还可以用于图像检测等。而动态规划算法可以在对极约束的条件下根据参考图像中的所选兴趣点(这里兴趣点可能不是角点检测出来的点,主要是排除overlapping的情况)找到最佳匹配路线。

OK,我们先来看看MI的原理和应用吧!

MI_function

   

I1是参考视点的成像图Ib,I2是目标视点的成像图Im经过初始视差图D(可以用随机方式)计算得到,这样是为了两幅图在之后计算指定位置灰度互信息时能够尽量逼近,不断迭代算法能够收敛。H代表I图像的信息熵,信息熵是度量信息不确定性的,也就是说变量所包含的信息量多少。假设我们知道联合信息熵的表达式,其中的概率可以同图像的联合灰度直方图联系起来理解

function h = Jointh_My(image1,image2)
%   JOINTH_MY    统计图像image1和image2的联合灰度直方图
[rows,cols] = size(image1);
h = zeros(256,256);
for k = 1:rows
    for l = 1:cols
        h(image1(k,l)+1,image2(k,l)+1) = h(image1(k,l)+1,image2(k,l)+1)+1; % 更新联合直方图
    end
end




这样利用二维矩阵h就可以统计两幅图像的联合信息熵。但是如前所述论文中并不是把所有像素点都遍历了,而只选择很多(n个)像素点,我们可以对每个P点计算h

MI_function

与高斯核函数进行卷积在这里起到平滑的作用(给大家推荐一个有趣理解卷积运算的帖子 还有一个讲解关于处理平滑的核函数的笔记)。概率P是对所有的corresponding points(假设有n个)构成灰度值对的统计,可以用联合直方图计算。如果两个图像匹配得越好,计算得H就会非常小,加负号后就是非常大,也就是互信息会越大。

等号右边前两个H分别是对I1和I2而言,可以由之前联合分布直方图快速求到。至于为什么加上他们的原因,结合论文中的阐述,我认为忽略遮挡情况(可以在选点阶段避免)某幅图像的像素点P的信息熵,代表了这个点的灰度值在图中信息量的多少,HI越大,说明越信息量越多,越有价值。

综上,图像I1和I2的匹配点互信息计算如下:

MI

MI的应用就分析到这里,接下来说一下DP(dynamic programming)在论文中的作用。通过利用MI计算的某个像素点P的matching cost可以如下表示:

        MI

其中q是满足对极约束的在Im图像中的点,d是通过初始视差图D的数据。想在2D的图像找到使得cost aggregation 最小的视差图是个NP-hard的问题,那么单独在某方向r上(比如从左到右,从右到左等)选择匹配点的路径使得cost aggregation 最小(即最终L最小),该问题就变成多项式时间内可以解决的。我们采用具有全局性质的动态规划算法,如下状态转移方程大家应该不陌生了:

DP

P1是对物体不平整表面的适应,P2是对灰度不连续(可能是多个物体)的适应,这样可以起到平滑视差图的效果。最后一项减去r方向在前一个像素点的L,添加这一项并不会改变最终视差图结果,只是为了限制L(不断增长至极大值)的规模。

整个DP过程可以看做如下空间的搜索,x,y分别是参考图像的xy座标,d是某像素点可能的视差。

                         DP

但是我们提到过单独从一个方向来计算的L会使视差图产生长尾效应,比如

      

那么对cost aggregation,之前单方向的L可以用多方向的S来代替

                                             DP

DP的应用就分析到这里,现在可以理一理算法流程图了得意

   Flowdiagram

Ib是参考图像(base image),Im是待匹配的图像(matching image),第一次迭代的初始视差图Dinit可以随机产生。我们首先选择在Ib中的n个点,使他们尽量避免在两幅图的遮挡情况,然后找到Im中的对应位置通过Dinit变换后的n个点,按照立体视觉视差的计算步骤——matching cost,cost aggregation,disparity computation完成一次迭代,再把本次计算得到的视差图作为下一次的初始视差图进入下一轮迭代。

惊讶有两点还需要解释:在C阶段,作者交换“主”“客”位置,可以得到两个视差图Db和Dm,然后用一致性检测保证一对一的映射,否则该点作为黑点(255)。

                                                  consistent constrain

其次,为了缩短迭代的时间,作者采用了层次计算matching cost(MI)的方法。Dinit和Ib,Im可以通过三次分辨率为原图的1/16(scale factor)来迭代得到,之后依次改为1/8,1/4、1/2的分辨率则迭代结束,Run time 比用BT(openCV中使用此方法)计算matching cost只多出14%。流程图中Down scale 和 Up scale 保证了图像在输入输出的大小不变。

                                              

由于我的才疏学浅,论文暂时就理解到这里,希望有兴趣的同学留言探讨!






发布了28 篇原创文章 · 获赞 12 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章