首页 文章

opencv深度图精度

提问于
浏览
10

我想使用带有opencv的3d立体摄像手机测量到物体的距离 . 我正在寻找一种能够测量距离测量精度的公式,具体取决于焦距,两台摄像机之间的距离,图像分辨率和被测物体的大小 . 谷歌搜索了一下,我找到了这个公式:

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

Z - 距离物体,p - 视差精度,f - 焦距,b - 基线(摄像机之间的距离) .

我知道基线和焦距,但我不知道差异的准确性 . 这个配方是我需要的吗?如果是这样,我如何找到差异准确度?

谢谢 .

2 回答

  • 11

    如果您查看document you link中公式8之后的段落,您会发现它们的差异精度为0.18 * 10 ^ -6m . 进一步阅读,我得出结论,他们使用的视差精度是所用摄像机的CCD上两个像素之间的距离 . 对于1/4 " CCD (which measures 3.2mm by 2.4mm) with resolution 640X480 (a very old VGA camera) this would be 5*10^-6. I don't know what the sensor size for the LG Optimus 3D is, but assuming 1/4" CCD和2592像素水平分辨率,视差精度的基线将是:1.23 * 10 ^ -6,在10米处的深度精度为约0.85m . 这对我来说看起来很合理 . 如果CCD较小,则会改善(即精度值降低) .

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

  • 5

    我意识到这已经晚了一年,但万一有人发现了这一点 .

    公式是这样的:

    dD = dd * D^2 / fB

    哪里:

    • dd =差异错误

    • dD =深度错误

    • D =深度

    • f =焦距

    • B =基线

    如果 f = 6mm = 0.006mB = 24mm = 0.024mD = 10mdd 是1像素[我现在称之为 P ,但通常约为1.4um] .

    插入所有数字给出:

    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个像素 .

    我希望有所帮助 .

相关问题