我想从用于KITTI数据集中的摄像机的摄像机固有矩阵计算水平和垂直视场。我需要视野的原因是将深度图转换为3D点云。
答案 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文件的参考。