首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过投影矩阵从KITTI获得鸟眼视图?

如何通过投影矩阵从KITTI获得鸟眼视图?
EN

Stack Overflow用户
提问于 2019-11-02 05:48:45
回答 1查看 1.7K关注 0票数 1

目标是从KITTI图像(dataset)获得鸟眼视图,我有投影矩阵(3x4)。

生成转换矩阵的方法有很多。在鸟眼世界里,我读过一些数学表达式,比如:

H12 = H2*H1-1=A_R_A-1=P*A-1在OpenCV -投影、同形矩阵与鸟瞰

和x= Pi * Tr *X在kitti数据集摄像机投影矩阵

但这些选择都不符合我的目的。

PYTHON代码

将numpy作为np导入cv2

image = cv2.imread('Data/RGB/000007.png')

maxHeight,maxWidth = image.shape:2

M有3x4维

M=np.array( 721.5377、0.0、609.5593、44.85728、0.0、721.5377、72.854、0.2163791、0.0、0.0、1.0、.002745884)

这里需要一个具有3x3维的M矩阵

warped =cv2.Warp透视图(图像,M,(maxWidth,maxHeight))

显示原始和扭曲的图像

Cv2.imShow(“原始”,图像)

Cv2.imShow(“翘曲”,翘曲)

Cv2.等待键(0)

我需要知道如何管理投影矩阵,以获得鸟瞰。

到目前为止,我尝试过的每一件事都会向我抛出扭曲的图像,甚至没有接近我所需要的信息。

这是KITTI数据库中图像的一个例子。

这是KITTI数据库中的另一个图像示例。

在左边,图像显示在3D (上图)和2D (以下)中检测汽车。右边是我想要的鸟瞰图。因此,我需要获得转换矩阵来转换分隔车辆的方框的坐标。

EN

回答 1

Stack Overflow用户

发布于 2019-11-02 17:39:39

下面是我手工构建鸟瞰转换的代码:

代码语言:javascript
运行
复制
cv::Mat1d CameraModel::getInversePerspectiveMapping(double pixelPerMeter, cv::Point const & origin) const {
    double f = pixelPerMeter * cameraPosition()[2];
    cv::Mat1d R(3,3);
    R <<  0, 1, 0,
          1, 0, 0,
          0, 0, 1;

    cv::Mat1d K(3,3);
    K << f, 0, origin.x, 
         0, f, origin.y, 
         0, 0, 1;
    cv::Mat1d transformtoGround = K * R * mCameraToCarMatrix(cv::Range(0,3), cv::Range(0,3));
    return transformtoGround * mIntrinsicMatrix.inv();
}

函数内部使用的成员变量/函数为

  • 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创建鸟瞰图像。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58668588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档