Stereo Processing by Semiglobal Matching and Mutual Information
基于半全局匹配和互信息的立体处理
摘要
本文描述了半全局匹配的立体算法。该算法采用逐像素的基于互信息的匹配代价补偿不同亮度的输入图像。逐像素匹配通过一个平滑约束支持,平滑约束通常表示为全局代价函数。SGM通过从各个方向进行逐像素优化来执行快速近似。讨论还这几到遮挡检测、亚像素精化和多基线匹配。此外,还提出了去除离群值、从结构化环境的特殊问题中恢复以及提出了间隙插值方法。最后,提出了几乎任意大小图像的处理策略和通过正交投影进行视差图像融合的策略。对标准立体图像的比较表明,SGM算法是目前在排名最靠前的算法之中,并且在考虑亚像素的情况下是最好的一个。算法复杂度与像素的数量和视差范围成线性关系,这使得在典型测试图像上的运算时间只有1-2秒。基于MI的匹配代价的深度评估证明了对广泛的亮度变化有较好的容忍度。最后,通过对大型航拍和推扫图像的重建实例验证了本文提出的方法在实际问题中的有效性
1 介绍
2 半全局匹配
半全局匹配方法是基于互信息的逐像素匹配 的思想和近似全局,通过结合多个一维约束条件得到的二维平滑约束。该算法采用不同的处理步骤进行描述。其中一些步骤是可选的,这取决于应用情况。
2.1 逐像素匹配代价计算
输入图像被假定已知其中的对极几何模型,但是并不需要是被校正过的,因为有些情况是难以被校正的。例如推扫式图像中。由于平行投影在运动方向上,透视投影与运动方向正交,线性运动使极线变成双曲线[21] 。 非线性运动在航空影像中是不可避免的,导致极线成为一般的曲线和图像不能够被校正[22] 。
要计算参考图像中某一像素点 p \mathbf{p} p 的匹配代价,需要用到其灰度 I b p I_{b\mathbf{p}} I b p ,及在待匹配图像的疑似匹配点 q \mathbf{q} q 的灰度 I m q I_{m\mathbf{q}} I m q ,通过 q = e b m ( p , d ) \mathbf{q}=e_{bm}(\mathbf{p},d) q = e b m ( p , d ) 。函数 e b m ( p , d ) e_{bm}(\mathbf{p},d) e b m ( p , d ) 代表参考图像中像素 p \mathbf{p} p 和极线参数 d d d 下匹配图像中的极线。对于校正后的图像,且匹配图像在参考图像的右侧,则 e b m ( p , d ) = [ p x − d , p y ] e_{bm}(\mathbf{p},d)=[p_{x}-d,p_{y}] e b m ( p , d ) = [ p x − d , p y ] ,且 d d d 代表视差。
一个重要的方面是考虑匹配区域的大小和形状。匹配的鲁棒性随面积的增大而增强。然而,面积增大后会出现不连续的位置,在不连续位置上违反了视差在区域内恒定的假设,这将导致模糊了物体边界和精细结构。某些形状和技术能够用于减少模糊,但是模糊不能避免[8] 。因此,这里不使用在 p \mathbf{p} p 邻域内视差恒定的假设。也就是说只有 I b p I_{b\mathbf{p}} I b p 和 I m q I_{m\mathbf{q}} I m q 这两个灰度值被用于计算匹配代价。
逐像素代价计算的一个选择是 Brichfield 和 Tomasi 提出的采样不敏感测量[2] (简称BT )。代价C B T ( p , d ) C_{BT}(\mathbf{p},d) C B T ( p , d ) 通过极线中在每一个方向上的半个像素范围内的像素 p \mathbf{p} p 和像素 q = e b m ( p , d ) \mathbf{q}=e_{bm}(\mathbf{p},d) q = e b m ( p , d ) 的最小灰度差的绝对值进行计算。
另一种匹配代价计算是基于互信息(MI,Mutual Information)[4] ,它对记录和光照变化不明显。互信息由两个图像各自的熵 H H H 以及他们的联合熵来定义:
M I I 1 , I 2 = H I 1 + H I 2 − H I 1 , I 2 MI_{I_{1},I_{2}}=H_{I_{1}}+H_{I_{2}}-H_{I_{1},I_{2}} M I I 1 , I 2 = H I 1 + H I 2 − H I 1 , I 2
熵是通过计算相关图像的概率分布P P P 得到:
H I = − ∫ 0 1 P I ( i ) log P I ( i ) d i H_{I}=-\int_{0}^{1}P_{I}(i)\log{P_{I}(i)di} H I = − ∫ 0 1 P I ( i ) log P I ( i ) d i
H I 1 , I 2 = − ∫ 0 1 ∫ 0 1 P I 1 , I 2 ( i 1 , i 2 ) log P I 1 , I 2 ( i 1 , i 2 ) d i 1 d i 2 H_{I_{1},I_{2}}=-\int_{0}^{1}\int_{0}^{1}P_{I_{1},I_{2}}(i_{1},i_{2})\log{P_{I_{1},I_{2}}(i_{1},i_{2})di_{1}di_{2}} H I 1 , I 2 = − ∫ 0 1 ∫ 0 1 P I 1 , I 2 ( i 1 , i 2 ) log P I 1 , I 2 ( i 1 , i 2 ) d i 1 d i 2
对于配准良好的图像,联合熵H I 1 , I 2 H_{I_{1},I_{2}} H I 1 , I 2 较低因为一个图像能够被另一幅图像预测,这与低信息相对应。这增加了他们的互信息。在立体匹配的情况下,一幅图像需根据视差图像D D D 来进行修正,为了匹配另一幅图像,使得两幅图像中对应的像素处于相同的位置,也就是 I 1 = I b I_{1}=I_{b} I 1 = I b 而且 I 2 = f D ( I m ) I_{2}=f_{D}(I_{m}) I 2 = f D ( I m ) 。
式(1)对整个图像进行计算并且需要有一个先验的视差图。同时防止MI的使用变成逐像素匹配代价。kim等人[6] 利用泰勒展开将联合熵H I 1 , I 2 H_{I_{1},I_{2}} H I 1 , I 2 的计算转化为对像素的求和运算。有关推导的细节,请参阅他们的论文。因此,联合熵的计算表示为一个依赖于像素p \mathbf{p} p 对应灰度的数据项的和的形式:
H I 1 , I 2 = ∑ p h I 1 , I 2 ( I 1 p , I 2 p ) . H_{I_{1},I_{2}}=\sum_{\mathbf{p}}h_{I_{1},I_{2}}(I_{1\mathbf{p}},I_{2\mathbf{p}}). H I 1 , I 2 = p ∑ h I 1 , I 2 ( I 1 p , I 2 p ) .
数据项h I 1 , I 2 h_{I_{1},I_{2}} h I 1 , I 2 由对应灰度的联合概率分布P I 1 , I 2 P_{I_{1},I_{2}} P I 1 , I 2 计算。对应像素的个数为n n n 。通过一个二维高斯卷积(由⊗ g ( i , k ) \otimes{g(i,k)} ⊗ g ( i , k ) )有效的执行Parzen估计[6] :
h I 1 , I 2 ( i , k ) = − 1 n log ( P I 1 , I 2 ( i , k ) ⊗ g ( i , k ) ) ⊗ g ( i , k ) . h_{I_{1},I_{2}}(i,k)=-\frac{1}{n}\log{(P_{I_{1},I_{2}}(i,k)\otimes{g(i,k)})\otimes{g(i,k)}}. h I 1 , I 2 ( i , k ) = − n 1 log ( P I 1 , I 2 ( i , k ) ⊗ g ( i , k ) ) ⊗ g ( i , k ) .
对应灰度的概率分布由操作T [ ] T[] T [ ] 来定义,这里如果参数为真就是1,不是就为0,
P I 1 , I 2 ( i , k ) = − 1 n ∑ p T [ ( i , k ) = ( I 1 p , I 2 p ) ] . P_{I_{1},I_{2}}(i,k) = -\frac{1}{n}\sum_{\mathbf{p}}T[(i,k)=(I_{1\mathbf{p}},I_{2\mathbf{p}})]. P I 1 , I 2 ( i , k ) = − n 1 p ∑ T [ ( i , k ) = ( I 1 p , I 2 p ) ] .
整个计算过程如图1所示。待配准图像I m I_{m} I m 根据初始视差图D D D 进行修正。这可以通过一个简单的查询在图像I m I_{m} I m 内的所有像素p \mathbf{p} p 通过e b m ( p , D p ) e_{bm}(\mathbf{p},D_{\mathbf{p}}) e b m ( p , D p ) 。然而,应该注意避免由于遮挡而在图像I m I_{m} I m 中的双重对应。P P P 的计算根据公式(6)是通过计算所有灰度组合的像素个数,除所有对应像素的个数。之后根据公式(5),高斯平滑是通过卷积实现。我们发现,使用小内核(即7 × 7 7\times7 7 × 7 )与大内核的结果几乎一样,但是计算的更快。对每一个结果元素做对数运算。因为0的对数没有意义,所有零元素都被一个很小的数值说替代。之后再进行一次高斯平滑有效的生成一个数据项h I 1 , I 2 h_{I_{1},I_{2}} h I 1 , I 2 的查找表。
Kim等人认为,熵H I 1 H_{I_{1}} H I 1 是恒定,熵H I 2 H_{I_{2}} H I 2 由于视差图像仅仅是重新分布了I 2 I_{2} I 2 的灰度,几乎也是恒定的。因此,h I 1 , I 2 ( I 1 p , I 2 p ) h_{I_{1},I_{2}}(I_{1\mathbf{p}},I_{2\mathbf{p}}) h I 1 , I 2 ( I 1 p , I 2 p ) 作为代价计算的两个灰度。然而,如果遮挡被考虑进来那么I 1 I_1 I 1 和I 2 I_2 I 2 中的一些灰度就没有对应项。这些灰度不能够被包含在计算中,这将导致熵H I 1 H_{I_{1}} H I 1 和H I 2 H_{I_{2}} H I 2 。除了这一理论证明之外,我们还发现在代价计算中加入这些熵能够略微改善目标边界。
H I = ∑ p h I ( I p ) , H_{I}=\sum_{\mathbf{p}}h_{I}(I_{\mathbf{p}}), H I = p ∑ h I ( I p ) ,
h I = − 1 n log ( P I ( i ) ⊗ g ( i ) ) ⊗ g ( i ) h_{I} =-\frac{1}{n}\log{(P_{I}(i)\otimes{g(i)})\otimes{g(i)}} h I = − n 1 log ( P I ( i ) ⊗ g ( i ) ) ⊗ g ( i )
概率分布P I P_{I} P I 只能在覆盖对应区域内计算,而一定不要在覆盖整个I 1 I_1 I 1 和I 2 I_2 I 2 图中计算(否则,遮挡将被忽略,且H I 1 H_{I_{1}} H I 1 和H I 2 H_{I_{2}} H I 2 将几乎恒定)。只要把联合概率分布中相应的行和列相加,也就是,P I 1 ( i ) = ∑ k P I 1 , I 2 ( i , k ) P_{I_{1}}(i)=\sum_{k}{P_{I_{1},I_{2}}(i,k)} P I 1 ( i ) = ∑ k P I 1 , I 2 ( i , k ) 。互信息的最终定位为:
M I I 1 , I 2 = ∑ p m i I 1 , I 2 ( I 1 p , I 2 p ) MI_{I_{1},I_{2}}=\sum_{\mathbf{p}}mi_{I_{1},I_{2}}(I_{1\mathbf{p}},I_{2\mathbf{p}}) M I I 1 , I 2 = p ∑ m i I 1 , I 2 ( I 1 p , I 2 p )
m i I 1 , I 2 ( i , k ) = h I 1 ( i ) + h I 2 ( k ) − h I 1 , I 2 ( i , k ) . mi_{I_{1},I_{2}}(i,k) = h_{I_{1}}(i)+ h_{I_{2}}(k)- h_{I_{1},I_{2}}(i,k). m i I 1 , I 2 ( i , k ) = h I 1 ( i ) + h I 2 ( k ) − h I 1 , I 2 ( i , k ) .
这就引出了MI匹配代价的定义:
C M I ( p , d ) = − m i I b , f D ( I m ) ( I b p , I m q ) , C_{MI}(\mathbf{p},d)=-mi_{I_{b},f_{D}(I_{m})}(I_{b\mathbf{p}},I_{m\mathbf{q}}) , C M I ( p , d ) = − m i I b , f D ( I m ) ( I b p , I m q ) ,
q = e b m ( p , d ) . \mathbf{q}=e_{bm}(\mathbf{p},d). q = e b m ( p , d ) .
剩下的问题是视差图需要为了修正I m I_{m} I m 在m i ( ) mi() m i ( ) 能够被计算前得到。Kim等人提出了一种迭代求解方法,中随机视差图开始计算代价C M I C_{MI} C M I 。这个代价之后用于图像的匹配和新视差图的计算,作为下一个迭代的基础。迭代的次数相当少(如例3),因为,由于像素个数很多,尽管错误的视差图(如,随机生成)也可以很好的估计概率分布P P P 。这种解决方案非常适合与图割等迭代立体算法,但是这将不必要的增加非迭代算法的运行时间。
因为初始视差的一个粗略估计已经足够估计P P P ,因此可以在第一次迭代中使用快速相关基础算法。在这种情况下,只有最后一次迭代才会使用更精确、更耗时的方法。但是这将涉及实现两个不同的立体视觉方法。使用单一方法看起来更优雅。
因此,提出了一种分层计算方法,递归地使用以半分辨率计算的视差图像作为初始视差。如果算法的整体复杂度是O ( W H D ) O(WHD) O ( W H D ) (宽× \times × 高× \times × 视差范围),然后运行一半分辨率减少比率是2 3 = 8 2^3=8 2 3 = 8 。从分辨率为1\16的随机视差图像开始,最初计算三次迭代将会将总体运行时间增加比率为,
1 + 1 2 3 + 1 4 3 + 1 8 3 + 3 1 1 6 3 ≈ 1.14. 1+\frac{1}{2^3}+\frac{1}{4^3}+\frac{1}{8^3}+3\frac{1}{16^3}\approx1.14. 1 + 2 3 1 + 4 3 1 + 8 3 1 + 3 1 6 3 1 ≈ 1 . 1 4 .
因此,分层计算的C M I C_{MI} C M I 的理论运行时间只会比C B T C_{BT} C B T 慢百分之14,忽略了MI计算和图像缩放的开销。值得注意的是,低分辨率下的视差图像仅用于估计高分辨率下的概率分布P P P 和计算高分辨率下的代价C M I C_{MI} C M I 。其他的一切都是从头计算的,以避免错误从低分辨率传递到高分辨率。
分层MI(HMI)计算的实现需要收集所有由初始视差定义的所谓对应(也就是说,从之前的层次级别或一开始随机的进行放大)。根据对应关系,概率分布P P P 通过公式(6)进行计算。P P P 的大小是灰度个数的平方,这大小是恒定的(例如,256 × 256 256\times256 2 5 6 × 2 5 6 )。后续的操作包括P P P 的高斯卷积和对数的计算。由于P P P 的大小不变,其复杂度取决于所谓对应的集合。因此,O ( W H ) O(WH) O ( W H ) 其中W W W 是图像的宽度,H H H 是图像的高度。
2.2 代价聚合
逐像素代价计算通常是模糊的,并且由于噪声等因素的存在,错误匹配能够很容易得到比正确匹配更小的代价。为此,增加一个额外的约束,通过惩罚临近视差的变化来保证平滑。逐像素代价和平滑约束通过定义基于视差D D D 的能量 E ( D ) E(D) E ( D ) :
KaTeX parse error: Expected group after '_' at position 10: E(D)=\sum_̲