前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >73. 三维重建8-立体匹配4

73. 三维重建8-立体匹配4

作者头像
HawkWang
发布2022-08-30 15:40:38
3800
发布2022-08-30 15:40:38
举报
文章被收录于专栏:计算摄影学

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

这篇文章我继续解读Stefano教授的经典讲义 Stereo Vision: Algorithms and Applications,今天的重点是视差后处理(Disparity Refinement),这是一个在早期人们重视度不够,而现在经过很多人的实践被认为无比重要的一个环节。

一. 亚像素插值

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

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

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

比如,原始的亚像素插值是这样的:

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

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

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

二. 图像滤波技术

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

典型的滤波处理方案有:

  • 中值滤波
  • 形态学处理
  • 双边滤波

这几种滤波方案我都讲过,在此不再赘述。相关的文章链接我贴在此处:

3. 数码相机内的图像处理-基本图像滤波

4. 数码相机内的图像处理-更多图像滤波

早期的这些滤波方案都相对简单,所以后面人们又探索了很多高级的滤波方法,之后我会专门撰文介绍。

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

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

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

这个过程如下图所示:

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

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

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

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

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

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

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

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

五. 基于分割的方案

这类方案在文章72. 三维重建7-立体匹配3也已经讲过了,它的假设是:

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

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

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

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

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

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

  • RANSAC
  • Histogram Voting

RANSAC太过出名,这里我就不赘述了。讲讲第二种Histogram Voting吧。这个技术在我上一篇文章72. 三维重建7-立体匹配3中提到的合作优化算法(Cooperation Optimization)中用到。从上面的平面公式,我们很容易知道:

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

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

这样,在分割块内利用所有同一列上的2像素组,可以求得\beta的列表,通过直方图就可以知道最可能的\beta值。

当两个值都确定后,也就可以同理取得\gamma的估计值了。比如在合作优化的文章中,作者展示的结果如下。可以看出平面拟合后效果明显提升不少:

六. 总结

视差后处理用于修补在前期计算过程中的视差错误。在Stefano教授的讲义中,后处理部分描述的不多,方法也比较浅显,主要包括了:

  • 亚像素插值
  • 视差滤波
  • 左右一致性检查,及单向检查
  • 基于分割进行平面拟合

我认为这反映了早期学术界对后处理部分的探索还不够深入。事实上,在后面的探索中,人们逐渐发现一些强大的视差后处理算法可以有化腐朽为神奇的力量,能够把非常粗糙的初始视差图变得非常精准,我在之后会为你介绍一下这样的算法。

七. 参考资料

  • Stefano Mattoccia. Stereo Vision: Algorithms and Applications
  • 72. 三维重建7-立体匹配3

本文同步发表在我的微信公众号和知乎专栏“计算摄影学”,转载请注明作者和来源

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算摄影学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 亚像素插值
  • 二. 图像滤波技术
  • 三. 双向匹配(左右一致性检查)
  • 四. 单次匹配检测遮挡和错误的方案
  • 五. 基于分割的方案
  • 六. 总结
  • 七. 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档