使用OpenCV的噪声视差和深度贴图用于立体视觉和校准

2024-06-17 12:59:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在遵循一些在线教程,从成对的立体图像生成深度贴图,结果好坏参半。经过立体校准和校正相机后,我得到了0.514的极线误差。然而,在对图像进行所有校准和校正之后,得到的视差/深度贴图仍然非常嘈杂

def get_rectified_pair(img_left, img_right):
    img_left_rectified = cv2.remap(img_left, undistortion_map_left,
                            rectification_map_left,
                            cv2.INTER_NEAREST)

    img_right_rectified = cv2.remap(img_right, undistortion_map_right,
                            rectification_map_right,
                            cv2.INTER_NEAREST)


def get_disparity(img_left, img_right):
    img_left_rectified, img_right_rectified = get_rectified_pair(img_left, img_right)   

    stereo = cv2.StereoSGBM_create(numDisparities=80, blockSize=21)
    disparity = stereo.compute(img_left_rectified, img_right_rectified)

    return (disparity / 16).astype(disparity.dtype)


disparity = get_disparity(*get_image_pair(1))

plt.figure(figsize=(10, 6))
plt.imshow(disparity, cmap='gray')
plt.show()

最佳视差图如下所示:

disparity map

在使用cv2.reprojectImageTo3d将视差贴图转换为深度贴图后,它似乎可以很好地区分3-5英尺和10英尺以外的对象,但对于所有以3-5英尺为中心的对象来说,效果并不理想

这些视差图和深度值是典型的极线误差0.514吗?如果没有,我该如何改进这些结果


Tags: 图像rightmapimggetpltcv2left