代价聚合也有很多方法比如:
(1)方框滤波(Box filtering)
类似于均值滤波,计算速度快,但是对边缘的敏感度差。
(2)双边滤波(Bilateral filter)
就是对窗口内像素进行距离加权和亮度加权。双边滤波是一种可以保边去噪的滤波器,之所以可以达到此去噪效果,是因为滤波器是由两个函数构成。一个函数是由几何空间距离决定滤波器系数,另一个由像素差值决定滤波器系数。
(3)十字交叉域代价聚合(Cross-Based Cost Aggregation,CBCA)
基于一个假设:相邻的颜色相近的像素有相近的视差值。如果参与聚合的像素和被聚合的像素具有相同的视差值,那么聚合的可靠性会更高。基于此,CBCA的目标是找到像素p周围和其颜色相近的像素,并以某种规则将它们的代价值聚合到p的代价上。这样的结果也就是他的聚合范围并非一个固定规则的窗口。
(4)半全局Semi-Global Matching(SGM)
着重讲SGM的代价聚合。
一开始接触的时候,总是分不清代价计算,代价聚合,视差估计这些东西,因为好像这些都是一个步骤内的啊,我代价都计算出来了不就直接得到视差了吗?后来仔细看原理,写代码后发现还是要分步的。
可以这样理解:1、代价计算 = 根据单一的计算公式粗略的获取一个像素点的代价向量(这个代价 是一个列向量,长度为视差),最终组成一个代价立方体(代价立方体也是代价计算的最终产物)。
2、代价聚合 = 在代价立方体的基础上,根据每个像素附近像素的代价向量进行考量,将附近的代价向量通过特定公式聚合至该像素的代价向量上。形成最终聚合后的代价立方体。此时的代价立方体,才是后面视差估计用的代价立方体。
图一
如图一(一张古老的图,截图来截图去都糊了嘿嘿)所示,描述的是SGM的聚合路径。
(1),(2),(3),(4)为4路径聚合。
1.2.3.4.5.6.7.8为8路径聚合。
然后还有红色的16路。 路数越多 时间损耗越大,效果不一定很好。
一般来说选4或者8,其实4的效果差差不多了,选4速度还快了一倍。
具体的代码以及公式。参考链接:https://zhuanlan.zhihu.com/p/208513239
还是很不错的~理解了聚合和代价的区别,再看这篇就差不多理解了。
双目立体匹配入门【一】(理论)_双目交会_凳子花❀的博客-CSDN博客
当然还有其他聚合的方法~大家可以多去了解查查。