双目立体匹配步骤

1、匹配代价计算

  匹配代价是用来衡量候选像素与匹配像素之间的相关性的,代价越小,说明两个像素点之间的相关性越大,是同名点的概率也越大。
  所谓同名点,就是左右两幅图像中相对应的点,如下图中红框框起来的点就是同名点。
在这里插入图片描述

 
  需要注意的是两幅图中两个像素无论是否是同名点,都是可以进行代价匹配的,无非就是不是同名点的两个像素代价高。也正是这样,之后会遍历搜索相关像素点,计算其代价值后寻找一个代价最小的像素点作为同名点。
  其实,在每个像素搜索同名点之前,都会指定一个视差的搜索范围 ,视差搜索时将范围限定在D内,用一个大小为W×H×D(W为影像宽度,H为影像高度)的三维矩阵C来存储每个像素在视差范围内每个视差下的匹配代价值。矩阵C通常称为DSI(Disparity Space Image)。
  注意上文红色标注的字,矩阵C是用来存储匹配代价的,其是在视差范围D类进行搜索的,然后把每个像素(每个像素坐标记为(x,y))在各个视差(d)下的匹配代价存储起来。这样可以很清楚的看出矩阵C是一个三维矩阵,结合下图进一步理解。
在这里插入图片描述

DSI示意图(C(x,y,d)代表像素(x,y)在视差为d时的匹配代价)
 

  讲到这里,是不是有一个疑问?这个匹配代价是怎么计算的呢?其实匹配代价的计算有很多种,传统方法中有AD(灰度绝对值差)、NCC(归一化相关系数)等等;在计算机视觉中有CT(Census变换)、MI(互信息法)等等。这些不同的匹配代价计算方法都有着各自的优势和劣势,对不同的数据表现出的效果也不一样,因此,我们在进行立体匹配中选择合适的匹配代价计算方法是非常关键的。
  匹配代价计算方法见如下文章:匹配代价计算
 

2、代价聚合

  上文说到匹配代价是用来衡量候选像素与匹配像素之间的相关性的,匹配代价往往是通过两个像素邻域内一定大小窗口的像素来计算,这样计算只考虑了局部信息,很容易受到噪声等因素影响,这样就会导致真实的同名点代价值不是最小,也就错误的找到了同名点。这和代价聚合有什么关系呢?可能你已经猜出了一些,代价聚合的根本目的就是让代价值能够准确的反应像素之间的相关性,说白了,就是让匹配代价计算的效果更好。我们可以通过下面的一组图片直观的感受一下使用代价聚合对图片效果的影响。

代价聚合前后视差图示意图

 
  可以看出使用了代价聚合后效果还是很明显的,聚合后的图像明显更加接近标准图像(Ground Truth)。
代价聚合其实是建立邻接像素之间的联系,以一定的准则,如相邻像素应该具有连续的视差值,来对代价矩阵进行优化,这种优化往往是全局的,每个像素在某个视差下的新代价值都会根据其相邻像素在同一视差值或者附近视差值下的代价值来重新计算,得到新的DSI,用矩阵S来表示。(矩阵S和矩阵C维度是一致的)
  上文红字标注的连续的视差值该怎么理解,下面谈谈视差连续与视差非连续,视差连续代表局部范围内的像素的视差相差很小(1个像素内),是一个连续的变化趋势;而非连续是指局部范围内的像素视差相差很大(超过1个像素),是一个突变的变化趋势。这个局部范围往往是一个矩形的窗口(比如3x3、5x5)。由于视差和深度某种程度上其实是等价的( ,Z为视深度,diff为视差),所以视差连续性背后表达的是空间中目标表面离相机的距离的连续性,如果目标是在连续的表面影像上成像的,则成像范围内视差也是连续的;而如果目标有前景和背景在影像上成像,则前景和背景的交界处,在局部窗口内会是一部分属于前景一部分属于背景,前景和背景离相机的距离就可能相差很大了,视差也会相差很大,即不连续。下面通过下图直观感受一下视差的连续区域与不连续区域。
在这里插入图片描述

视差连续区域与非连续区域示意图

 
  常用的代价聚合方法有扫描线法、动态规划法、SGM算法中的路径聚合法等。

3、视差计算

  视差计算较为简单,它就是通过代价聚合后的矩阵S来确定每个像素的最优视差值,一般采用赢家通吃的算法(WTA)。下图表示某个像素所有视差下的代价值,WTA算法就是选择其中最小的代价所对应的视差作为最优视差。
在这里插入图片描述

赢家通吃(WTA)算法示意图
 

4、视差优化

  通过步骤3的视差计算,可以得到各个像素的视差,即得到一个视差图。视差优化的目的是对步骤3中得到的视差图进行优化,进一步改善视差图的质量,一般采用左右一致性检查算法剔除因为遮挡和噪声而导致的错误视差;采用剔除小连通区域算法来剔除孤立异常点;采用中值滤波、双边滤波等平滑算法对视差图进行平滑;另外还有一些有效提高视差图质量的方法如鲁棒平面拟合、亮度一致性约束、局部一致性约束等也常被使用。

 

5、小结

  上述的四个步骤并不是所有算法都要用上,局部匹配算法的步骤一般包括匹配代价计算、代价聚合和视差计算三个步骤,全局算法则包括匹配代价计算,视差计算与视差优化三个步骤,半全局算法SGM(Semi-Global Matching)则四个步骤都有。

 
参考文章:https://ethanli.blog.csdn.net/article/details/83302323

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头小苏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值