了解Opencv中的视差图

时间:2014-05-29 06:34:53

标签: opencv disparity-mapping

有人可以解释一下视差地图的确切回归。因为文档中没有太多内容,我有一些与之相关的问题。

  1. 是否返回两个图像的像素差值?
  2. 如何在公式中使用视差值进行深度估算,即

    Depth = focalLength*Baseline/Disparity

  3. 我在某处读过视差图给出深度函数f(z)

  4. 请解释一下它的含义。如果深度纯粹是绝对值,它如何作为函数生成,还是相对于像素的函数?

1 个答案:

答案 0 :(得分:4)

两个相应图像点的差异 d = pl - pr 称为差异。

此处, pl 是左立体图像中点的位置, pr 是右立体图像中点的位置。

对于平行光轴,视差 d = xl - xr

⇒搜索深度信息等同于搜索视差,即相应的像素 距离与视差成反比

在所谓的视差图中可视化视差值,参考图像中的每个像素的每个视差值(这里:左)被编码为灰度值。对于没有任何对应关系的像素,还定义了灰度值(此处为:黑色)。所谓的groundtruth-map是一个视差图,包含对应问题的理想解决方案。

image

视差与深度信息之间的关系:

下图代表两个相机(左和右),然后尝试查找点p(x_w,z_x)的深度。

image2

深度的结果是我的:

image3

因此,可以看出深度与视差成反比。

<强>更新

要计算视差,您需要两个图像(1)左图像和(2)右图像。假设左图像中的position (60,30)处有一个像素,而右图像中的position (40,30)处存在相同的像素,则您的差异将为:60 - 40 = 20。因此,视差图给出了左图像和右图像之间像素位置的差异。如果像素存在于左图像中但在右图像中不存在则那么在视差图中的该位置处的值将为零。获得左图像的每个像素的视差值后,我们可以使用答案末尾给出的公式轻松计算深度。