Camera 如何从相机固有矩阵计算KITTI相机的水平和垂直FOV?

Camera 如何从相机固有矩阵计算KITTI相机的水平和垂直FOV?,camera,fieldofview,kitti,Camera,Fieldofview,Kitti,我想从KITTI数据集中使用的相机的相机固有矩阵计算水平和垂直视野。我需要视野的原因是将深度地图转换为3D点云。虽然这个问题很久以前就被问过,但我觉得它需要一个答案,因为我遇到了同样的问题,并且找不到任何关于它的信息 不过,我已经使用中提供的信息和一些更通用的相机校准文档解决了这个问题 首先,我们需要将提供的视差转换为距离。这可以通过使用dev_kit中的方法将disp映射转换为float来实现,其中它们声明: disp(u,v)=(float)I(u,v))/256.0 然后可以通过默认立体视

我想从KITTI数据集中使用的相机的相机固有矩阵计算水平和垂直视野。我需要视野的原因是将深度地图转换为3D点云。

虽然这个问题很久以前就被问过,但我觉得它需要一个答案,因为我遇到了同样的问题,并且找不到任何关于它的信息

不过,我已经使用中提供的信息和一些更通用的相机校准文档解决了这个问题

首先,我们需要将提供的视差转换为距离。这可以通过使用dev_kit中的方法将disp映射转换为float来实现,其中它们声明:

disp(u,v)=(float)I(u,v))/256.0

然后可以通过默认立体视觉方程将此视差转换为距离:

深度=基线*焦距/视差

现在是一些棘手的部分。我到处寻找焦距,但在文档中找不到。 我刚刚在写作时意识到,基线记录在上述来源中,但从第IV.B节我们可以看到,它可以间接地在P(I)rect中找到

可以在校准文件中找到p_rects,并将用于计算基线和从图像中的uv到现实世界中的xyz的转换

步骤如下:

对于深度贴图中的像素:

xyz_归一化=p_rect\[u,v,1]

其中u和v分别是像素的x和y坐标

这将给你一个xyz_归一化的形状[x,y,z,0],z=1 然后,您可以将其与该像素处给定的深度相乘,得到xyz坐标

为完整起见,由于p_rect是此处的深度图,您需要使用cam_cam calibration txt文件中的p_3来获取基线(因为它包含彩色摄像机之间的基线),p_2属于左侧摄像机,用作occ_0文件的参考