从视差图获取深度图

问题描述 投票:0回答:1

据我所知,我们可以使用以下公式来获得与深度图的实际距离。pi相机的焦距(以像素为单位)为2571.4,而我的两个相机之间的距离为0.065m。因此基于三角剖分方法使用此公式,

距离=(焦距*两台相机之间的距离)/视差图。

我还使用以下代码生成了视差图:

stereo = cv2.StereoBM_create(numDisparities=48, blockSize=25)
disparity = steeo.compute(rectified_pair[0], rectified_pair[1])
norm_image = cv2.normalize(disparity, None, alpha = 0, beta =1, norm_type=cv2.NORM_MINMAX, dtype=cv.CV_32F)

f = 2571.4 
b = 0.065
distance = (b*f)/disparity
cv2.imshow(norm_image)

我意识到我的“差异”图像范围从-16开始。两组代码的值都为负,我不确定这是否是计算距离的正确方法。另外,我已经校准了相机。谢谢!

opencv image-processing raspberry-pi3 stereo-3d disparity-mapping
1个回答
0
投票

首先,您应该从校准文件中读取焦距和基线值,而不要对其进行硬编码。如果做得正确,我用来计算深度的方法就是逐像素进行。所以我会像这样逐像素应用相同的公式:

depthmap.at(i,j)=(b * f)/ disparitymap.at(i,j)。

您也许可以尝试这个。通常,视差图中的任何负值都会由StereoBM计算返回。因此,只有在该过程之后才可能出现问题。

© www.soinside.com 2019 - 2024. All rights reserved.