目录

一、亚像素插值

二、图像滤波技术

三、双向匹配(左右一致性检查)

四、单次匹配检测遮挡和错误的方案

五、基于分割的方案


在上一篇文章立体匹配3——立体匹配算法中的视差优化中,我们介绍了几种用能量函数最小化得到视差图的方法,以及基于局部一致性约束的视差处理方法。这些方法都在标准测试数据集上得到了不错的成绩。然而,即便是其中最优秀的方案,得到的结果依然包括一些错误,我们需要一些方法能够纠正这些错误,或至少要标识这些错误像素
与此同时,到目前为止我们看到的方法都是认为视差值是基于离散的像素的整数型的,这显然是很粗糙的,尤其是对三维测量准确度很敏感的应用,整数型的视差值显然无法满足要求,我们需要方法能够得到浮点数型的视差值。

今天的重点是视差后处理(Disparity Refinement),这是一个在早期人们重视度不够,而现在经过很多人的实践被认为无比重要的一个环节。

本节思维导图如下:

一、亚像素插值

2002年Luigi Di Stefano 和 Stefano Mattoccia教授发表了下面这篇文章,阐述了一个叫做VIDET的实时立体匹配系统,其中提出了亚像素插值的思想。

亚像素插值的方案很简单,如下图所示,一般是利用选定的视差值d及其旁边两个视差值d-1, d+1,以及它们对应的代价值,来共同拟合一个二阶抛物线。那么最终的视差值会选为抛物线最低端对应的浮点数视差值。

在上面那篇关于VIDET项目的文章中,有意思的是作者希望整个亚像素插值的过程中不使用浮点数的操作。于是首先所有的视差扩大八倍,并在扩大后的视差范围中进行计算。比如,原始的亚像素插值是这样的:

作者将所有视差值乘以8,就变成这样了:

如果原来的视差值为d,那么上图中

如何在不适用浮点数操作的情况下得到(2)中的Δ呢?作者构建下面这样的不等式,并在整数空间计算使得下面式子满足的最小的Δ值。

二、图像滤波技术

视差图也是图像,因此也可以采用图像的滤波技术来优化,此时一般不会对视差图作出其它的约束。

典型的滤波处理方案有:
· 中值滤波
· 形态学处理
· 双边滤波

这几种滤波方案较为基础,在此不再赘述。

早期的这些滤波方案都相对简单,所以后面人们又探索了很多高级的滤波方法,比如小波变换,傅里叶变换等。

三、双向匹配(左右一致性检查)

双向匹配是一种高效的检测匹配错误的方法,最早出现在1993年的一篇文章中

这个方法需要用左图像和右图像分别作为参考图像,计算一次视差图。 这样会得到两个视差图。接着我们认为满足如下约束的是正确匹配,不满足的则是错误的匹配,这里T一般为1

这个过程如下图所示:

 左右一致性检查特别适用于检测平坦区域的匹配错误,以及遮挡区域的匹配错误。但它也有明显的缺点,那就是需要做两次匹配。本来立体匹配就是复杂度很高的过程,做两次的耗时就更多了。于是就有了下面这种仅单次匹配的方法。

四、单次匹配检测遮挡和错误的方案

在下面这篇文章中,作者提出了Single Matching Phase(SMP)方案,即单次匹配检测遮挡和错误的方案。

这个方案的思想也很简单,如下图所示。在执行匹配的过程中,会判断目标图像中任何1个点是否都已经有参考图像中的点匹配上了。比如下图中有红色和绿色两条连线对应着目标图像中同一点,此时就要判断哪条线对应的匹配代价更小了。保留代价更小的那个,这里是绿色线,并把红色线对应的匹配设置为错误匹配。

为了进一步提升错误检测的质量,作者指出还可以加入如下的约束,检测出更多的错误。比如下面两种情况的匹配,我们认为是错误的匹配。这里纵轴是匹配代价,横轴是视差值。第一幅图说明同1个点有两个视差值的代价一致,这是重复纹理的情况。 第二幅图说明,相邻的几个视差值的代价都差不多,这是平坦区域的情况。这些时候我们都认为是错误的匹配。

只有下面这种情况,才认为是稳定的匹配,即最佳匹配代价明显低于其他视差的代价。

比较左右一致性检测(BM)和SMP方法的错误检测结果如下(白色部分),可见两者是相当的。

但效率上SMP当然是高了太多:

五、基于分割的方案

这类方案的基本假设是:

  • 在每个分割块中,视差的变化是平滑的
  • 可以把每个分割块视作一个平面

分割一般是基于颜色和空间距离进行的,如此一来同一个分割块内不见得能够视作为一个平面,如下图圆圈内所示。从分割的角度讲,它显然是同一块。但其内部却不在一个平面上。一般解决方案是做超像素分割,这样分割块更小,更加符合上面的假设。

一些算法把每个小块当做正对相机的平面(frontal parallel),更高级的则认为是任意角度的平面(3个自由度, 3 DOF)

于是可以用如下方式对平面参数进行建模,而平面的参数可以通过平面拟合算法得到。

d(x,y) = \alpha x + \beta y + \gamma

基本的拟合方法,例如最小二乘法,很容易受到视差图中噪声的干扰。我们需要的是能够抗这些噪声干扰的拟合方法,即所谓鲁棒插值方法

一般来说有两类方法可以求得更加鲁棒的平面参数:

  • RANSAC
  • Histogram Voting

我们以第二种方法为例进行介绍,这个技术在立体匹配3——立体匹配算法中的视差优化中提到的合作优化算法(Cooperation Optimization)中用到。从上面的平面公式,我们很容易知道:

 \alpha = \frac{\delta d}{\delta x}

所以我们在分割块内任意选两个同一行上的像素,可以利用上述公式算出一个α。那么如果对分割块内所有在同一行上的2像素组,都可以求出对应的 α,形成一个许多个值构成的列表。 对这个列表做直方图,就可以知道计数最大的那个值,这就是最终估计的α值。

同样,我们通过平面公式知道

\beta = \frac{\delta d}{\delta y}

这样,在分割块内利用所有同一列上的2像素组,可以求得β的列表,通过直方图就可以知道最可能的β值。当两个值都确定后,也就可以同理取得 γ的估计值了。比如在合作优化的文章中,作者展示的结果如下。可以看出平面拟合后效果明显提升不少:

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