【问题标题】: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。特别是我想使用相机矩阵(内在参数)进行计算,但我不知道如何。如有任何提示,我将不胜感激。

【问题讨论】:

    标签: matlab stereoscopy matlab-cvst disparity-mapping


    【解决方案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 导出的内在参数和外在参数,因此结果具有更高的准确性。
    猜你喜欢
    • 2014-05-10
    • 2013-10-25
    • 2021-07-21
    • 2015-03-11
    • 2014-07-01
    • 1970-01-01
    • 2014-02-21
    • 2020-03-12
    • 2013-05-23
    相关资源
    最近更新 更多