立体视觉:深度估计

Posted

技术标签:

【中文标题】立体视觉:深度估计【英文标题】:Stereo vision: Depth estimation 【发布时间】:2013-11-26 05:44:09 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

就像你说的,你必须把单位转换成毫米。为此,您需要这些公式

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

【讨论】:

你可以有这个公式的详细信息here 小心你的包围;你是说z = b*F/d*s 还是z = b*F / (d*s) 感谢@Alexandre,这部分已解决,但不幸的是结果并不好。因为我确定基线、焦距和像素大小,所以视差估计可能不是那么准确。请问你知道如何在这个计算中实现相机矩阵吗? @PrincAm 我想你正在寻找的是:Homography,这篇文章解释了一点,但尝试搜索单应性以获得更多信息。也许你的视差图不好。好看吗? @Alexandre 非常感谢您的帮助。最后,我使用了更准确的不同场景。我用 Caltech 的 Camera Calibration Toolbox for Matlab 校准了成对的相机。这个工具箱里面有图像校正和立体三角测量的功能。计算基于从 Toolbox 导出的内在参数和外在参数,因此结果具有更高的准确性。

以上是关于立体视觉:深度估计的主要内容,如果未能解决你的问题,请参考以下文章

ECCV2020优秀论文汇总|涉及点云处理3D检测识别三维重建立体视觉姿态估计深度估计SFM等方向

IDA-3D 解读基于实例深度感知的自动驾驶立体视觉三维目标检测

IDA-3D 解读基于实例深度感知的自动驾驶立体视觉三维目标检测

OpenCV - 立体视觉的倾斜相机和三角测量地标

双目立体视觉

使用 OpenCV 进行立体视觉