(五)carla中世界坐标系与相机坐标系、像素坐标系变换

由于实验需要将 carlacarlacarla 中世界坐标系下的坐标点画到相机采集的前视图上,故需要进行坐标系之间的转换。

转换中遇到的问题

参考这篇博客中给出的方法: link


发现将世界坐标系转到像素坐标系下显示的不对。因此仔细从头到尾仔细分析一下,原来是 carlacarlacarla 中 get_transform().get_matrix()get\_transform().get\_matrix()get_transform().get_matrix() 函数的问题。具体解释如下。

转换过程

1.世界坐标系到相机坐标系

首先,车辆在 carlacarlacarla 中运行时可以获取实时的世界坐标,例如下图所示 locationlocationlocation 中的 x,yx,yx,y 坐标。
获取方式为:

#创建了一辆车my_vehicle
t = my_vehicle.get_transform()
global_location_x = t.location.x
global_location_y = t.location.y
global_location_z = t.location.z
global_rotation_yaw = t.rotation.yaw
global_rotation_pitch = t.rotation.pitch
global_rotation_roll = t.rotation.roll


获取到世界坐标系后,首先需要转到相机坐标系下。
这篇博客 link 中说相机的外参矩阵直接可以通过下方函数来获得。

camera.get_transform().get_matrix()

但是,经过测试发现不是。
carlacarlacarla 官方文档:

文档中说 transformtransformtransform 计算以当前点为原点的坐标系 AAA 与世界坐标系 BBB 之间的变换。

get_matrix()get\_matrix()get_matrix() 函数获取从当前点为原点的坐标系 AAA 到世界坐标系 BBB 之间的变换矩阵。
重点: 但是,get_matrix()get\_matrix()get_matrix() 默认相机位置为原点的这个坐标系的 x,y,zx,y,zx,y,z 轴与世界坐标系的 x,y,zx,y,zx,y,z 轴是相同方向的,没有考虑轴旋转。
而实际上,相机坐标系是相机的正前方,光心方向总是 zzz 轴方向。

世界坐标系是这样的:


这两个坐标系轴的关系存在一个旋转矩阵。
camera.get_transform().get_matrix()camera.get\_transform().get\_matrix()camera.get_transform().get_matrix() 获得的是不考虑轴旋转的局部到全局的变换矩阵。
将 camera.get_transform().get_matrix()camera.get\_transform().get\_matrix()camera.get_transform().get_matrix() 获得的矩阵取逆得到的是不考虑轴旋转的全局到局部的变换矩阵。
而世界坐标系到相机局部坐标系考虑轴旋转关系的对应矩阵为:
[010001100]\left[ \begin{matrix} 0 & 1 & 0\\ 0 & 0 & 1\\ 1 & 0& 0 \end{matrix} \right] ⎣⎡​001​100​010​⎦⎤​
因此将 camera.get_transform().get_matrix()camera.get\_transform().get\_matrix()camera.get_transform().get_matrix() 获得的矩阵取逆再乘以世界坐标系轴与相机坐标系轴之间的旋转矩阵,就真正得到世界坐标系到相机坐标系的变换矩阵。
得到变换矩阵 RRR 后,假设世界坐标系下点的坐标是 Pw=(xw,yw,zw)TP_{w} = (x_{w},y_{w},z_{w})^TPw​=(xw​,yw​,zw​)T,
Pc=R.PwP_{c} = R.P_{w} Pc​=R.Pw​
注:如果使用上面世界坐标系到相机局部坐标系考虑轴旋转关系的对应矩阵发现效果不对时,可能是由于光轴是朝向相机正后方。

世界坐标系到相机局部坐标系考虑轴旋转关系的对应矩阵为:
[0−10001−100]\left[ \begin{matrix} 0 & -1 & 0\\ 0 & 0 & 1\\ -1 & 0 & 0 \end{matrix} \right] ⎣⎡​00−1​−100​010​⎦⎤​

2.相机坐标系到像素坐标系

参考这篇博客链接 link

参考这篇博客 link

在 carlacarlacarla 中没有找到内参获取函数,但是根据上述两篇博客中的解释,内参可以估计得到。
在参考文档中 Sensorsrefernece/RGBcamera/AdvancedcameraattributesSensors\;\;refernece/RGB\;\;camera/Advanced camera attributesSensorsrefernece/RGBcamera/Advancedcameraattributes 中,可以得到相机的焦距。

光心一般是相机采集图片的中心。根据这些信息可以估计出相机内参。
假设相机坐标系下点的坐标是 Pc=(xc,yc,zc)TP_{c} = (x_{c},y_{c},z_{c})^TPc​=(xc​,yc​,zc​)T,相机内参是 KKK,
Pp=K.PcP_{p} = K.P_{c} Pp​=K.Pc​

转换效果

首先记录车辆行驶过程中的轨迹点,然后将当前位置后20帧车辆的世界坐标系下坐标转化到当前图像坐标系下,转换结果如下:

