半全局立体匹配算法Semi-Global Matching,SGM由学者Hirschmüller在2005年所提出1,提出的背景是一方面高效率的局部算法由于所基于的局部窗口视差相同的假设在很多情况下并不成立导致匹配效果较差;而另一方面全局算法虽然通过二维相邻像素视差之间的约束(如平滑性约束)而得到更好的匹配效果,但是对内存的占用量大,速度慢。为了结合两者的优点,同时避免两者的缺点,SGM算法依旧采用全局框架,但是在计算能量函数最小化的步骤时使用高效率的一维路径聚合方法来代替全局算法中的二维最小化算法,使用一维最优来近似二维最优,得到的视差图在效果上和全局算法没有太大的差别,但是算法效率却有非常大的提升。

本专题将从匹配算法的四个步骤出发,来对SGM算法的理论做一个详细介绍。

理论恒叨系列

【理论恒叨】【立体匹配系列】经典SGM:(1)匹配代价计算之互信息(MI)
【理论恒叨】【立体匹配系列】经典SGM:(2)匹配代价计算之Census变换
【理论恒叨】【立体匹配系列】经典SGM:(3)代价聚合(Cost Aggregation)
【理论恒叨】【立体匹配系列】经典SGM:(4)视差计算、视差优化

【理论恒叨】【立体匹配系列】经典SGM:匹配代价计算之互信息(MI)

  • 基于互信息的匹配代价计算

  本篇首先介绍SGM算法第一步:匹配代价计算 的典型算法之一:基于互信息(Mutual Information,MI)的匹配代价计算法。

基于互信息的匹配代价计算

  从上一篇文章中可知,匹配代价计算是双目立体匹配的第一步,在双目匹配算法中,大部分算法会为每个像素预先设置一个固定的视差搜索范围DDD(dmind_{min}dmin​~dmaxd_{max}dmax​),将像素的视差真值限定在范围DDD内,并引入一个大小为W×H×DW×H×DW×H×D的三维代价空间CCC, CCC中的每个元素映射左影像每个像素在视差范围内每个视差下的匹配代价值,而匹配代价计算即是通过计算像素之间的相关性来填充CCC的步骤,计算的时间复杂度为O(WHD)O(W H D)O(WHD)。
  在SGM被提出的文献1 2中,Hirschmüller使用基于互信息(Mutual Information,MI)的匹配测度计算算法来计算匹配代价,互信息是一种对影像明暗变化不敏感的相关性测度,它通过两张影像各自的熵HHH以及两者的联合熵来定义,熵代表影像的信息量,是基于灰度的概率分布所得到的统计量,图像的熵越大代表包含的像素灰度越丰富,灰度分布越均匀。互信息MI通过公式1来计算,

式1

  其中, 为图像I1I_1I1​和I2I_2I2​的互信息,HI1H_{I_1}HI1​​ 、HI2H_{I_2}HI2​​分别为I1I_1I1​和I2I_2I2​的熵, HI1,I2H_{I_1,I_2}HI1​,I2​​为两张图像的联合熵。图像的熵及联合熵通过灰度的概率分布P计算,计算公式分别如公式2及3所示。

式2

式3

  对于两幅配准好的影像来说,它们的联合熵是很小的,因为其中一张影像可以通过另外一张影像预测,这表示两者的的可区分度很低,所包含的信息很少,而由公式1可知它们的互信息会相对更大,这也是互信息可以作为相关性测度的理论依据,当两者的相关性越高,则互信息越大。
在使用互信息的立体匹配中,首先必须将其中一幅图像根据视差图进行纠正,使得同名点在两张图像中处于同一位置,假设基准影像为IbI_bIb​,匹配影像为ImI_mIm​,则纠正方式可表示为

式4

  公式1是针对全图计算互信息的公式,而不是像素之间独立计算,无法直接用于匹配代价计算,Kim等3使用泰勒展开方法将联合熵的计算转换为通过数据项累加的方式,数据项的计算依赖于同名点对且对每个像素独立,如公式5所示,

式5

  其中,数据项hI1,I2h_{I_1,I_2}hI1​,I2​​通过左右影像同名点灰度的概率分布 来计算,若影像内同名点数为nnn,通过基于高斯卷积g(i,k)g(i,k)g(i,k) 的Parzen窗估计法3来计算数据项,见公式6:

式6

  上式中,i,ki, ki,k为参与计算数据项的两个灰度,它们的联合概率分布使用公式7计算

