我计算了一个给定的矫正立体像对的差异图!我可以使用公式计算我的深度
z = (baseline * focal) / (disparity * p)
假设基线,焦距和像素常数p是已知的,并且我对两个图像使用相同的相机。 现在我的差异可能在-32..128 [像素]的范围内。当我使用上面的公式时,我将得到无穷大/除以零我的0差异值。当我移动我的视差值让我们说1..161时,我选择了我的视差值的范围任意而且这是一个问题,因为函数1 /视差将在1..161或100处给出完全不同的值间距.260甚至不是线性的。所以我甚至不能进行重建到(线性)比例,因为比例变化是非线性的。
我如何确定我的差异在哪个区域可以用上述公式进行度量重建? 或者根本不可能用上面的公式和纠正的图像来重建某些东西?如果是这样,为什么?
(我知道我可以重新投影到我未经修正的图像并进行三角测量,但我想知道为什么或者如果上述公式不可能。感谢任何可以帮助我的人!)
答案 0 :(得分:1)
问题在于整修通常会缩放和旋转您的图像,因此您无法从整流的左侧摄像机向前移动项目深度并进行测量重建。相反,您需要撤消对应的整改。您可以通过计算将视差映射到3D的投影矩阵Q来做到这一点。请参阅OpenCV文档中的stereoRectify和reprojectImageTo3D文档。
对于几点,或了解正在发生的事情,您可以一步一步地进行。在食谱形式:
答案 1 :(得分:1)
我做了更多研究,并认为我现在可以回答我的问题。我认为在评论中我们互相讨论了一下。也许它现在变得更加清楚我的意思。
并行设置:
只有在通过并行摄像机设置捕获图像时,才能使用公式z = (baseline * focal) / (disparity * p)
。如果摄像机是真正平行的,则不可能具有负的和正的差异。因此,您不会得到0的差异值。在该场景中,0仅对应于无穷远处的点。如果存在真正的并行设置,则此公式可用于度量重建。
融合设置: 实际上,您的图像大多是通过融合相机设置捕获的。这意味着在立体对图像中存在会聚点,其具有0的视差值。在该点之前和该点之后的差异的符号将是不同的。这意味着您的差异包含在收敛点为负,正且等于零的值。尽管您的图像已经过校正,但您无法使用上述公式,因为图像是通过融合立体相机设置拍摄的。无法将您的差异转移到“仅正值符号值”以正确使用公式。然而,使用移位值的结果将与正确的三维重建“某种类似”,但奇怪地通过未知变换进行缩放和扭曲。
答案 2 :(得分:0)