理解 Opencv 中的视差图

kus*_*hal 0 opencv disparity-mapping

有人可以向我解释一下视差图返回的究竟是什么。因为文档中没有给出太多内容,我有一些与之相关的问题。

  1. 它是否返回关于两个图像的像素差异值?
  2. 如何在深度估计公式中使用视差值,即

    Depth = focalLength*Baseline/Disparity

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

请解释这是什么意思。如果深度纯粹是一个绝对值,它如何生成为一个函数,或者它是一个关于像素的函数?

skm*_*skm 5

差异d = pl ? 两个对应图像点的pr称为视差。

这里,pl是点在左侧立体图像中的位置,pr是点在右侧立体图像中的位置。

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

? 搜索深度信息相当于搜索视差,即对应像素的距离与视差成反比

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

图片

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

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

图像2

深度的结果是我的:

图像3

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

更新:

要计算视差,您需要两张图像(1)左图像和(2)右图像。比方说,有一个像素在position (60,30)左侧图像和相同像素出现在position (40,30)右影像,然后你的差距将是:60 - 40 = 20。因此,视差图为您提供了左图像和右图像之间像素位置之间的差异。如果左侧图像中存在像素但右侧图像中不存在像素,则视差图中该位置处的值将为零。一旦获得左图像每个像素的视差值,我们就可以使用我的答案末尾给出的公式轻松计算深度。