如果给出整流图像的视差图,如何计算真实深度?

时间:2018-05-11 17:33:43

标签: computer-vision triangulation depth 3d-reconstruction disparity-mapping

我计算了一个给定的矫正立体像对的差异图!我可以使用公式计算我的深度

z = (baseline * focal) / (disparity * p)

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

我如何确定我的差异在哪个区域可以用上述公式进行度量重建? 或者根本不可能用上面的公式和纠正的图像来重建某些东西?如果是这样,为什么?

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

3 个答案:

答案 0 :(得分:1)

问题在于整修通常会缩放和旋转您的图像,因此您无法从整流的左侧摄像机向前移动项目深度并进行测量重建。相反,您需要撤消对应的整改。您可以通过计算将视差映射到3D的投影矩阵Q来做到这一点。请参阅OpenCV文档中的stereoRectify和reprojectImageTo3D文档。

对于几点,或了解正在发生的事情,您可以一步一步地进行。在食谱形式:

  • 对于经过校正的左图像中的每个像素(x,y),查找右对齐像素的视差:(x',y')=(x + d,y)
  • 应用(x,y)和(x',y')整流单应函数H和H'的反转,得到(u,v)和(u',v&# 39;)在原始图像坐标中。
  • 反投影这些像素并与光线相交。

答案 1 :(得分:1)

我做了更多研究,并认为我现在可以回答我的问题。我认为在评论中我们互相讨论了一下。也许它现在变得更加清楚我的意思。

并行设置: 只有在通过并行摄像机设置捕获图像时,才能使用公式z = (baseline * focal) / (disparity * p)。如果摄像机是真正平行的,则不可能具有负的和正的差异。因此,您不会得到0的差异值。在该场景中,0仅对应于无穷远处的点。如果存在真正的并行设置,则此公式可用于度量重建。

融合设置: 实际上,您的图像大多是通过融合相机设置捕获的。这意味着在立体对图像中存在会聚点,其具有0的视差值。在该点之前和该点之后的差异的符号将是不同的。这意味着您的差异包含在收敛点为负,正且等于零的值。尽管您的图像已经过校正,但您无法使用上述公式,因为图像是通过融合立体相机设置拍摄的。无法将您的差异转移到“仅正值符号值”以正确使用公式。然而,使用移位值的结果将与正确的三维重建“某种类似”,但奇怪地通过未知变换进行缩放和扭曲。

答案 2 :(得分:0)

您可以查看以下图表来找到他们的关系: enter image description here

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