【计算机视觉】Lecture 9:立体视觉算法

回忆:简单的立体视觉系统
【计算机视觉】Lecture 9:立体视觉算法
点(X, Y, Z)在左边相机的图像坐标 (Image coords)

【计算机视觉】Lecture 9:立体视觉算法

点(X, Y, Z)在右边相机的图像坐标 (Image coords)

【计算机视觉】Lecture 9:立体视觉算法

立体视差

左边相机

【计算机视觉】Lecture 9:立体视觉算法

右边相机

【计算机视觉】Lecture 9:立体视觉算法

立体视差

【计算机视觉】Lecture 9:立体视觉算法

【计算机视觉】Lecture 9:立体视觉算法
Z:深度depth,Tx基线baseline,d视差disparity

深度计算
Z=fTxdZ = \frac{fT_x}{d}

注:深度和立体视差成反比

【计算机视觉】Lecture 9:立体视觉算法

立体视觉例子

【计算机视觉】Lecture 9:立体视觉算法
http://www.middlebury.edu/stereo/

【计算机视觉】Lecture 9:立体视觉算法
请注意,离得越近的曲面,视差越大(越亮)。

计算视差

对应问题:

  1. 确定右图像中的哪个像素对应于左图像中的哪个像素
  2. 视差=左图像对应像素坐标-右图像对应像素坐标

回忆Lecture 7,我们对图像块对应点计算的讨论
SSD——平方差和度量方法
NCC——归一化互相关度量方法

极线约束Epipolar Constraint

重要概念:

对于立体匹配,我们不必搜索整个二维右图像去寻找对应点。
极线约束将搜索空间缩小为一维直线

回忆:简单的视觉系统

【计算机视觉】Lecture 9:立体视觉算法

利用极线做匹配

【计算机视觉】Lecture 9:立体视觉算法
对左图像中的一个图像块
在右图像中沿着相同的行比较图像块
选择匹配得分最高的图像块
对左图像中所有的元素重复这个过程

例子:5*5窗口 NCC匹配评分

【计算机视觉】Lecture 9:立体视觉算法黑色像素点:不好的视差值或者在右图像中没有匹配块

遮挡Occlusions:无匹配

【计算机视觉】Lecture 9:立体视觉算法
图像块大小的影响
【计算机视觉】Lecture 9:立体视觉算法5×5:在一些区域比较平滑
11*11:细节缺失

增加扫描线内的一致性

到目前为止,每个左图像块都是沿着右极线独立匹配的。
这会导致误差
我们希望在同一行(扫描线)中的匹配之间强制添加一些一致性。

视差空间图

首先我们引进DSI的概念
一行的DSI表示左图像和右图像中沿该行的图像块之间的成对匹配分数。

【计算机视觉】Lecture 9:立体视觉算法
C(i, j) = 左像素i为中心的图像块和右像素j为中心的图像块的匹配得分。

视差空间图(DSI)

【计算机视觉】Lecture 9:立体视觉算法【计算机视觉】Lecture 9:立体视觉算法【计算机视觉】Lecture 9:立体视觉算法【计算机视觉】Lecture 9:立体视觉算法【计算机视觉】Lecture 9:立体视觉算法【计算机视觉】Lecture 9:立体视觉算法因为约束视差值<最高值 (64)——无效,约束视差值>=最小值 (0)——无效

【计算机视觉】Lecture 9:立体视觉算法

如果我们将有效值的对角线重新排列成一个矩形数组(在这种情况下是64 x N),这就是传统上所说的DSI
然而我想要保持整个图像,包括那些无效点(我认为这样比较容易理解像素坐标)

【计算机视觉】Lecture 9:立体视觉算法

DSI和扫描线一致性

【计算机视觉】Lecture 9:立体视觉算法

为左扫描线中的所有像素分配视差相当于在DSI中找到一条连接的路径

最低代价路径

我们想要选择最好的路径
想要一个“代价”最低的(沿着路径差异得分之和最低的)

【计算机视觉】Lecture 9:立体视觉算法

路径上的约束

在路径上施加一个顺序约束是很常见的。直觉上,这条路是不允许自己原路返回的。

顺序约束

【计算机视觉】Lecture 9:立体视觉算法

处理遮挡

【计算机视觉】Lecture 9:立体视觉算法【计算机视觉】Lecture 9:立体视觉算法

最优扫描线策略

我们希望找到最佳路径,同时考虑顺序约束和遮挡的可能性。

算法来自Cox, Hingorani, Rao, Maggs, “A Maximum Likelihood Stereo Algorithm,” Computer Vision and Image Understanding, Vol 63(3), May 1996, pp.542-567.

Cox等人的立体匹配

【计算机视觉】Lecture 9:立体视觉算法
三种情况:

  1. 匹配块。代价=差异得分
  2. 从右边遮挡。代价是常数
  3. 从左边遮挡。代价是常数

C(i,j)= min([ C(i-1,j-1) + dissimilarity(i,j), C(i-1,j) + occlusionConstant, C(i,j-1) + occlusionConstant]);

【计算机视觉】Lecture 9:立体视觉算法

总结:希望在DSI图像的左上角到右下角中找到最低代价的路径。

在路径上的每一点,我们都有三个选择:向左走,向下走,对角走
每种选择都有一个明确的相关代价。

这个问题是一个动态规划Dynamic Programming (DP)的问题(Cox等人就是这样解决问题的)

实际扫描线例子

【计算机视觉】Lecture 9:立体视觉算法

左列中的每个像素现在都用视差值或遮挡标签进行标记。

继续左图像中的每个扫描线。

例子

【计算机视觉】Lecture 9:立体视觉算法
DP算法的结果。黑色像素=被遮挡的。

遮挡填充

填补遮挡造成的空隙的简单技巧。

【计算机视觉】Lecture 9:立体视觉算法

用扫描线中位于左遮挡像素之前的最邻近有效像素的值填充左遮挡像素。

【计算机视觉】Lecture 9:立体视觉算法

类似地,对于右遮挡,请在右侧查找有效像素。

例子

【计算机视觉】Lecture 9:立体视觉算法
使用遮挡填充DP的结果

【计算机视觉】Lecture 9:立体视觉算法【计算机视觉】Lecture 9:立体视觉算法

最新成果

【计算机视觉】Lecture 9:立体视觉算法J. Sun, Y. Li, S.B. Kang, and H.-Y. Shum. “Symmetric stereo matching for occlusion handling”. IEEE Conference on Computer Vision and Pattern Recognition, June 2005.