Computer vision kitti数据集摄像机投影矩阵
我正在研究kitti数据集,特别是如何将世界点转换为图像坐标。我看了自述文件,它在下面说,我需要先转换到摄像机坐标,然后乘以投影矩阵。我有两个问题,来自非计算机视觉背景Computer vision kitti数据集摄像机投影矩阵,computer-vision,projection,camera-calibration,Computer Vision,Projection,Camera Calibration,我正在研究kitti数据集,特别是如何将世界点转换为图像坐标。我看了自述文件,它在下面说,我需要先转换到摄像机坐标,然后乘以投影矩阵。我有两个问题,来自非计算机视觉背景 我查看了calib.txt中的数字,特别是矩阵是3x4,在最后一列中有非零值。我一直认为这个矩阵=K[I | 0],其中K是相机的固有矩阵。那么,为什么最后一列不是零,这意味着什么?e、 P2是 将投影应用于[u,v,w]并将u,v除以w后,这些值是关于图像中心的原点还是位于图像左上角的原点 自述: calib.txt:摄像机
=K[I | 0]
,其中K是相机的固有矩阵。那么,为什么最后一列不是零,这意味着什么?e、 P2是自述: calib.txt:摄像机的校准数据:P0/P1为3x4 投影 校正后的矩阵。这里P0表示左边,P1表示左边 右摄像机。Tr将点从velodyne坐标转换为 左摄像机坐标系。为了从 velodyne扫描仪扫描到第i个图像平面中的x点,因此必须 将其转换为:
x = Pi * Tr * X
参考文献:
答复:
我强烈建议您阅读上述参考资料。他们可能会解决你的大部分问题,如果不是全部的话
对于问题2:图像上的投影点相对于左上角的原点。参见参考文献2和3,图像中远3d点的坐标为(center\u x
,center\u y
),其值在P\u rect
矩阵中提供。或者,您可以使用一些简单的代码来验证这一点:
import numpy as np
p = np.array([[7.070912e+02, 0.000000e+00, 6.018873e+02, 4.688783e+01],
[0.000000e+00, 7.070912e+02, 1.831104e+02, 1.178601e-01],
[0.000000e+00, 0.000000e+00, 1.000000e+00, 6.203223e-03]])
x = [0, 0, 1E8, 1] # A far 3D point
y = np.dot(p, x)
y[0] /= y[2]
y[1] /= y[2]
y = y[:2]
print(y)
您将看到一些输出,如:
array([6.018873e+02, 1.831104e+02 ])
非常接近(p[0,2],p[1,2])
,也称为(中心x
,中心y
)。对于所有的p矩阵(3x4),它们表示:
P(i)rect = [[fu 0 cx -fu*bx],
[0 fv cy -fv*by],
[0 0 1 0]]
最后一列为基线,单位为米,参考摄像机为0。您可以看到P0在最后一列中全部为零,因为它是参考摄影机
这篇文章有更多的细节:
您在哪里能够理解或解决此问题?
P(i)rect = [[fu 0 cx -fu*bx],
[0 fv cy -fv*by],
[0 0 1 0]]