双目立体匹配博客&资料汇总

网上对于双目立体匹配算法的学习资料有很多,本文旨在汇总网上优质的资源,并总结学习路线,从传统的SGM、PatchMatch、AD-Census,到近年来的各种深度学习双目立体匹配网络,双目立体匹配算法不断升级,并且一直是学术界研究的热门,值得探索!

1、基础理论

双目立体匹配有以下几个关键问题:

  • 一是如何对双目设备进行标定,只要标定后进行图像极线矫正,才能成为一个理想的双目系统;
  • 二是立体匹配算法,经典的传统立体匹配算法有SGM、PatchMatch和AD-Census,深度学习目前比较火的网络是RAFT-Stereo及其升级版本(例如CREStereo、IGEV等);
  • 三是如何计算深度、如何生成点云,如果你看懂了前两步,那么这一步的公式应当手到擒来,当然,也会有一些特殊的情况,例如鱼眼双目,其公式的推导会很不一样。

如果你刚开始接触双目立体匹配算法,那么一定要看看李迎松博士的文章,你将会非常有收获,李博的csdn主页:link

另一个非常经典的资料是Stefano教授的经典讲义 Stereo Vision: Algorithms and Applications

还有一位csdn博主,火柴的初心,也写了非常多好文章:link

还有旷视大佬HawkWang写的一系列《计算摄影学》博客,每篇都写的很好,并且还在保持更新,这里仅列出双目立体视觉的部分:

其它一些博客

2、SGM(Semi-Global Matching)算法

SGM算法绝对是双目立体匹配算法中最流行的算法,没有之一。非常推荐看李博的文章及其代码实现:

另一个你需要看的是OpenCV实现的SGBM(Semi-Global Block Matching),李博实现的SGM代价空间的构建方式采用了Census,OpenCV则是采用了BT+SAD,并且除了使用输入图像的像素值计算代价,还使用了梯度计算代价,其中每一个参数都值得了解,在此放两篇源码分析。

还有值得一提的是,可能大家很好奇SGM和SGBM是一个意思吗?曾经我也很好奇,基于我目前的理解,这不是一个意思。SGM看论文就知道,其构建代价空间的方法采用的是互信息,但这个方法在目前实现的算法中已经鲜有使用了,SGBM可以看成是SGM的改进,改进的方式就是将代价空间的构建方式改成了块匹配,块匹配的方式有很多,比如上面提到的Census、SAD、BT等等,这样做的好处在于简化了算法,并且能让算法真正的落地,目前商业化的消费级双目产品基本都是算力有限的,需要能够高度并行的算法。

3、PatchMatch理论

PatchMatch算法是另一个非常优秀的传统算法,这个算法我的理解,全靠猜,首先来个随机初始化,然后空间传播、视图传播、平面优化,都是猜测支持窗更新后,代价有没有降低,如果有,那么就更新支持窗,否则不更新,最后通过多次迭代,计算出视差。算法很大的创新就是提出来倾斜支持窗模型,不使用构建代价空间、代价聚合、视差计算、视差优化这套框架,在平面倾斜非常大的图片上(例如贴近地面拍摄)有很好的效果,但一般的场景还是SGM效果更好,而且PatchMatch的计算量非常大,导致原版实现非常慢,所以商业化的消费级双目产品基本都没有采用。较好的方案,是使用cuda进行加速。

这里同样推荐李博的博客:

4、AD-Census算法

AD-Census算法可以说是SGM的改进,而且是中国学者提出的,从名字可以看出,相比于SGM,构建代价空间的方式采用了AD+Census,并且比SGM增加了十字臂的代价聚合方式,Intel RealSense系列双目相机引用了该论文,应该有参考其实现

这里同样推荐李博的博客:

5、其他传统算法

ELAS算法在MiddleBurry数据集有提到,但学习资料很少

6、深度学习算法

深度学习是目前双目立体匹配算法的发展方向,也是目前学术界热门,但目前商业化落地的产品很少,主要原因是算力限制,能真正在芯片上运行的网络非常少,虽然深度学习在各种数据集的指标上远胜于传统算法,但实际应用还是有很多挑战。

其实深度学习并不复杂,自2016年DispNet诞生,端到端的立体匹配网络正式提出,很多网络都是将传统的立体匹配算法的四部分:构建代价空间、代价聚合、视差计算、视差优化改变成网络的方式实现,只不过每个网络都有作者的创新点进行改进。到2019年,RAFT提出,带来了颠覆性的突破,通过引入GRU和Convex-Upsample等模块,以及迭代优化的思想,取得了非常好的效果,目前RAFT和基于RAFT的改版,例如CREStereo、IGEV在MiddleBurry都是名列前茅的,但这种多次迭代的结构在芯片端运行确实是个灾难。

下面也推荐一些深度学习方面的学习资料:

7、数据集网站

写在最后:网上关于双目立体匹配算法的文章非常多,本文总结的只是冰山一角,我只是大自然的搬运工,希望对大家有所帮助,我会保持更新的~

  • 22
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
双目立体匹配是一种计算机视觉中的技术,主要用于将双目摄像头获取的两个视角的图像进行配准,获得二者之间的深度信息。Python是一种流行的编程语言,被广泛应用于科学计算和计算机视觉领域。 双目立体匹配算法旨在通过分析两个视角上的图像,找到对应点的像素坐标,进而计算该点的深度。这个过程涉及到图像预处理、特征提取以及匹配搜索等步骤。 在Python中,有许多开源的库和工具可用于实现双目立体匹配。例如,OpenCV库提供了丰富的图像处理和计算机视觉算法,包括双目立体匹配算法。使用OpenCV,我们可以通过加载两个视角的图像,获取它们的特征点,然后应用立体匹配算法来生成深度图。 Sad(Sum of Absolute Differences)是一种常用的匹配代价度量方法,用于计算两个像素块之间的差异。在双目立体匹配中,Sad是一种常用的代价度量方法之一,用于衡量两个像素块之间的相似度。通过计算像素块的Sad值,我们可以确定最佳匹配,并从而估计深度信息。 Python作为一种易学易用的编程语言,广泛运用于双目立体匹配的实现和应用中。它具有丰富的图像处理和计算机视觉库,并且有着不断更新和完善的社区支持。与其他编程语言相比,Python的语法简洁直观,使得双目立体匹配算法的实现更加便捷和高效。 总而言之,双目立体匹配计算机视觉中的一项重要技术,而Python作为一种流行的编程语言,能够提供丰富的工具和库来实现该技术。通过使用Python和相关的图像处理库,我们可以实现双目立体匹配算法,从而获取深度图像,并在诸多应用领域中发挥其重要作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值