SGM—代价聚合
以下将基于个人理解,分别从SGM的核心公式,代价计算步骤,代价聚集。由于笔者学识所限,如有错漏或者理解错误的地方,敬请批评。
由于噪声等因素,基于像素的代价计算通常是不明确的,并错误匹配比正确匹配的代价更低。因此,增加了一个附加的约束,通过惩罚相邻差的变化来支持平滑性。像素代价和平滑项约束可以用能量函数E(D)来表示,能量函数E(D)依赖于深度图像D:
第一项是视差为D的所有像素匹配代价的总和,第二项为像素p所有邻近像素q视差改变小于等于1的约束惩罚项P1,第三项为像素p所有邻近像素q视差改变大于1的约束惩罚项P2。对视差变化小的使用较低的惩罚,调整对倾斜或弯曲表面的适应;对于视差变化大的惩罚来保留不连续的面,不连续性的面通常是可见的强度变化。通过采用P2来调整梯度强度,P2′ 为P2的初始值,一般设置为远大于P2>P1。
的数。
立体匹配的问题现在可以归结为寻找能使能量最小化的视差图像D的问题了,但是,在二维的图像中对于存在不连续的能量全局最小化即是NP完全问题(即多项式复杂程度的非确定性问题)。相比之下,利用DP可以在多项式有效地时间内实现图像单行(即一维)的最小化。但是,在二维图像中,很难将单个图像行的一维优化相互关联。例如,在一个方向(即图像行)上非常强的约束与在另一个方向(即图像列)上没有或较弱得约束结合在一起。
这就产生了将各个方向的匹配成本平均地聚集在一起的新思想。对于像素p和视差d,聚合代价S是通过对各方向一维最小代价路径的代价求和来计算的。
L‘r(p,d)表示沿着某一路径r遍历视差为d的所有像素p的代价,
第一项为数据项,匹配代价值C,第二项是平滑项,路径上前一个像素p-r的最小代价包括对不连续性的适当惩罚。
L’的值沿路径永久增加,可能会导致非常大的值。然而,可以通过减去减去前一个像素的最小路径代价来改变。
这个修改不会改变通过视差空间的实际路径,因为对于一个像素p的所有视差,减去的值都是常数,因此,最小值的位置不会改变;然而,上限为
像素的总路径代价值S
S的上限很容易确定为S≤16(Cmax +P2),此时是16条路径时。
C(p,d)是大小为W×H×D(W为影像宽度,H为影像高度,D则为事先给定的视差范围)的三维矩阵来存储每个像素在视差范围内每个视差下的匹配代价值。矩阵C通常称为DSI(Disparity Space Image),这个长方块也是我们常说的视差空间。下图为DSI的示意图:
S(p,d)是一个和C(p,d)大小一样的三维矩阵,用来储存每个像素的聚合代价值。