我想使用带有opencv的3d立体摄像手机测量到物体的距离。我正在寻找一种能够测量距离测量精度的公式,具体取决于焦距,两台摄像机之间的距离,图像分辨率和被测物体的大小。 谷歌搜索了一下,我找到了这个公式:
d = Z ^ 2 * p /(f * b)
Z - 与物体的距离,p - 视差精度,f - 焦距,b - 基线(相机之间的距离)。
我知道基线和焦距,但我不知道差异的准确性。 这个配方是我需要的吗?如果是这样,我如何找到差异准确度?
感谢。
答案 0 :(得分: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个像素。
我希望有所帮助。
答案 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较小,则会改善(即精度值降低)。
这是假设两个立体图像之间的特征完美匹配的最低可能值。此值仅表示立体声对的物理限制。