【发布时间】:2019-11-28 12:34:10
【问题描述】:
我想从 KITTI 数据集中使用的相机的相机固有矩阵计算水平和垂直视野。我需要视野的原因是将深度图转换为 3D 点云。
【问题讨论】:
标签: camera fieldofview kitti
我想从 KITTI 数据集中使用的相机的相机固有矩阵计算水平和垂直视野。我需要视野的原因是将深度图转换为 3D 点云。
【问题讨论】:
标签: camera fieldofview kitti
虽然这个问题很久以前就有人问过了,但我觉得它需要一个答案,因为我遇到了同样的问题并且无法找到任何相关信息。
不过,我已经使用this document 中提供的信息和一些更通用的相机校准文档解决了这个问题
首先,我们需要将提供的视差转换为距离。这可以通过它们声明的 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 文件的参考。
【讨论】: