matlab - 立体视觉 : Depth estimation

标签 matlab stereoscopy matlab-cvst disparity-mapping

我正在处理立体视觉任务,我想获得立体视觉相机与物体之间的距离。我将 Matlab 与 Computer Vision System Toolbox 结合使用。
我已经使用“用于 Matlab 的相机校准工具箱”校准了相机,因此我有左右相机的内部参数和外部参数(右相机 wrt 左相机的位置)。我还有一对校正后的图片和他们的视差图。为了估计差异,我使用了 Matlab 函数 disparity()。我知道相机的基线和焦距,但我的结果仍然是错误的。

baseline = 70 mm
focal length = 25 mm
disparity = 60 pixels
---------------------
depth = baseline * focal length / disparity = 70 * 25 / 60 = 29 mm

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

最佳答案

如您所说,您必须将单位转换为毫米。为此你需要这个公式

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

mm = (mm * mm) / (pixel * (mm/pixel)) 

在哪里

  • z = 以毫米为单位的深度
  • b = 以毫米为单位的基线
  • F = 以毫米为单位的焦距
  • d = 像素深度
  • s = 以毫米/像素为单位的传感器尺寸。 (一般都是以um的形式提供的,所以先转换一下)。

编辑

有时您的焦点是以像素为单位,因此您不需要使用传感器尺寸。所以只需使用您的公式:

z = b*F / d
mm = mm * pixel / pixel

关于matlab - 立体视觉 : Depth estimation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19956910/

相关文章:

matlab - 在 MATLAB 中开始使用 JeroMQ

matlab - GMModel - 如何使用它来预测标签的数据?

opencv - 视野如何改变立体视觉中的深度估计?

c++ - 立体视觉(3D 立体)会卷土重来吗?

java - 制作 Java 程序 Stereo-3D

matlab - 计算视频帧中物体的速度 - 光流 (Matlab)

c++ - 在 OpenCV/C++ 中使用 KalmanFilter 跟踪多个移动物体 - 如何将轨迹单独分配给检测到的物体

matlab - 如何在 matlab 中为正态分布绘制 PDF 和 CDF

c# - 在 Matlab 中创建共享库(.NET Assembly)并在 C# 中使用它

matlab - 使用 Matlab 绘制点云