17.立体匹配——介绍,匹配,寻找最佳匹配 Matlab实战_1

目录

介绍

匹配

寻找最佳匹配 实战


介绍

欢迎回到计算机视觉。今天我们要讲的是立体视觉匹配(stereo correspondence)。到目前为止,我们已经定义了对极几何(epipolar geometry)它讨论了两个视图之间的关系,以及如果你在左边的图像中有一个点,那么如果你知道相机之间的关系,这就是一维搜索。一般情况下,极线可以是任意的,不是任意的,但是可以以不同的方式倾斜并定位。但是今天,为了让生活更简单,我们要假设一些,简化的假设。例如,我们假设,我们上次画出的几何,是平行的,或者说是共面(coplanar),像平面。

假设两个相机的焦距相同。我们假设它们,摄像机水平对齐在相同的高度。所以我们,这些图像被拉出来,使得极线是水平的,而且,它们实际上是对齐的,所以一幅图像中的xy位置在另一幅图像中的x位置不同,但y位置相同。看,这是很多假设,对于真正的立体,你不能那样做,你必须先对图像进行校正。我们会在以后的几节内容里讨论这个问题。但现在,我们要做的假设会让我们更容易地解决对应问题,事实上,这是你们做对应问题的方法。

匹配

匹配问题是什么? 基本上,对极约束约束了我们的解,但是它没有解决我们的解决方案,所以这里我们在左边的图像中有一些点(如图1)我们知道它们在右边的图像中沿着极线(如图2),但问题是它们的匹配是什么? 在假设(hypothesis)1 2 3中(如图3),用灰色编码,你可以看到这些是不同的可能匹配。所以对于左边图像中的每一点,我们必须决定在右边图像中的匹配是什么,反之亦然。

1 2

3 4

为了解决匹配问题,我们需要一些额外的约束条件。对极约束是一个硬约束,也就是说,它必须是真的,它是由射流,相对的相机几何来强制的。但是还有其他类型的约束,我们可以称之为软约束(soft constraints)。

相似度(Similarity),也就是说左边图像中的像素看起来应该是这样的如果你有正确的匹配,它就会修复右边的图像。

唯一性(Uniqueness)指的是,在右边图像的左像素上最多只能匹配一个匹配项。

排序(Ordering)是说如果像素在左边的图像上是abc,那么它们在右边就是abc。

视差梯度是有限的(disparity gradient is limited)意味着深度变化不会太快。

我们今天会讲到其中一些,但是我们从相似性(Similarity)开始。相似性本质上是说,左边的图像补片应该与右边的图像补片匹配。为了在图像对中找到匹配点我们假设,首先在一个视图中可见的大多数点在另一个视图中也是可见的。所以我们去找他们。并且匹配的图像区域在外观上是相似的。这里就是我们要做的密集相关(如图1)。密集相关意味着我们到处都能找到匹配。对于每一个像素,比如说在左边的图像中,我们要在这个像素周围取一个小窗口(如图2)。

1 2

我们要将它与右图像中的每个像素,斜线窗口进行比较(如图1)。我们要选择的位置要么是最相似的(如图2),要么是最不相似的,最好的匹配,这就是我们要假设的对应点。

 1 2

这里有一个非常简单的例子(如图1)。我在两幅图像上都有一条扫描线,我们现在假设是平行的扫描线。左边的图像是窗口,我要把它和右边图像中的一些窗口进行比较。匹配成本在任何地方都要计算(如图2),所以这只是一个非,一个关于匹配成本作为视差函数的概念描述。所有我离第一次匹配有多远(如图3)。当然,我们要选择得分最高的值。我可以用一个叫差的平方和的东西,也就是差的平方和(如图4)。这不是一个惊喜吗? 不。你要做的就是取这两个像素窗口,重叠,相减,平方差,然后求和。

1 2

3

4

这就是衡量的标准,这就是为什么上面说的是不同之处。现在,有时,我们假设一幅图像比另一幅图像亮一点,你知道,由于某种原因,增益在相机上设置得不太好。如果我直接做减法,即使匹配的位置是正确的。由于强度的缩放,我将得到平方差误差,它可能不会让我得到最好的匹配。现在我们已经讨论了如何消除缩放问题。还记得吗,我们讲过进行归一化相关我们缩放窗口的值使其具有相同的标准差? 你也可以这样做。你可以用你的窗口滑动它(如图),做标准化的相关性而不是平方差的和。这实际上是一个相似性约束。

寻找最佳匹配 实战

好吧。我们试着用代码来做。我想让你写一个函数,find_best_match,它有两个参数,一个图像贴片和一个条带,基本上和贴片一样高,但是宽度等于图像的宽度。你的函数应该返回贴片所在的x坐标。下面是一些测试代码。

让我们从一对立体对中加载两个图像,左边和右边。这是左图(如图1),这是右图(如图2)。

1 2

如果我在两者之间切换,您可以看到一些关键元素在移动。all right,让我们把这些转换成灰度,双精度类型(如图),并把它们缩小到0,1范围。

这里是灰度版本,左边(如图1)和右边(如图2)。

1 2

okay,让我们定义我们想要匹配的片段的位置和大小(如图)。

让我们从左边的图像中提取这个(如图1)。

这是贴片的样子(如图)。

使用贴片规范,让我们从正确的图像中提取一个条带。

注意,在这里,由于我们想跨越图像的宽度,我们选择了所有的列。

这是从右边的图片中截取的(如图)。

一旦您实现了您的函数,通过传入 patch_left 和 strip_right 来调用它。您应该能够使用找到的bext_x坐标从正确的图像中提取贴片。去试试吧。

让我们用平方差的和来找到最佳匹配。让我们初始化两个需要的变量,然后运行这个程序,将贴片放在每个有效的位置。我们从每个位置的贴片中提取相同大小的第二贴片(如图)。

然后计算平方差的和,

并跟踪给出最小差值的x坐标。

就这些了。让我们看看它是如何工作的(如图1)。找到的最佳x坐标是145。上面的贴片来自左边的图像(如图2)。这是你之前看到的正确图片中的条带(如图3)。下面的贴片已经从右边的图像中提取出来了(如图4)。

1 2

4

注意,房子顶部的外观发生了一些变化,但是我们的算法仍然能够正确地找到它。现在,不用平方差的和,你也可以用互相关(cross-correlation)。请随意尝试其他方法。


算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值