1. 算法思想
本文的算法思想,是放弃原有的基于支持窗口的方式,采用基于全局MST的方式,构建代价聚合公式。MST,采用像素之间颜色信息作为“边权值”,以全图的像素作为结点,构建过程中不断删除权值较大的边,然后用克鲁斯卡尔或者普里姆算法进行计算,求得最小生成树(MST),就得到了全图像素之间的关系。
因为支持窗口的办法,本质上只考虑了窗口内像素对中心像素的影响,窗口之外的像素的影响彻底忽略,其实想想看,这样做也没有什么不妥,但是它并不适用一些场合,比如文献列举的图像,
左上角的图像就是原始灰度图像,这个时候我们就会发现,这幅图像中像素与像素之间的关系用支持窗口来处理明显不灵,比如说周围框状区域的任何一个像素,肯定与框状区域内部的像素的深度信息一致,而与中间区域的像素不同。或者说,如果单考虑颜色信息,红框内的像素关系最大,如何表征这样的关系就是一个问题。很遗憾,我们不能事先提取出这样的区域,因为图像分割真的很耗时,并且不稳定,这就是作者的牛逼之处,他想到了MST可以表示这种像素关系,于是采用像素之间颜色信息作为“边权值”,进一步构建MST。
这里还要仔细说一下,这几幅图代表的其实是全图像素点对(0,0)点的权值大小,大家可以看一下论文里面BF的公式,也就是b、c两幅图,文章把参数看成了窗口的大小标志,如果参数足够大,其实exp里面的值就是0,空间信息的作用完全消失,这个时候就要看像素颜色差的作用了,我想这一点给作者一个提示,那就是BF中空间信息的考虑可能是多余的!!!于是作者只利用颜色差信息来构建MST。
MST指的是最小生成数,全称是最小权重生成树。它以全图的像素作为节点,构建过程中不断删除权值较大的边。注意,是全图所有的像素,然后采用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法进行计算。这样便得到了全图像素之间的关系。然后基于这层关系,构建代价聚合,这便是文章标题Non-Local Cost Aggregation的由来。
通过MST计算权值的效果如上图第二行所示,红色代表高权值,蓝色代表低权值。明显发现MST有效的表征了像素对像素的影响。代价聚合公式如下所示,具体的符号含义,这里就不说了,相信做过立体匹配的童鞋一眼就会看明白。
2. 算法核心
2.1 leaf-to-root
假设上图是一个MST,边上的数值代表权重,此时如果计算的是V4的代价聚合,那么很容易,直接计算子节点(V3, V4)的代价聚合值与各自边缘的乘积集合,因为V4是根节点,不需要考虑父节点的影响。公式如下所示,
箭头向上代表从叶子到当前节点的代价聚合值,为何只需要考虑子节点,而不考虑孙子节点,重孙子节点等等的原因就是由于在我们实际计算的时候,要从叶子节点一层一层往上算,这样就会利用树的特性,子节点的代价聚合值已经包含了孙子节点等等对我自己的影响。有点一本万利的感觉。。。
2.2 root-to-leaf
2.3 时间复杂度
3. 实验效果&结论
附上作者对于算法核心部分的PPT文档的下载地址,作者详细图解了算法的每一步,很详细。