本文主要是介绍《Weighted Semi-Global Matching and Center-Symmetric Census Transform for Robust Driver Assistance》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章概括
这篇文章是对基于census transform的SGM的扩展,有两处改进的地方:
- 提出Center-Symmetric Census Transform,效果跟原来的census transform相比精度降低一点,但是计算效率和存储效率提高了,为了提高CSCT的精度,,提出加权汉明距离计算。文章中的权重是规定好的,可以考虑加入自适应权重来做。
- 提出路径加权代价聚合策略(Weighted Semi-Global matching (wSGM)),该权重是根据平面的法线进行估计的,但是平面的法线是根据匹配结果进行估计的,这就造成一个chicken-egg的问题。这个问题的解决措施参考了ELAS算法。最终获得各条聚合路径的权重。
下面也按照立体匹配的四个步骤进行进行总结。
1、匹配代价
普通的census transform是根据中心点和邻域点的灰度值的比较,生成的一串二进制序列作为该中心点的值。而两个点之间的匹配代价这两个对应的二进制序列之间的汉明距离。
典型的窗口大小是3 * 3, 5 * 5, 9 * 7,对应的可以用来存储的二进制位是8位、32位、64位。
而本文参考Center-Symmetric LBPs,也提出了Center-Symmetric Census Transform,也就是中心对称的census transform,用窗口内中心对称的像素的灰度大小比较生成二进制序列作为该中心点的值。在不损失效果的前提下,计算效率和存储效率都得到了提高。
看公式有点不太理解,那就看图。
(a)图就是中心对称的census transform,可以看到,对于9 * 7窗口大小的CTCS只需要生成31位的序列,效率得到了提高。由于序列的长度变短了,相对来说可以度量的代价范围变小了,这样会损失一部分的精度,所以在计算汉明距离时加入了一个权重,这样可以扩大度量的范围,如上图(b)所示,这就是加权汉明距离。
2、代价聚合(wSGM)
SGM是将NP-hard的基于MRF的二维全局优化问题简化为多一维路径代价聚合的优化问题:
如图2(a)所示,就是一维路径的代价聚合策略。最终对各条路径上的代价进行简单求和,就是各个像素点的聚合代价,利用WTA就选取聚合代价最小对应的视差:
本文提出的改进对不同的路径的聚合代价进行加权求和:
下面分三种情况对这个权重进行说明,如图2(b)所示:
- 对于区域1,是地面,直觉告诉我们水平线上的视差应该接近一致,因此我们可以增加水平路径的权重,这样,就会使地面区域水平线的视差接近一致。
- 对于区域2,是房子的墙 / 窗户,垂直线上的视差应该接近一致,因为我们可以增加垂直路径的权重。
- 对于区域3,是树,可视作正向平行区域,也就是区域内各个点的视差接近一致,因此我们应该平均分配权重。
而这个权重的计算则要参考ELAS论文中的概率生成模型的方法,先计算鲁棒性强的support points,然后基于这些support points计算一个概率生成模型,利用三角剖分的方法得到很多视差平面,然后基于这些视差平面平面就可以得到表面法向量,但怎么利用这个平面法向量来计算权重,这里我没有看明白。还有elas算法如何进行三角剖分这块也不知道怎么回事。如果有人看到这篇博客的话,欢迎来跟博主在下方留言进行交流。
但是ELAS原文中,计算support points是基于sobel算子来作为像素的特征向量的,而且计算support points是为了利用这些点的信息,来加快立体匹配的过程,不需要进行全局优化这个过程。但是wSGM却为了计算权重,而另外进行三角剖分的过程,势必会造成时间复杂度的增加。如果路径权重的计算可以用更简单的方法来替换,那么将会大大提高算法的计算效率。
3、视差细化
本文没有提及视差细化,但一般来说需要LR-check,剔除小邻域,视差填充之类的。此处不再详述。
实验结果
本文用了KITTI数据集进行测试,这个数据集的训练集的GT是可以免费获取的。
可见,这个时间还挺长的,6s,其实是不足以达到实时的,但是效果确实有提升。
这篇关于《Weighted Semi-Global Matching and Center-Symmetric Census Transform for Robust Driver Assistance》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!