立体视觉:深度估算

Pri*_*cAm 7 matlab disparity-mapping stereoscopy matlab-cvst

我正在从事立体视觉任务,我想了解立体视觉相机和物体之间的距离。我正在将Matlab与计算机视觉系统工具箱一起使用。
我已经使用“适用于Matlab的相机校准工具箱”对相机进行了校准,因此我具有左右相机的固有参数和外部参数(右相机相对于左相机的位置)。我也有一副校正过的图片和他们的视差图。为了估计视差,我使用了Matlab函数disparity()。我知道相机的基线和焦距,但是我的结果仍然是错误的。

baseline = 70 mm
focal length = 25 mm
disparity = 60 pixels
---------------------
depth = baseline * focal length / disparity = 70 * 25 / 60 = 29 mm
Run Code Online (Sandbox Code Playgroud)

但我知道距离是cca 600毫米。这个公式对吗?单位呢?mm * mm / pixel != mm。特别是我想使用Camera矩阵(内在参数)进行计算,但是我不知道该怎么做。如有任何提示,我将不胜感激。

Vuw*_*wox 6

如您所说,您必须将单位转换为毫米。为此,您需要使用以下公式

z = (b*F) / (d*s)

mm = (mm * mm) / (pixel * (mm/pixel)) 
Run Code Online (Sandbox Code Playgroud)

哪里

  • z =以毫米为单位的深度
  • b =基线(毫米)
  • F =焦距,单位:mm
  • d =像素深度
  • s =传感器尺寸,单位为毫米/像素。(通常以um形式提供,因此在转换之前也是如此)。

编辑

有时您的焦点位于像素中,因此您无需使用传感器尺寸。因此,只需使用您的公式:

z = b*F / d
mm = mm * pixel / pixel
Run Code Online (Sandbox Code Playgroud)