【问题标题】:opencv depth map accuracyopencv深度图精度
【发布时间】:2011-08-17 08:37:32
【问题描述】:

我想使用带有 opencv 的 3d 立体照相手机测量到物体的距离。我正在寻找一个公式来测量距离测量的准确性,具体取决于焦距、两个相机之间的距离、图像分辨率和被测物体的大小。 谷歌搜索了一下,我找到了这个公式:

d = Z^2 * p / (f*b)

Z - 到物体的距离,p - 视差精度,f - 焦距,b - 基线(相机之间的距离)。

我知道基线和焦距,但我不知道视差精度。 这个公式是我需要的吗?如果是这样,我如何找到视差精度?

谢谢。

【问题讨论】:

    标签: opencv 3d computer-vision


    【解决方案1】:

    我知道这已经晚了一年,但以防万一有人发现。

    公式是这样的:

    dD = dd * D^2 / fB

    地点:

    • dd = 差异错误
    • dD = 深度错误
    • D = 深度
    • f = 焦距
    • B = 基线

    如果f = 6mm = 0.006mB = 24mm = 0.024mD = 10mdd 是 1 像素 [我们暂时称其为 P,但通常约为 1.4 微米]。

    将所有数字插入给出:

    dD = P * 10^2 / (0.006 * 0.024) ~ 694444 P

    对于P=1.4um, dD = 0.97 m(约为 9.7%)。

    现在假设您的通信给出了单像素错误。您可以进行亚像素搜索,根据图像中的噪声水平和纹理,您可以获得亚像素准确的对应关系。在这种情况下,您的准确性会好一些。

    请注意,此公式适用于错误。视差和深度的映射如下:

    d = fB / D

    地点:

    • d = 差异
    • D = 深度
    • f = 焦距
    • B = 基线

    同样,将数字代入:

    d = (0.006 * 0.024 / 10) m = 0.0000144 m = 0.0144 mm = 14.4 um.

    如果您假设您的像素大小约为1.4um,那么14.4um 约为10 像素。这与上面的错误一致——意味着 1 个像素的错误大约代表 10%。

    10 米外的汽车在左右传感器之间移动 10 个像素。

    希望对你有帮助。

    【讨论】:

    • 嗨@thang,我的问题是关于视差错误。它是用作典型值还是根据传感器参数的给定知识计算得出?
    【解决方案2】:

    如果您查看document you link 中公式 8 之后的段落,您可以看到它们的差异精度为 0.18*10^-6m。进一步阅读,我得出结论,他们使用的视差精度是所用相机的 CCD 上两个像素之间的距离(以 m 为单位)。对于分辨率为 640X480(非常旧的 VGA 相机)的 1/4" CCD(尺寸为 3.2mm x 2.4mm),这将是 5*10^-6。我不知道 LG Optimus 3D 的传感器尺寸是多少是,但假设 1/4" CCD 和 2592 像素水平分辨率,视差精度的基线将为:1.23*10^-6,在 10m 处的深度精度约为 0.85m。这在我看来是合理的。如果 CCD 更小,它会提高(即精度值降低)。

    这是假设两个立体图像之间的特征完美匹配的最低可能值。该值仅代表立体声对的物理限制。

    【讨论】:

    • 谢谢。我试图粗略估计这个值,看看我的项目是否可行。我目前瞄准的手机是 LG optimus 3d。它的焦距为 6 毫米,基线为 24 毫米。我想计算 10 米处的距离测量误差。即使我假设视差误差只有 1 个像素,这也没有意义(或者是吗?) d = 10000^2 * 1 / (24 * 6) =~ 694 米...我做错了什么?
    • 好的,我的第一个错误是它不是以米为单位的。但我还是不明白这是什么意思。
    • ...我的第二个错误是这个值明显低于 1(这是一个比率而不是像素值)。一辆车在 10 米处的视差值是多少?
    • 你在哪里找到的公式?
    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 2012-08-19
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2013-10-13
    • 2015-10-26
    相关资源
    最近更新 更多