SGM—视差计算
以下将基于个人理解,分别从SGM的核心公式,代价计算步骤,代价聚集。由于笔者学识所限,如有错漏或者理解错误的地方,敬请批评。
子像素拟合和一致性检查几乎是所有立体匹配算法必执行的策略。子像素拟合将整像素精度提高到子像素精度,而一致性检查可以说是剔除错误匹配的不二选择。
在局部立体匹配匹配中,与基础图像 Ib 对应的视差图Db是通过选择每一个像素p和对应的最小代价视差d来确定的。对于子像素拟合,通过相邻代价拟合一条二次曲线,即在下一个更高和更低的视差处,计算最小值的位置。然而,由于计算简单,它被用作一种近似。这支持快速计算。
匹配图像对用的视差图Dm可以通过遍历与匹配图像上像素点q所在的极线上的相同代价来计算。再次,选择对应代价最小的视差d。然而,代价聚合这步并不能够均衡的处理匹配图像和基础图像。因此,就期待一个很好的结果,通过再次执行像素匹配和聚合来从新计算计算Dm,但是这次 Im 是基础图像而 Ib 为匹配图像。对于稍微好一点的对象边缘,增加的运行时间是否可以接受取决于应用程序。来自Dm和Db的异常值可以通过中值滤波器过滤掉。
Dm和Db的计算可以通过一致性检查来确定遮挡和假匹配。将Db的每个视差与Dm对应的视差进行比较。如果来年两个值有差异就视为无效。
一致性检查只允许一对一的映射,从而强制唯一性约束。视差计算和一致性检查要求在每个视差访问每个像素的次数不变。因此,这一步的复杂度为O(WHD)。