0

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

4

1 回答 1

0

尽管很久以前就有人问过这个问题,但我觉得它需要一个答案,因为我遇到了同样的问题并且无法找到任何相关信息。

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

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

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

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

深度=基线*焦距/视差

现在来一些棘手的部分。我搜索了高低的焦距,但无法在文档中找到它。我刚才在编写基线时意识到,基线记录在上述来源中,但是从 IV.B 部分我们可以看到它可以间接在 P(i)rect 中找到。

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

步骤如下:

对于深度图中的像素:

xyz_normalised = P_rect \ [u,v,1]

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

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

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

于 2020-08-11T09:17:49.143 回答