semi-global matching算法是SGM的缩写,是一种基于计算机双目视觉中的disparity(视差)的半全局匹配算法,在opencv中的实现为semi-global block matching(SGBM)。
SGBM的思路:
通过选取每个像素点的disparity,组成一个视差图(disparity map),设置一个和视差图相关的全局能量函数,使这个能量函数最小化,以达到求解每个像素最优disparity (视差)的目的 。
能量函数的形式如下:
D指disparity map。 E(D)是该disparity map 对应的能量函数。
p,q 代表图像中的某个像素。
Np指像素p的相应像素点。
C(p,Dp)指当前像素点disparity为Dp时,该像素点的cost(损失)。
P1是一个惩罚系数,它适用于像素p相邻像素中disparity值与disparity值相差1的那些像素。
P2是一个惩罚系数,它适用于像素p相邻像素中disparity值与p的disparity值相差大于1的那些像素。
I[.]函数返回1如果函数中的参数为真,否则返回0。
利用上述函数在一个二维图像中寻找最优解是一个NP-complete问题,耗时过于巨大,因此该问题被近似分解为多个一维问题,即线性问题。而且每个一维问题都可以用动态规划来解决。因为1个像素有8个相邻像素ÿ