当前位置: 首页 > 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.lryc.cn/news/626937.html

相关文章:

  • 今日行情明日机会——20250820
  • 算法提升树形数据结构-(线段树)
  • 数据结构与算法系列(大白话模式)小学生起点(一)
  • 关于 Flask 3.0+的 框架的一些复习差异点
  • 算法230. 二叉搜索树中第 K 小的元素
  • 雷卯针对香橙派Orange Pi 5B开发板防雷防静电方案
  • 力扣hot100:最大子数组和的两种高效方法:前缀和与Kadane算法(53)
  • Deepseek+python自动生成禅道测试用例
  • 自动化测试用例生成:基于Python的参数化测试框架设计与实现
  • 记一次pnpm start启动异常
  • Spring Boot 3整合Nacos,配置namespace
  • 质谱数据分析环节体系整理
  • Rust 入门 包 (二十一)
  • 内网环境给VSCode安装插件
  • PostgreSQL 流程---更新
  • 基于51单片机自动浇花1602液晶显示设计
  • Notepad++批量转UTF-8脚本
  • 测试DuckDB插件对不同格式xlsx文件的读写效率
  • 基于Pytochvideo训练自己的的视频分类模型
  • 【C++】基础:C++11-14-17常用新特性介绍
  • XR(AR/VR/MR)芯片方案,Soc VS “MCU+协处理器”?
  • 109、【OS】【Nuttx】【周边】效果呈现方案解析:workspaceStorage(下)
  • 【最后203篇系列】034 使用SQLite构建简单的任务管理
  • 解决Docker 无法连接到官方镜像仓库
  • LINUX 820 shell:shift,expect
  • 49 C++ STL模板库18-类模板-pair
  • 双模式 RTMP H.265 播放器解析:从国内扩展到 Enhanced RTMP 标准的演进
  • 深入理解JVM内存结构:从字节码执行到垃圾回收的全景解析
  • 基于单片机智能加湿器/空气加湿器
  • ubuntu系统上的conda虚拟环境导出方便下次安装