式7

  其中,TTT函数若其参数为真,则返回1,反之返回0,实际上就是统计灰度对与(i,k)(i, k)(i,k)相同的同名点对在全图中所占的比例。

  Kim等人3认为基准影像的熵HI1H_{I_1}HI1​​是固定的,而匹配影像的熵HI2H_{I_2}HI2​​也基本是固定的因为纠正函数fD(Ib)f_D(I_b)fD​(Ib​)只不过是对匹配影像的灰度进行了重新位置分配,但是由于有遮挡的存在,基准影像被遮挡的区域没有正确的视差值,这些区域也就不存在同名点,不能参与熵计算,而由于这些区域的位置是无法预先被告知,所以只能认定两张影像的熵都是不固定的,因此一般来说,采用计算联合熵相类似的方式来计算影像各自的熵,如公式8所示:

式8

  概率分布的计算需要遍历全图,但只需要统计同名点对所在的区域。实际上PI(i)P_I(i)PI​(i)可以直接使用联合概率分布来计算,即

式9

  最终,互信息的定义可以用公式10来描述:

式10

  基于互信息的匹配代价可通过公式11来计算:

式11

  其中,qqq表示像素ppp的同名点。

  从以上描述可以看到,要计算互信息,必须预先知道视差图来对匹配影像进行纠正,这仿佛类似于鸡生蛋蛋生鸡的问题,论文1中采用的是一种分层迭代的方案,对影像进行逐级降采样得到多层影像对,为最上层影像对随机生成一张视差图,然后计算得到的代价数组作为初始代价数组计算新的视差图并作为下一层影像对的视差图,如此迭代至最下层影像,一般迭代三次即可达到较好的匹配结果。

  互信息法代价计算原理较为复杂,且计算需要迭代,计算效率不高,在实际应用中,更简单有效的方法如Census变换、BT法会得到更多的青睐。下一篇中,将为大家详细介绍实用高效且简单易懂的Census变换法。

  查看下篇Census变换法请点击>> link

码上教学系列

【码上实战】【立体匹配系列】经典SGM:(1)框架与类设计
【码上实战】【立体匹配系列】经典SGM:(2)代价计算
【码上实战】【立体匹配系列】经典SGM:(3)代价聚合
【码上实战】【立体匹配系列】经典SGM:(4)代价聚合2
【码上实战】【立体匹配系列】经典SGM:(5)视差优化
【码上实战】【立体匹配系列】经典SGM:(6)视差填充
【码上实战】【立体匹配系列】经典SGM:(7)弱纹理优化

完整代码已发布于Github开源项目:Github/SemiGlobalMatching,欢迎免费下载

博主简介:
Ethan Li 李迎松
武汉大学 摄影测量与遥感专业博士

主方向立体匹配、三维重建

2019年获测绘科技进步一等奖(省部级)

爱三维,爱分享,爱开源
GitHub: https://github.com/ethan-li-coding
邮箱:ethan.li.whu@gmail.com

个人微信:

欢迎交流!

