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

时间:2019-11-28 12:34:10

标签: camera fieldofview kitti

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

1 个答案:

答案 0 :(得分:0)

尽管这个问题已经问了很久了,但是当我遇到相同的问题并且找不到任何信息时,我感到它需要一个答案。

但是我已经使用this document中提供的信息和一些更通用的相机校准文档来解决了该问题

首先,我们需要将提供的视差转换为距离。这可以通过首先通过dev_kit中声明状态的方法将disp映射转换为float来完成:

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

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

深度=基线*焦距/视差

现在来一些棘手的部分。我在焦距上下搜索,但在文档中找不到。 我刚刚意识到在撰写上述基准时已经记录了基准,但是从IV.B节中我们可以看到可以在P(i)rect中间接找到它。

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

步骤如下:

对于深度图中的像素:

xyz_normalized = P_rect \ [u,v,1]

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

这将为您提供形状为[x,y,z,0]的xyz_normalized,z = 1 然后,您可以将其乘以该像素处给出的深度,以得出xyz坐标。

为了完整起见,由于P_rect是此处的深度图,因此您需要使用cam_cam校准txt文件中的P_3来获取基线(因为它包含彩色相机之间的基线),并且P_2属于左相机,即用作occ_0文件的参考。