目标是从KITTI图像(数据集)中获取鸟瞰图,我有投影矩阵(3x4)。在
有很多方法可以生成转换矩阵。对于鸟瞰图,我读过一些数学表达式,比如:
H12=H2*H1-1=ARA-1=p*A-1 inOpenCV - Projection, homography matrix and bird's eye view
x=Pi*Tr*x in kitti dataset camera projection matrix
但这些选择都不符合我的目的。在
将numpy作为np导入 进口cv2
image=cv2.imread('Data/RGB/000007.png')
最大高度,最大宽度=图像.形状[:2]
M=np.数组([721.5377,0.0,609.5593,44.85728],[0.0,721.5377,72.854,0.2163791],[0.0,0.0,1.0,.002745884]))
翘曲=cv2。翘曲透视(图像,M,(最大宽度,最大高度))
cv2.imshow(“原始”,图像)
cv2.imshow(“扭曲”,扭曲)
cv2.waitKey(0)
我需要知道如何管理投影矩阵来获得鸟瞰图。在
到目前为止,我所尝试的一切都会给我带来扭曲的图像,甚至没有接近我需要的信息。在
This is a example of image from the KITTI database.
This is other example of image from the KITTI database.
在左边,图像显示了3D(上图)和2D(下图)中检测汽车的图像。右边是我想要的鸟瞰图。因此,我需要得到转换矩阵来转换划分汽车的盒子的坐标。在
下面是我手动构建鸟瞰视图转换的代码:
函数内部使用的成员变量/函数是
mCameraToCarMatrix
:一个4x4矩阵,包含从摄像机坐标系到汽车坐标系的齐次刚性变换。相机的轴是x-右、y-下、z-向前。汽车的轴是x向前,y向左,z向上。在此函数中,只使用mCameraToCarMatrix
的旋转部分。mIntrinsicMatrix
:保存相机内部参数的3x3矩阵cameraPosition()[2]
:汽车坐标系中摄像机的Z坐标(高度)。它与mCameraToCarMatrix(2,3)
相同。功能参数:
pixelPerMeter
:鸟瞰图像的分辨率。XY平面上1米的距离将转换为鸟瞰图像中的pixelPerMeter
像素。origin
:相机在鸟瞰图中的位置您可以将转换矩阵作为
cv::initUndistortRectifyMaps()
传递给newCameraMatrix
,然后使用cv::remap
创建鸟瞰图。在相关问题 更多 >
编程相关推荐