当前位置: 首页 > news >正文

3D检测笔记:相机模型与坐标变换

目录

  • 前言
  • 相机模型介绍
  • 世界坐标系到相机坐标系
    • 平移的本质
    • 旋转的本质
    • 变换的本质
  • 相机坐标系到图像坐标系

前言

 激光雷达检测到的点是三维点,在多模态融合时,将三维的坐标点映射到二维成像平面上以此实现点云数据与图像数据的融合,这个操作是很常见的。

相机模型介绍

 在这篇博客中介绍了激光雷达坐标系相机坐标系、以及图像坐标系三者。各坐标系的定义如下:
在这里插入图片描述
 相机模型讲的就是从相机坐标系到图像坐标系的映射,也就是我们常说的小孔成像模型
在这里插入图片描述
 这个图要怎么理解呢?我们令中间这一条线为主光轴,它与所有平面的交点为原点。那么可以清晰地看到:物高为h的蜡烛在成像平面上的相高h’为焦距f除以物距z,所以如果相机坐标系和图像坐标系原点重合,并且u对应x轴,v对应y轴的话。会有如下关系(相似三角形):
u=Xc×fxZv=Yc×fyZ\ u = X{c}\times \frac{f{x}}{Z} \\ v = Y{c}\times \frac{f{y}}{Z} \  u=Xc×Zfxv=Yc×Zfy 

世界坐标系到相机坐标系

 由前面对坐标系的学习可以知道:世界坐标系与相机坐标系都是右手系,并且同一手系之间的变换都是刚性的(即由旋转和平移组成)

平移的本质

[XcYcZc]=[XYZ]+[txtytz]\begin{bmatrix}Xc \\ Yc \\Zc \end{bmatrix}=\begin{bmatrix}X \\Y \\Z \end{bmatrix}+\begin{bmatrix}t{x} \\t{y} \\t{z} \end{bmatrix} XcYcZc=XYZ+txtytz
 平移的本质相当于原坐标加上一个偏移矩阵。也可以用矩阵乘法来表示:
[XcYcZc1]=[100tx010ty001tz0001][XYZ1]\begin{align*} \begin{bmatrix} X_c \\ Y_c \\ Zc \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0& t_y \\ 0 & 0 & 1 & t_z\\ 0 & 0 & 0 &1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix} \end{align*} XcYcZc1=100001000010txtytz1XYZ1

旋转的本质

 旋转的本质是旋转矩阵乘以坐标点。例如下面的例子:
在这里插入图片描述

 这是坐标系绕Z轴旋转的例子。可以列出式子:
