Computer vision 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:摄像机

我正在研究kitti数据集,特别是如何将世界点转换为图像坐标。我看了自述文件,它在下面说,我需要先转换到摄像机坐标,然后乘以投影矩阵。我有两个问题,来自非计算机视觉背景

  • 我查看了calib.txt中的数字,特别是矩阵是3x4,在最后一列中有非零值。我一直认为这个矩阵
    =K[I | 0]
    ,其中K是相机的固有矩阵。那么,为什么最后一列不是零,这意味着什么?e、 P2是
  • 将投影应用于[u,v,w]并将u,v除以w后,这些值是关于图像中心的原点还是位于图像左上角的原点

  • 自述:

    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]]