opencv深度图精度

时间:2011-08-17 08:37:33

标签: opencv 3d computer-vision

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

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

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

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

感谢。

2 个答案:

答案 0 :(得分:12)

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

公式如下:

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

我希望有所帮助。

答案 1 :(得分:5)

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

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