参考:@迷雾forest http://blog.youkuaiyun.com/wsj998689aa/article/details/49464017,原博主对SGM算法的精髓理解的很透,我是在参考他文章的基础上,才能看懂SGM算法几处关键的地方。本文的不同在于加入了一些我自己的理解,并且调整了一下整个算法阐述的思路,当是自己的一个阅读笔记。后边打算再做一下SGM原始算法与OpenCV的SGBM算法实现的对比,并且争取自己实现一下SGM算法。因为我的导师不搞这个方向,很多东西都是我自己的理解,恐怕会有不对的地方,还请大家多指正。下面直接从第二章开始。
2.半全局立体匹配
半全局立体匹配算法基于一种逐像素匹配的方法,该方法使用互信息来评价匹配代价,并通过组合很多一维的约束来近似一个全局的二维平滑约束。本方法分成下面几个步骤,其中有一些并不是必须的。
2.1 逐像素匹配代价的计算
输入的左右图像必须已经知道对极几何模型,但是不一定是校正过的,因为有些图像是难以校正的,比如推扫式图像。要计算参考图(base image)某点P的匹配代价,需要用到其灰度为Ibp,及在待匹配图(match image)的疑似匹配点q,其灰度为Imq,p和q之间有极线方程q=ebm(p,d),d是极线的参数。如果图像已经被校正了,那么待匹配图在参考图的右边,且d代表视差。
一个重要的问题是用于匹配的区域的大小和形状,区域越大,鲁棒性越好,但是大了以后会导致物体的边界模糊。这里不使用P邻域内的视差是连续的这一假设,也就是说,只有Ibp和Imq这两个灰度值被用来计算点p匹配代价,其他的点不考虑。
互信息M的定义式,互信息是基于熵来计算的,下面的三项分别是图1的熵,图2的熵,以及图12的联合熵,紧接着给出熵和联合熵的定义: