我想使用带有 opencv 的 3d 立体照相手机测量到物体的距离。我正在寻找一个公式来衡量距离测量的准确性,具体取决于焦距、两个相机之间的距离、图像分辨率和被测物体的大小。 谷歌搜索了一下,我发现了这个公式:
d = Z^2 * p/(f*b)
Z - 到物体的距离,p - 视差精度,f - 焦距,b - 基线(相机之间的距离)。
我知道基线和焦距,但我不知道视差精度。 这个公式是我需要的吗?如果是这样,我如何找到视差精度?
谢谢。
最佳答案
我意识到这已经晚了一年,但以防万一有人发现它。
公式是这样的:
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 个像素。
希望对您有所帮助。
关于opencv深度图精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7089922/