程序后续整理上传到我的 githubgithubgithub 中。

(五)carla中世界坐标系与相机坐标系、像素坐标系变换相关推荐

  1. [carla]把carla世界坐标系 转换为 俯视地图像素坐标系

    在下面这篇参考博客中介绍了如何手动获取从carla世界坐标系到俯视地图像素坐标系的旋转平移矩阵.我也是采用了一样的思路和代码,这里把实现的过程以及最后所有地图的变换矩阵记录如下. 参考博客:carla ...

  2. 世界坐标系-相机坐标系-像素坐标系

    世界坐标系-相机坐标系-像素坐标系 世界坐标系,相机坐标系,图像物理坐标系,图像像素坐标系 世界坐标系-相机坐标系,外参矩阵 相机坐标系-图像物理坐标系-图像像素坐标系,内参矩阵 世界坐标系,相机坐标 ...

  3. 世界坐标系,相机坐标系,图像坐标系,像素坐标系是什么?

    四种坐标系 相机标定过程中涉及的坐标系类型:世界坐标系,相机坐标系,图像坐标系,像素坐标系. 世界坐标系(xw,yw,zw):摄像机与被摄物体可以放置在环境中任意位置,这样就需要在环境中建立一个坐标系 ...

  4. MATLAB 相机标定中标定板角点像素坐标系到世界坐标系的转换

    matlab 做相机标定后,想将第一张(任意一张都行)标定板角点所对应的像素坐标转换到世界坐标系下,标定板角点的像素坐标真值与世界坐标真值都非常容易获得,但是我通过内外参矩阵将像素坐标转换到世界坐标有 ...

  5. 三维视觉基础之世界坐标系、相机坐标系、图像坐标系和像素坐标系之间的转换关系

    三维视觉基础之世界坐标系.相机坐标系.图像坐标系和像素坐标系之间的转换关系 一.各坐标系介绍 二.世界坐标系和相机坐标系之间的转换 三.相机坐标系和图像坐标系之间的转换 四.图像坐标系和像素坐标系之间 ...

  6. 相机参数和相机模型各个坐标系(世界坐标系、相机坐标系、图像坐标系、像素坐标系之间变换)

    坐标系变换 1. 几个坐标系: 世界坐标系(world coordinate system): 用户定义的三维世界的坐标系,为了描述目标物在真实世界里的位置而被引入.单位为m. 相机坐标系(camer ...

  7. 【自动驾驶】16.计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换

    本篇博客为转载,我对其中的细节添加了一些说明. 原文链接:https://blog.csdn.net/chentravelling/article/details/53558096 0.前言 最近整理 ...

  8. 单目视觉标定:世界坐标系、相机坐标系、图像坐标系、像素坐标系——简单粗暴,粗暴

    转:https://blog.csdn.net/chentravelling/article/details/53558096 1.正文 图像处理.立体视觉等等方向常常涉及到四个坐标系:世界坐标系.相 ...

  9. 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换(转载)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chentravelling/article/details/53558096 0.前言 最近整理了& ...

最新文章

  1. 【深度学习】生动分析半监督学习与负相关学习算法
  2. 练习题3(求四位会员卡号之和)
  3. Java线程池的工作原理与实现
  4. android rtsp协议转http协议_网络协议HTTP 协议(一)
  5. python3基础知识_python3基础知识梳理
  6. java填充线缺口,在geom_freqpoly线下填充区域的最简单方法是什么?
  7. OpenCV-3.4.3图像通道处理
  8. MySQL字符串拼接(函数)
  9. python代码实现ASCII码转换
  10. 室外定位--GPS定位概述
  11. Vue-cli3更改项目logo图标
  12. Tampermonkey 高级API的使用 附Demo
  13. 三维扫描、三维建模在数字展厅中的应用
  14. 索尼在线商城的产品会不会更便宜?
  15. 弘辽科技:抖音电商,一场标准的「字节」式战役
  16. C++设计模式 温故知新李建忠(BooLan、GeekBand)
  17. PHP没你想的那么差
  18. Spring版本及常用商业软件版本说明
  19. 数据归约——主成分分析PCA
  20. QQ三国图片解码算法

热门文章

  1. SCI期刊Cover Letter写法模板
  2. 综合布线测试仪的测试方法与标准
  3. matlab画三维点坐标,已知各个点的三维坐标(x,y,z),怎么用MATLAB画三维图
  4. 诺基亚 java_诺基亚开放Symbian Javaapps了
  5. 计算机英语感想1500,求助:求新概念计算机英语英文读书报告1500字,谢~
  6. 数仓用户画像-标签体系详解
  7. 无线路由高级设置 虚拟服务器及DMZ主机
  8. python有序列表无序列表区别_用Python链表实现有序表与无序表
  9. node配置淘宝镜像
  10. android 日期格式 毫秒