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

Mia*_*iau 0 computer-vision triangulation disparity-mapping depth 3d-reconstruction

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

z = (baseline * focal) / (disparity * p)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Fra*_*ari 6

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

对于几点,或者要了解发生了什么,您可以逐步进行。以配方形式:

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


Mia*_*iau 5

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

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

融合设置: 实际上,您的图像大部分是由融合相机设置捕获的。这意味着在立体对图像中存在一个收敛点,其视差值为0。该点前面和该点后面的视差符号将不同。这意味着您的视差包含负值、正值以及收敛点处的零值。尽管您的图像已校正,但您不能使用上述公式,因为图像是由聚合立体相机设置捕获的。不可能将您的差异转移到“仅正符号值”以正确使用公式。然而,使用移位值的结果将与正确的 3D 重建“某种相似”,但会因未知的变换而奇怪地缩放和扭曲。