算法简介
这篇文章主要是为了改善深度不连续区域误匹配率高的问题,提出了一种多窗口的SAD立体匹配算法,然后后处理部分用左右一致性检测、唯一性检测以及亚像素插值,这些是常规操作,还提出了一种边界修正的算法,改善边界问题。但是看结果的视差图挺差的,所以这篇博文也就不深究边界修正的算法了,感兴趣可以看一下原文。
下面就主要讲一下它的多窗口的SAD算法吧:
bcd三个图对应三种多窗口的选择:
- 中间窗口 + 2个最佳的外围窗口
- 中间窗口 + 4个最佳的外围窗口
- 中间窗口 + 4个最佳次外围窗口 + 8个最佳的外围窗口
分别对应下面三道公式:
这些窗口的锚点都可以选择,这里就涉及到大量的调参。
遮挡问题
下面就重点讲一下困惑许久的遮挡导致的前景扩充的问题。还是用图说话,
这个图是说,当窗口在深度不连续区域时,由于存在遮挡,左图的左半窗口在右图是看不见的,这样就引入了误差。可以通过减小窗口来改善边界的误匹配,但是减小窗口会降低信噪比,其他区域容易受到噪声的影响,增加误匹配。
然后就来说说前景扩充:
深度不连续区域经常发生误匹配,导致物体扩大,可以用左右一致性检查来检测遮挡区域,使遮挡和误匹配像素无效。
看图就知道,L2和L1波浪是遮挡区域,不应该有匹配的,但是由于相关性,L和L~都大概率的匹配到R,这就导致物体的扩大(也就是前景扩充),但如果进行左右一致性检测,那么右图的遮挡区就没有匹配点,这样就可以把遮挡区检测出来,然后就可以将遮挡区域无效化了,降低误匹配率。
文章还用实验说明了,边界造成的误匹配主要发生在左右边界,因为上下边界经过极线校正后,不存在遮挡问题。
借鉴
这篇文章非常老,2002年的。其实可以借鉴一下多窗口算法,看看是不是能够改善边界,理论上来说多窗口是能够改善边界的,至于他提出的边界修正算法,太复杂了,感兴趣可以去研究一下。
经过实验,当SGM加入了多窗口之后,精度明显降低了。
so sad, the end.