立体匹配算法

立体匹配算法总结如下:

BM算法,重点是SGBM算法,GC算法

双目立体匹配算法SGBM

semi-global matching(SGM)是一种用于计算双目视觉中视差(disparity)的半全局匹配算法,在OpenCV中的实现为semi-global block matching(SGBM)。
核心理解:

SGM其实本质上还是一种代价聚合算法,和局部立体匹配算法中的代价聚合很像,不然也不会叫Semi-Global了。

全局算法:为了达到和全局立体匹配算法一样全局能量函数最小化的效果,就需要更多或者全图所有的像素参与到当前像素的约束当中。SGM类似代价聚合是一定范围内的邻域操作(邻域求和,加权平均等),那如何与整张图像上的像素扯上关系而不提高太多性能呢(重点是远距离像素也能扯上关系),于是作者想出了多路径约束聚合的思路,简单说就是让当前像素的代价聚合过程受多个方向(或路径)上所有像素的影响,方向越多参与影响当前像素的邻域像素就越多(原文说一般来讲8-16方向就比较不错了),这样既保证了全局像素的约束,又不用建立全局最小能量函数,避免了复杂运算符,降低了性能,所以才叫半全局算法。

算法原理

一、预处理

Step1:SGBM采用水平Sobel算子,把图像做处理,公式为:

Sobel(x,y)=2[P(x+1,y)-P(x-1,y)]+ P(x+1,y-1)-P(x-1,y-1)+ P(x+1,y+1)-P(x-1,y+1)

**Step2:**用一个函数将经过水平Sobel算子处理后的图像上每个像素点(P表示其像素值)映射成一个新的图像 P n e w P_{new} Pnew 表示新图像上的像素值。

img

reFilterCap 为一个常数参数,opencv缺省情况下取15,

预处理实际上是得到图像的梯度信息,将预处理的图像保存起来,将会用于计算代价。

二、代价计算

1、经过预处理得到的图像的梯度信息经过基于采样的方法得到的梯度代价。

2、原图像经过基于采样的方法得到的SAD代价。

类似卷积块求解之后,直接左右图像做差,求最小值

上述两个代价都会在SAD窗口内进行计算。

三、动态规划

动态规划算法本身存在拖尾效应,视差突变处易产生错误的匹配,利用态规划进行一维能量累积累,会将错误的视差信息传播给后面的路径上。半全局算法利用多个方向上的信息,试图消除错误信息的干扰,能明显减弱动态规划算法产生的拖尾效应。

半全局算法试图通过影像上多个方向上一维路径 的约束,来建立一个全局的马尔科夫能量方程,每个像素最终的匹配代价是所有路径信息的叠加,每个像素的视差选择都只是简单通过 WTA(Winner Takes All)决定的。多方向能量聚集如下图所示:

img

在每个方向上按照动态规划的思想进行能量累积,然后将各个方向上的匹配代价相加得到总的匹配代价,如下式所示:

img

式中L为当前路径累积的代价函数,**P1、P2为像素点与相邻点视差存在较小和较大差异情况下的平滑惩罚,**P1 s ( p , d ) = Σ 1 r L r ( p , d ) s(p,d) = \Sigma_{1}^{r}L_r(p,d) s(p,d)=Σ1rLr(p,d)
默认4条路径,其中动态规划很重要两个参数P1,P2是这样设定的:

P1 =8* cn* sgbm.SADWindowSize*sgbm.SADWindowSize;

P2 = 32* c* sgbm.SADWindowSizesgbm.SADWindowSize;

cn是图像的通道数, SADWindowSize是SAD窗口大小,数值为奇数。

可以看出,当图像通道和SAD窗口确定下来,SGBM的规划参数P1和P2是常数

四、后处理

**Step1:唯一性检测:**视差窗口范围内最低代价是次低代价的(1 + uniquenessRatio/100)倍时,最低代价对应的视差值才是该像素点的视差,否则该像素点的视差为0。其中uniquenessRatio是一个常数参数。

Step2:亚像素插值:

img

**Step3:左右一致性检测:**误差阈值disp12MaxDiff默认为1,可以自己设置。

OpencvSGBM计算右视差图的方式:

通过得到的左视察图计算右视差图

实验:opencv中SGBM算法的参数含义及数值选取

参考:https://blog.csdn.net/A_L_A_N/article/details/81490043

https://blog.csdn.net/yegeli/article/details/119777545?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1-119777545-blog-53302168.t0_layer_searchtargeting_sa&spm=1001.2101.3001.4242.2&utm_relevant_index=4

你可能感兴趣的:(C++,算法,计算机视觉,opencv)