给定校正图像的视差图,如何计算真实深度?

How to compute the true depth given a disparity map of rectified images?

我已经为给定的校正立体对计算了视差图!我可以使用公式

计算我的深度
z = (baseline * focal) / (disparity * p)

让我们假设基线、焦距和像素常数 p 是已知的,并且我对两张图像使用了相同的相机。 现在我的视差可能在 -32..128[pixel] 范围内。当我使用上面的公式时,对于我的 0 差异值,我将 infinity/divided 减为零。当我将视差值移动到 1..161 时,我选择了任意视差值的范围,这是一个问题,因为函数 1/disparity 将在 1..161 或 100..260 处给出完全不同的值间距那甚至不是线性的。所以我什至不会得到(线性)比例的重建,因为比例变化是非线性的。

我如何确定我的差异必须位于哪个区域才能使用上述公式进行度量重建? 还是根本不可能用上面的公式和校正后的图像来度量地重建某些东西?如果是这样,为什么?

(我知道我可以重新投影到我的未校正图像并进行三角测量,但我特别想知道为什么或如果上面的公式不可能。感谢任何可以帮助我的人!)

问题是一般的校正会缩放和旋转你的图像,所以你不能只从校正后的左相机转发投影深度并获得度量重建。相反,您需要撤消对对应关系的纠正。您可以通过计算将视差映射到 3D 的投影矩阵 Q 来实现。请参阅 OpenCV 文档中有关 stereoRectify 和 reprojectImageTo3D 的文档。

对于几点,或者了解是怎么回事,可以一步步进行。配方形式:

  • 对于校正后的左图像中的每个像素 (x, y),查找校正后的右图像中对应像素的视差:(x', y') = (x + d, y)
  • 对(x,y)和(x',y')应用校正单应H和H'的逆,得到原始图像坐标中的(u,v)和(u',v') .
  • 反向投影这些像素并与光线相交。

我做了更多研究,认为我现在可以回答我的问题了。我认为在评论中我们谈得有些过头了。也许现在我的意思更清楚了。

并行设置: 公式 z = (baseline * focal) / (disparity * p) 只能在图像由平行相机设置捕获时使用。如果相机真正平行,则不可能有负差异和正差异。所以你不会得到 0 的视差值。在那种情况下,0 只对应于无穷远的一个点。如果存在真正的并行设置,则此公式可用于度量重建。

融合设置: 实际上,您的图像主要是由聚合相机设置捕获的。这意味着在立体对图像中存在一个会聚点,其视差值为 0。该点前后的视差符号将不同。这意味着您的差异在收敛点包含负值、正值和等于零的值。尽管您的图像已校正,但您不能使用上述公式,因为图像是由会聚立体相机设置捕获的。不可能将您的差异转移到 "only positive signed values" 以正确使用该公式。然而,使用移位值的结果将 "some kind of similar" 到正确的 3-D 重建,但奇怪的是被未知的转换缩放和扭曲。

你可以看看这张图来找出他们的关系:

参考http://web.stanford.edu/class/cs231a/lectures/lecture6_stereo_systems.pdf