[坐标系转换]车体坐标系 转 像素坐标系
1.动机
在项目中,我们常常需要绘制无人车激光雷达的BEV图。而原始激光雷达的点所处的坐标是车体局部坐标系(简称为vehiclepose)。所以就涉及到一个坐标系的转换,如图所示,由vehiclepose坐标系(记为O1)转换到pixel坐标系(记为O4)。
这里直接给出变换公式:
{R=−x1+dRC=−y1+dC\begin{cases} R=-x1+dR \\ C=-y1+dC \end{cases} {R=−x1+dRC=−y1+dC
可以看到实际上计算非常简单。感兴趣可以看下面的细节。
2.细节
二维坐标系的变换涉及到翻转和平移。下面就分成翻转和平移 2步完成这个转换:
2.1翻转
首先需要由O1,xy坐标轴都翻转,变成O2:
用翻转矩阵表达就是:
[x2y2]=[−100−1][x1y1]\begin{bmatrix} x2 \\ y2 \end{bmatrix}=\begin{bmatrix} -1& 0\\ 0 & -1\end{bmatrix}\begin{bmatrix} x1 \\ y1 \end{bmatrix}[x2y2]=[−100−1][x1y1]
2.2 平移
第二步是平移,要把坐标原点平移到像素图的左上角,这里是像素坐标的原点。
需要平移的距离dR是y方向需要平移的距离,dC是x方向需要平移的距离。
用平移矩阵表达就是:
[x3y3]=[x2y2]+[dRdC]\begin{bmatrix} x3 \\ y3 \end{bmatrix} =\begin{bmatrix} x2 \\ y2 \end{bmatrix} + \begin{bmatrix} dR \\ dC \end{bmatrix} [x3y3]=[x2y2]+[dRdC]
2.3 总结
将翻转矩阵和平移矩阵合并,就能得到最终的坐标变换公式:
[x3y3]=[−100−1][x1y1]+[dRdC]\begin{bmatrix} x3 \\ y3 \end{bmatrix}=\begin{bmatrix} -1 & 0 \\ 0 & -1 \end{bmatrix}\begin{bmatrix} x1 \\ y1 \end{bmatrix} + \begin{bmatrix} dR \\ dC \end{bmatrix} [x3y3]=[−100−1][x1y1]+[dRdC]
带入旋转角度,然后化成等式形式为:
{x3=−x1+dRy3=−y1+dC\begin{cases} x3=-x1+dR \\ y3=-y1+dC \end{cases} {x3=−x1+dRy3=−y1+dC
一般像素坐标不用(x,y)表示,我们换成行和列(R,C)的形式
由于像素坐标中,行R对应的是x轴,列C对应的是y轴:
{R=−x1+dRC=−y1+dC\begin{cases} R=-x1+dR \\ C=-y1+dC \end{cases} {R=−x1+dRC=−y1+dC
2.4 C++代码:
这里编写了一个函数,输入车体坐标(x,y),可以返回一个Qvector变量,存储转换后的像素坐标q。
QVector<int> local2img(float x,float y)
{QVector<int> q;int img_r = pixel_dR - floor(x/grid_size);int img_c = pixel_dC - floor(y/grid_size);q.append(img_r);q.append(img_c);return q;
}
- 代码变量注释:
pixel_dR :平移量dR
pixel_dC :平移量dC
grid_size:雷达栅格尺寸
3.拓展
3.1 旋转平移矩阵公式
[x2y2]=[cosθ−sinθsinθcosθ][x1y1]+[dxdy]\begin{bmatrix} x2 \\ y2 \end{bmatrix}=\begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix}\begin{bmatrix} x1 \\ y1 \end{bmatrix} + \begin{bmatrix} dx \\ dy \end{bmatrix} [x2y2]=[cosθsinθ−sinθcosθ][x1y1]+[dxdy]
θ\thetaθ逆时针为正。
[坐标系转换]车体坐标系 转 像素坐标系相关推荐
- (七) carla真实世界坐标系与全局俯视地图像素坐标系变换
(七) carla真实世界坐标系与全局俯视地图像素坐标系变换 问题陈述 下图为 carlacarlacarla 中 Town07Town07Town07 的真实世界. 下图为 carlacarlaca ...
- 相机针孔模型----从世界坐标系,到相机坐标系,再到图像物理坐标系,最后到图像像素坐标系的转换过程解析
看了很多讲解针孔相机模型中从世界坐标系--->到相机坐标系-->图像坐标系的文章,心里的疑惑也逐渐展开,现在总结一下自己的理解: 世界坐标系.相机坐标系.图像物理坐标系.图像像素坐标系在我 ...
- 地图定位偏移以及坐标系转换(二)-不同坐标系的转换
不同坐标系转换 // 定义一些常量 const x_PI = 3.14159265358979324 * 3000.0 / 180.0 const PI = 3.1415926535897932384 ...
- unity 坐标系转换_Unity的几种坐标系及相互转换
介绍 1.WorldSpace(世界坐标系) 当我们向场景中添加物体时,他们都是以世界坐标系的方式的方式显示在场景中的 通过transform.position可以得到它在世界中的坐标位置,trans ...
- wgs84坐标系转换工具_ArcGIS中不同坐标系之间的转换
用户经常会遇到这样的情况,现有的数据坐标不符合要求,为应对需求,不得不为数据转换坐标系.很多人认为转换坐标系只是单纯的使用工具箱中的[投影]工具,那就大错特错了.有很多情况下,只使用[投影]工具并不能 ...
- 坐标系转换-大地坐标转笛卡尔坐标系,笛卡尔坐标系转东北天坐标系
参考:https://www.cnblogs.com/charlee44/p/15382659.html #include <iostream> #include <eigen3/E ...
- 相机与图像--小孔成像模型与坐标系--坐标系转换
利用图像序列进行三维重建的过程,相当于把一张张由很多像素组成的二维图像还原到三维空间中的一个过程.通过了解整个投影的过程,就可以很容易理解如何利用图像进行三维重建,以及三维重建中的关键步骤是什么.该小 ...
- 【自动驾驶】16.计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
本篇博客为转载,我对其中的细节添加了一些说明. 原文链接:https://blog.csdn.net/chentravelling/article/details/53558096 0.前言 最近整理 ...
- 相机成像---世界坐标系、相机坐标系、图像坐标系和像素坐标系之间的转换关系
新学期第一天开始写的这篇文章,看看我啥时候能把他发出去.假期当然是啥也没干了,之前还信誓旦旦说回家一定能学习,学个毛线.开始学习啦,去年年末把环境配置好了之后,实验发现他不准,用的D435i摄像头是红 ...
最新文章
- INSERT IGNORE 与INSERT INTO的区别
- softmax函数为什么叫softmax?
- 文本分类从入门到精通
- Java黑皮书课后题第10章:*10.26(计算器)修改程序清单7-9,接收一个字符串表达式,其中操作符和操作数由0到多个空格隔开
- sigaction函数使用实例
- 清华尹成python爬虫百度云_爬虫:利用python完成百度贴吧数据采集
- python3列表_Python3 列表List(十一)
- Spring Boot 2.0与Java 9
- HTML,,,音乐,html embed用法
- 【阿狸的小伙伴win7主题】
- 有监督机器学习训练流程---人工智能工作笔记0015
- 基于神经网络的人脸识别(Tensorflow,opencv,dlib,cnn,)
- ArcGIS 对道路名称进行标注
- matlab 坐标点标记符号表
- 安装java的心得体会_java实训心得体会范文
- Coin-row problem
- JAVA处理Excel的三种实现方式(二)
- 8.2 什么是事件主题
- Redis单线程还是多线程?IO多路复用原理
- SSDsim源码分析之make_aged
热门文章
- 服务器有哪些虚拟主机软件,虚拟主机管理系统有哪些
- 机器学习之决策树算法(3)
- Python之Hermite多项式
- JAVA中i =0是什么意思_i++和++i是什么意思 i++和++i的区别
- 音视频骚操作,FFmpeg 如何播放带「图片」的 M3U8 视频,IJKPlyaer 适配非标 TS 文件
- python与c进程间通讯_python 与c通信
- 12款最常使用的网络爬虫工具推荐
- 资源管理器和计算机一样吗,为资源管理器-计算机添加像浏览器一样的标签-Clover试用...
- windows subst命令实现原理模拟2 - subst卸载已经挂载的盘符
- 记录一下公司uniapp项目安装node_modules失败问题