算法流程
这篇文章提出的是一种基于SGM的带有加权路径代价聚合的方法,为了节省硬件资源,还采取了图像下采样和视差跳跃的方法。算法在FPGA平台上实现。
算法流程如下:
- 预处理:下采样,将行数缩减为原来的一半,采取的方法是将相邻的两行取平均,这样每一行都包含更多的信息量,且节省内存和时间;3 * 3 高斯滤波降噪,高斯滤波的窗口为[1, 2, 1, 2, 4, 2, 1, 2, 1]。
- Census Transform:因为数据集是KITTI数据集,汽车驾驶主要集中于路面的情况,对于两边不是太关注,所以这里就直接在路面左右两侧的一些列进行跳过。做法就是在左右两侧,以步长为2进行列跳跃,也就是上边所说的视差跳跃。下面给出一幅超好看的census transform的示意图。
- Semi-Global Aggregation and Disparity Computation:这里主要是提出了一种自适应路径权重的方法,并且和《High Throughput Hardware Architecture for Accurate Semi-Global Matching》这篇文章的路径权重的方法进行对比,证明本文的自适应权重方法更加高效和快速。
这幅图中,lr,ltb,tb,rtb四路径以及lr,rl,ltb,tb,rtb五路径是《High Throughput Hardware Architecture for Accurate Semi-Global Matching》采取的路径。红线的是本文采取的路径,并且仅在水平路径增加了自适应权重。
其中 α = { 1 / 4 , 1 / 2 , 5 / 8 , 3 / 4 , 1 } \alpha=\{1/4, 1/2, 5/8, 3/4, 1\} α={1/4,1/2,5/8,3/4,1},最佳的值是 5 / 8 5/8 5/8。再重申一遍,水平方向采取自适应权重,其他方向的权重仍然为1。
基于聚合代价,用WTA得到视差图:
- Disparity Refinement:亚像素插值,散斑滤波(应该是剔除小连通区域),中值滤波,视差填充,上采样。
亚像素插值:利用最佳视差相邻四个视差的代价进行亚像素插值。
视差填充:用无效像素左右方向最近的有效视差值的较小值进行填充。
上采样:由于在预处理阶段进行了下采样以及在census transfrom阶段进行了视差跳跃,所以这里要进行上采样,使得视差图与原图大小一致。
实验结果
借鉴
自适应路径权值,经过实验,将这篇文章的加权SGM加到census sgm中,可以使精度提高一丁点。