opencv深度图精度

bar*_*dad 11 3d opencv computer-vision

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

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

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

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

谢谢.

tha*_*ang 12

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

公式是这样的:

dD = dd * D^2 / fB

哪里:

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

如果f = 6mm = 0.006m,B = 24mm = 0.024m,D = 10m,dd为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个像素.

我希望有所帮助.


jil*_*wit 5

如果您查看链接文档中公式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较小,则会改善(即精度值降低).

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