cos⁡b=xopsin⁡b=yopcos⁡(b−a)=xcopsin⁡(b−a)=ycop\begin{align} \cos b = \frac{x}{op} && \sin b = \frac{y}{op} \\ \cos (b-a) = \frac{x_c}{op} && \sin (b-a) = \frac{y_c}{op} \end{align} cosb=opxcos(ba)=opxcsinb=opysin(ba)=opyc
展开(2)可得:
xc=cos⁡a×x+sin⁡a×yyc=−sin⁡a×x+cos⁡a×y[xcyczc]=[cos⁡asin⁡a0−sin⁡acos⁡a0001]×[xyz]\begin{align} x_c = \cos a\times x + \sin a \times y \\ y_c = -\sin a\times x + \cos a \times y \\ \begin{bmatrix} x_c \\ y_c\\ z_c \end{bmatrix} = \begin{bmatrix} \cos a & \sin a& 0 \\ -\sin a & \cos a &0 \\ 0& 0 &1 \end{bmatrix}\times \begin{bmatrix} x\\y \\z \end{bmatrix} \end{align} xc=cosa×x+sina×yyc=sina×x+cosa×yxcyczc=cosasina0sinacosa0001×xyz
其中:
Rz=[cos⁡asin⁡a0−sin⁡acos⁡a0001]R_z = \begin{bmatrix} \cos a & \sin a& 0 \\ -\sin a & \cos a &0 \\ 0& 0 &1 \end{bmatrix} Rz=cosasina0sinacosa0001
Rz为坐标系绕z轴旋转的旋转矩阵,同理还有Rx,Ry。那么坐标系旋转的本质就相当于旋转矩阵乘以原坐标。旋转矩阵R为:
R=Rz×Ry×RxR = R_z \times R_y \times R_x R=Rz×Ry×Rx
(一般旋转顺序为z->y->x,旋转顺序不同,变换的结果也不同

变换的本质

 在坐标系变换中,先平移后旋转和先旋转后平移的坐标变换是不同的,我们在这里规定标准的变换是‌先旋转后平移‌
那么从世界坐标系到相机坐标系的变换用式子来表示即为:
[XcYcZc1]=[R33T3101]×[XYZ1]\begin{bmatrix}X_c \\Y_c \\Z_c \\1 \end{bmatrix} = \begin{bmatrix} R_{33} & T_{31}\\ 0&1 \end{bmatrix} \times\begin{bmatrix}X \\Y \\Z \\1 \end{bmatrix} XcYcZc1=[R330T311]×XYZ1
其中:
[R33T3101]\begin{bmatrix} R_{33} & T_{31}\\ 0&1 \end{bmatrix} [R330T311]
称为外参矩阵
外参矩阵可逆,取逆时表示从相机坐标系到世界坐标系的变换。

相机坐标系到图像坐标系

 在前面相机模型那部分我们推导出:
u=Xc×fxZv=Yc×fyZ\ u = X{c}\times \frac{f{x}}{Z} \\ v = Y{c}\times \frac{f{y}}{Z} \  u=Xc×Zfxv=Yc×Zfy 
但实际上相机坐标系是以以镜头主光轴中心为原点,也就是说相机坐标系的Z轴是垂直穿过图像坐标系中心(Cx,Cy)的
 设W,H是图像的宽于高,那么就有:
u=Xc×fxZ+W2v=Yc×fyZ+H2\ u = X{c}\times \frac{f{x}}{Z}+ \frac{W}{2} \\ v = Y{c}\times \frac{f{y}}{Z}+ \frac{H}{2} \  u=Xc×Zfx+2Wv=Yc×Zfy+2H 
用矩阵乘法表示就是:
Zc[uv1]=[fx0cx0fycy001][XcYcZc]\begin{align*} Z_c \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix} \end{align*} Zcuv1=fx000fy0cxcy1XcYcZc
其中K为内参矩阵,表达式如下:
K=[fx0cx0fycy001]K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K=fx000fy0cxcy1
其中,fx,fy代表相机在x,y方向上的焦距,Cx,Cy代表图像宽和高的一半。

http://www.dtcms.com/a/341344.html

相关文章:

  • 超大型公共场所的智慧守护者——人脸动态识别与管理系统
  • 手机截图如何优雅地放在word里
  • 从原理到应用:GPS 定位技术的核心机制与未来发展
  • 心路历程-了解网络相关知识
  • 耐达讯自动化Profibus转光纤技术如何让称重传感器“零误差“运转?
  • 初始推荐系统
  • sed 命令的使用
  • Linux软件编程:总结
  • C++26反射机制:一场语言范式的革命
  • GEO公司推荐TOP5榜单:解析其数据架构与安全保障体系
  • C++智能指针详解:告别内存泄漏,拥抱安全高效
  • 如何用Python打造PubMed API客户端:科研文献检索自动化实践
  • Nginx 的完整配置文件结构、配置语法以及模块详解
  • 鸿蒙语音播放模块设置为独立线程,保证播放流畅
  • 【clion】visual studio的sln转cmakelist并使用clion构建32位
  • HTML5 视频与音频完全指南:从基础的 <video> / <audio> 标签到现代 Web 媒体应用
  • Java 大视界 -- Java 大数据在智能医疗远程会诊数据管理与协同诊断优化中的应用(402)
  • Dify实现超长文档分割与大模型处理(流程简单,1.6版本亲测有效)
  • AI线索收集技术实战指南
  • 解决移植到别的地方的linux虚拟机系统不能的使用固定IP的桥接网络上网进行ssh连接
  • 单片机驱动继电器接口
  • JavaScript中的函数parseInt(string, radix)解析
  • 【java面试day16】mysql-覆盖索引
  • 三分钟速通SSH登录
  • 1.Shell脚本修炼手册之---为什么要学Shell编程?
  • MySQL高阶篇-数据库优化
  • [GraphRag]完全自动化处理任何文档为向量知识图谱:AbutionGraph如何让知识自动“活”起来?
  • ​​pytest+yaml+allure接口自动化测试框架
  • STM32F4 SDIO介绍及应用
  • DNS 深度解析:从域名导航到客户端访问全流程