semi-global matching(缩写SGM)是一种用于计算双目视觉中disparity的半全局匹配算法。在OpenCV中的实现为semi-global block matching(SGBM)。

SGBM的思路是:

通过选取每个像素点的disparity,组成一个disparity map,设置一个和disparity map相关的全局能量函数,使这个能量函数最小化,以达到求解每个像素最优disparity的目的。

能量函数形式如下:

D指disparity map。E(D)是该disparity map对应的能量函数。

p, q代表图像中的某个像素

Np 指像素p的相邻像素点(一般认为8连通)

C(p, Dp)指当前像素点disparity为Dp时,该像素点的cost

P1 是一个惩罚系数,它适用于像素p相邻像素中dsparity值与p的dsparity值相差1的那些像素。

P2 是一个惩罚系数,它适用于像素p相邻像素中dsparity值与p的dsparity值相差大于1的那些像素。

I[.]函数返回1如果函数中的参数为真,否则返回0

利用上述函数在一个二维图像中寻找最优解是一个NP-complete问题,耗时过于巨大,因此该问题被近似分解为多个一维问题,即线性问题。而且每个一维问题都可以用动态规划来解决。因为1个像素有8个相邻像素,因此一般分解为8个一维问题。

考虑从左到右这一方向,如下图所示:

则每个像素的disparity只和其左边的像素相关,有如下公式:

r指某个指向当前像素p的方向,在此可以理解为像素p左边的相邻像素。
Lr(p, d) 表示沿着当前方向(即从左向右),当目前像素p的disparity取值为d时,其最小cost值。

这个最小值是从4种可能的候选值中选取的最小值:

1.前一个像素(左相邻像素)disparity取值为d时,其最小的cost值。

2.前一个像素(左相邻像素)disparity取值为d-1时,其最小的cost值+惩罚系数P1。

3.前一个像素(左相邻像素)disparity取值为d+1时,其最小的cost值+惩罚系数P1。

4.前一个像素(左相邻像素)disparity取值为其他时,其最小的cost值+惩罚系数P2。

另外,当前像素p的cost值还需要减去前一个像素取不同disparity值时最小的cost。这是因为Lr(p, d)是会随着当前像素的右移不停增长的,为了防止数值溢出,所以要让它维持在一个较小的数值。

C(p, d)的计算很简单,由如下两个公式计算:

即,当前像素p和移动d之后的像素q之间,经过半个像素插值后,寻找两个像素点灰度或者RGB差值的最小值,作为C(p, d)的值。

具体来说:设像素p的灰度/RGB值为I(p),先从I(p),(I(p)+I(p-1))/2,(I(p)+I(p+1))/2三个值中选择出和I(q)差值最小的,即

d(p,p-d)。然后再从I(q),(I(q)+I(q-1))/2,(I(q)+I(q+1))/2三个值中选择出和I(p)差值最小的,即d(p-d,p)。最后从两个值中选取最小值,就是C(p, d)

上面是从一个方向(从左至右)计算出的像素在取值为某一disparity值时的最小cost值。但是一个像素有8个邻域,所以一共要从8个方向计算(左右,右左,上下,下上,左上右下,右下左上,右上左下,左下右上)这个cost值。

然后把八个方向上的cost值累加,选取累加cost值最小的disparity值作为该像素的最终disparity值。对于每个像素进行该操作后,就形成了整个图像的disparity map。公式表达如下:

SGBM算法遍历每个像素,针对每个像素的操作和disparity的范围有关,故时间复杂度为:

参考资料:

【1】http://lunokhod.org/?p=1356

【2】http://zone.ni.com/reference/en-XX/help/372916M-01/nivisionconceptsdita/guid-53310181-e4af-4093-bba1-f80b8c5da2f4/

【3】A Pixel Dissimilarity Measure That Is Insensitive to Image Sampling. Stan Birchfield and Carlo Tomasi

【4】Accurate and Efficient Stereo Processing by Semi-Global Matching and Mutual Information. Heiko Hirschmuller

转载于:https://www.cnblogs.com/hrlnw/p/4746170.html