喜欢博主的文章不妨关注一下博主的博客,感谢!
博客主页:https://blog.csdn.net/rs_lys


  1. HIRSCHMULLER H. Accurate and Efficient Stereo Processing by Semi-Global Matching and Mutual Information: Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on, 2005[C]. ↩︎ ↩︎ ↩︎

  2. HIRSCHMÜLLER H. Hirschmüller, H.: Stereo processing by semiglobal matching and mutual information. IEEE PAMI 30(2), 328-341[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2008,30(2):328-341. ↩︎

  3. KIM J, KOLMOGOROV V, ZABIH R. Visual Correspondence Using Energy Minimization and Mutual Information: IEEE International Conference on Computer Vision, 2003. Proceedings, 2008[C]. ↩︎ ↩︎ ↩︎

【理论恒叨】【立体匹配系列】经典SGM:(1)匹配代价计算之互信息(MI)相关推荐

  1. 双目立体匹配经典算法之Semi-Global Matching(SGM)概述:匹配代价计算之互信息(Mutual Information,MI)...

      半全局立体匹配算法Semi-Global Matching,SGM由学者Hirschmüller在2005年所提出1,提出的背景是一方面高效率的局部算法由于所基于的局部窗口视差相同的假设在很多情况 ...

  2. 【理论恒叨】【立体匹配系列】经典SGM:(3)代价聚合(Cost Aggregation)

    理论恒叨系列 [理论恒叨][立体匹配系列]经典SGM:(1)匹配代价计算之互信息(MI) [理论恒叨][立体匹配系列]经典SGM:(2)匹配代价计算之Census变换 [理论恒叨][立体匹配系列]经典 ...

  3. 【理论恒叨】【立体匹配系列】经典SGM:(2)匹配代价计算之Census变换

    理论恒叨系列 [理论恒叨][立体匹配系列]经典SGM:(1)匹配代价计算之互信息(MI) [理论恒叨][立体匹配系列]经典SGM:(2)匹配代价计算之Census变换 [理论恒叨][立体匹配系列]经典 ...

  4. 【理论恒叨】【立体匹配系列】经典AD-Census: (1)代价计算

    下载AD-Census完整源码,点击进入: https://github.com/ethan-li-coding/AD-Census 欢迎同学们在Github项目里讨论,如果觉得博主代码质量不错,右上 ...

  5. 【理论恒叨】【立体匹配系列】经典AD-Census: (3)扫描线优化(Scanline Optimization)

    下载AD-Census完整源码,点击进入: https://github.com/ethan-li-coding/AD-Census 欢迎同学们在Github项目里讨论,如果觉得博主代码质量不错,右上 ...

  6. 【理论恒叨】【立体匹配系列】经典PatchMatch: (1)Slanted support windows倾斜支持窗模型

    一枝独秀不是春 理论恒叨系列 [理论恒叨][立体匹配系列]经典PatchMatch: (1)Slanted support windows倾斜支持窗模型 [理论恒叨][立体匹配系列]经典PatchMa ...

  7. 双目立体匹配之匹配代价计算

    文章目录 AD SAD Cencus AD-Cencus 之前谈到过双目立体匹配的步骤,主要分为四步(半全局方法):匹配代价计算.代价聚合.视差计算.视差优化.匹配代价计算是双目立体匹配的第一步,其有 ...

  8. 【码上实战】【立体匹配系列】经典SGM:(2)代价计算

    码上教学系列 [码上实战][立体匹配系列]经典SGM:(1)框架与类设计 [码上实战][立体匹配系列]经典SGM:(2)代价计算 [码上实战][立体匹配系列]经典SGM:(3)代价聚合 [码上实战][ ...

  9. 【码上实战】【立体匹配系列】经典SGM:(5)视差优化

    千呼万唤始出来,犹抱琵琶半遮面. 抱歉让大家久等,最近事儿繁多,导致更新推迟,实在抱歉. 码上教学系列 [码上实战][立体匹配系列]经典SGM:(1)框架与类设计 [码上实战][立体匹配系列]经典SG ...

最新文章

  1. 提分策略:数据采样方法最全总结!
  2. 你和你的好友,正在免费帮微信训练神经网络
  3. 酷狗音乐的大数据实践
  4. java失败javac成功_JAVA SE JDK-10安装、配置(解决java成功,javac失败问题)
  5. shell出错test_path: command not found
  6. Vue的基本环境搭建
  7. logback指定不同包下的日志输出到不同的文件
  8. CentOS发行版本介绍
  9. 安装与配置Flutter开发环境
  10. 查看局域网中的其他机器的IP地址
  11. Matlab画图颜色设置
  12. matlab环境下图像分形维数的计算,MATLAB环境下图像分形维数的计算
  13. 本人初中生 历时5个月时间 我自己研制的基于Windows的操作系统终于开发完成
  14. Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能
  15. pytorch如何freeze模型参数
  16. Tk/Tkx滚动条的使用
  17. 一个 JDBC 实现对 mysql 进行分页查询的 实例
  18. 2022年模式识别高峰论坛学习与个人感悟
  19. Python---项目3-破解使用crypt方法加密(已加salt参数)的登录密码
  20. 智能型炉温测试仪kic x5软件,KIC X5 炉温测试仪产品说明ppt课件

热门文章

  1. Linux-Udev机制
  2. ubuntu 安装中文输入法(超简靠谱版)
  3. 企业公众号文章写作方向要从这几个方面着手
  4. 编译MapGuide
  5. 3.1 Linux 支持的文件系统类型
  6. windows上配置IIS全过程
  7. 《产品设计与开发(原书第5版)》——2.6 产品开发组织
  8. 产品经理 ≠ 产品设计师
  9. 秋招面经汇总(算法工程师,计算机视觉工程师,深度学习工程师,机器学习工程师)
  10. Go实战--golang中使用MongoDB(mgo)