写点什么

双目立体匹配步骤

作者:秃头小苏
  • 2022 年 7 月 09 日
  • 本文字数:2060 字

    阅读完需:约 7 分钟

1、匹配代价计算

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



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



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


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

2、代价聚合

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



<center>代价聚合前后视差图示意图</center>


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



<center>视差连续区域与非连续区域示意图</center>


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

3、视差计算

  视差计算较为简单,它就是通过代价聚合后的矩阵 S 来确定每个像素的最优视差值,一般采用赢家通吃的算法(WTA)。下图表示<font color="red">某个像素所有视差</font>下的代价值,WTA 算法就是选择其中最小的代价所对应的视差作为最优视差。



<center>赢家通吃(WTA)算法示意图</center> 

4、视差优化

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


5、小结

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


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

发布于: 刚刚阅读数: 3
用户头像

秃头小苏

关注

还未添加个人签名 2022.07.01 加入

还未添加个人简介

评论

发布
暂无评论
双目立体匹配步骤_7月月更_秃头小苏_InfoQ写作社区