semi-global matching 算法总结相关推荐

  1. 【论文学习笔记-6】立体匹配:MGM(More global matching)和R3SGM(Real-time Raster-Respecting global matching)

    [论文学习笔记-6]立体匹配:MGM(More global matching)和R3SGM(Real-time Raster-Respecting global matching) Motivati ...

  2. Score Matching算法介绍

    目录 简介 Score Function 求解方法 emm 参考 简介 score matching算法是一种求解概率密度函数的参数的算法. 在很多情况下,概率密度函数可以表示为: p(ξ;θ)=1Z ...

  3. Map Matching 算法归纳与对比

    1.概述 在地图应用中,常用的组合导航得到的定位精度误差在10m-20m,无法准确匹配到对应的道路上,需采用地图匹配 map matching算法将轨迹点匹配到相应路网上.map matching是基 ...

  4. SGM(Semi-Global Matching)算法笔记

    SGM 论文:<Stereo Processing by Semi-Global Matching and Mutual Information> [论文重点就是基于互信息的代价,代价聚合 ...

  5. 关于双目立体视觉的三大基本算法及发展现状的总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 双目立体视觉一直是机器视觉研究领域的发展热点和难点,"热 ...

  6. sgbm算法_关于双目立体视觉的三大基本算法及发展现状的总结

    作者:何文博 来源:公众号 @3D视觉工坊 链接:关于双目立体视觉的三大基本算法及发展现状的总结 双目立体视觉一直是机器视觉研究领域的发展热点和难点,"热"是因为双目立体视觉有着及 ...

  7. 关于双目立体视觉的三大基本算法SAD、SSD、SGBM及发展现状的总结

    双目立体视觉一直是机器视觉研究领域的发展热点和难点,"热"是因为双目立体视觉有着及其广阔的应用前景,且随着光学.计算机科学等学科的不断发展,双目立体技术将不断进步直到应用到人类生活 ...

  8. 【AI视野·今日CV 计算机视觉论文速览 第159期】Tue, 24 Sep 2019

    AI视野·今日CS.CV 计算机视觉论文速览 Tue, 24 Sep 2019 Totally 67 papers ?上期速览✈更多精彩请移步主页 Interesting: ?基于层次点和边缘交互的网 ...

  9. 图形学必备!斯坦福图形学几何处理算法课程2——Shape Matching Correspondence

    给两个shape,找到联系 Shape Matching的应用如下:包括医疗,制造业,3d动画等等 下面试方法的分类,   global matching的几种方法    

最新文章

  1. php键顺序初始化,Java类中各成员初始化的顺序
  2. 图的数组(邻接矩阵)存储结构
  3. Android Service Security
  4. 给书配代码-电力经济调度(1):基于拉格朗日及运筹规划方法的经济调度算法
  5. 安装SQL提示重启电脑失败,解决办法
  6. 1787: [Ahoi2008]Meet 紧急集合
  7. 东华理工大学arm试卷_ARM东华理工大学2015-2016试卷A
  8. iDow Brand——关于一个商标的构思。
  9. iPhone13最新外观售价曝光:好看还便宜
  10. 1.1.27 word表格里的文字不显示
  11. [题解] [AHOI2009] 跳棋
  12. 论文赏析【EMNLP19】语言模型效果不好?也许你可以给它添加一点句法信息
  13. selenium IDE Chrome下载安装与使用
  14. Linux下安装配置JDK6
  15. js生成二维码的几种方法
  16. 2021-11-03
  17. Excel函数 - Round函数使用方法
  18. 《代码大全》读书笔记之一
  19. 【Python学习笔记】猜颜色小游戏
  20. java 民族_java简历 五年

热门文章

  1. 计算机是如何工作的,Java多线程编程
  2. mysql execution plan_MySQL Execution Plan--NOT IN查询
  3. centos7下源码安装mysql5.6_Centos7 源码安装mysql5.6
  4. python的else_Python3 if...elseif...else语句
  5. java 包 划分_Java包的命名与划分
  6. NYOJ-01串(dp)
  7. 百面机器学习 #3 经典算法:02 逻辑回归
  8. 机器学习解决问题思路 — 词嵌入矩阵E对于NLP问题的重要性
  9. 基于postman的api自动化测试实践
  10. 彻底删除0KB顽固文件或文件夹的方法