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

【教程】详解相机模型与坐标转换

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]


由于复制过来,如果有格式问题,推荐大家直接去我原网站上查看:

相机模型与坐标转换 - 生活大爆炸

目录

  • 经纬度坐标系 转 地球直角坐标系
  • 大地直角坐标系 转 经纬度坐标系
  • 地理坐标系 转 大地直角坐标
  • 机体坐标系 转 地理坐标系
  • 相机坐标系 转 机体坐标系
  • 图像坐标系 转 像素坐标系
  • 相机坐标系 转 图像坐标系
  • 世界坐标系 转 相机坐标系
  • 世界坐标系 转 像素坐标系
  • 透视变换下的坐标转换
  • 坐标系系统

    • 通用横轴墨卡托UTM
  • 坐标转换公式

    • WGS84 <–> UTM
  • 坐标转换软件
  • 三维画图软件
  • 测试代码
  • 资料推荐
  • 题外话

7个坐标系:

  • 机体坐标系:单位m,是以载机位置为原点建立的直角坐标系,X轴指向机头方向,Z轴指向载机垂直向下。即带姿态。
  • 地理坐标系:单位m,以载机位置为原点建立的NED北东地坐标系
  • 大地直角坐标系:单位m,根据参考椭球面建立的笛卡尔直角坐标系,原点为参考椭球面的中心点,Z轴由原点指向地球北极; X轴由原点指向本初子午圈与赤道圈在椭球面上的交点;
  • WGS84坐标系:与大地直角坐标系一样,只是采用纬度(M)经度(L)大地高(H)表示空间中任一点位置。
  • 像素坐标系:单位pixel,相机的成像平面,原点在图像的左上方,u轴向右,v轴向下,像素坐标系的单位是像素(pixel),也就是分辨率
  • 图像坐标系:单位mm,和像素坐标系在同一个平面上,原点是相机光轴与成像平面的交点,通常情况下是成像平面的中点或者叫principal point。单位为物理单位。
  • 相机坐标系:单位m,原点是光心,x和y轴与像素坐标系u轴和v轴平行,z轴为相机的光轴。光心到像素平面的距离为焦距f。相机坐标系上的点和成像平面坐标系上的点存在透视投影关系。


无人机 经纬度坐标系 转 大地直角坐标系:


 


 


e 表示地球椭球第一偏心率; N 表示无人机所处
位置的卯酉圈曲率半径。分别表示为:
 


半长轴
RE = 6378137 m,半短轴 RP = 6356752 m

大地直角坐标系 转 经纬度坐标系


 


规定北半球纬度为正,南半球纬度为负; 东经为正,西经为负。迭代 4 ~ 5 次即可保证目标大地高的计算精度达到 0.001 m,目标纬度计算精度达到 0.00001°。

地理坐标系 转 大地直角坐标系

旋转平移矩阵:

机体坐标系 转 地理坐标系

上式我退出了发现好像有問題的,大家可再确认下:
-cos(yaw)*cos(pitch) 應該是 cos(yaw)*cos(pitch) sin(yaw)*sin(pitch) 應該是 sin(yaw)*cos(pitch)

航向 ψ:北偏东为正
俯仰 λ:抬头为正
横滚θ:右倾斜为正


参考转换顺序:


进一步的解释:


矩阵选择:


对右手系而言,定义的正向转动为绕旋转轴的逆时针方向,所以当作用对像(或叫旋转对象)为坐标系中的点或者向量时,应该选用公式(2),但是当旋转的对象是坐标系本身(该坐标系应为参考坐标系),那么应该采用公式(1);反之,在左手系中,定义的正向为顺时针方向,则应该选用相反的公式。
【我们这里是 => 右手坐标系+旋转坐标系本身】

  • 旋转顺序:外旋(z->y->x)、内旋(x->y->z)
  • 根据每次旋转是绕旋转之后的轴旋转,还是固定轴旋转,将欧拉角分为内旋(intrisic roatation)和外旋(extrinsic rotation)
  • R外=R(Z)R(Y)R(X)
  • R内=R(α)R(β)R(γ)

  • 姿态的变换是相对模型本体的,是内旋,这是不容置疑的,即为偏航-俯仰-滚转。
  • 我们需要注意的是,矩阵乘法是外旋。当我们通过矩阵对模型进行姿态变化时,正确的操作是先滚转,再俯仰,最后偏航。
  • 但是为什么先滚转就是对的呢,我的理解是这样的,滚转首先肯定是绕机头轴向的滚转才有实际意义,假如我们先绕y偏航45度,然后绕z或x俯仰,最后发现最后那个轴转都不是正确的滚转。
  • (以上原贴已404。。。就不贴了)
  • 绕大地坐标系旋转(它不动)是矩阵依次右乘,即zyx。
  • 绕载体坐标系旋转(它不动)是矩阵依次左乘,即XYZ。
  • 内在旋转与外在旋转的转换关系:互换第一次和第三次旋转的位置则两者结果相同。
  • 右手系是逆时针为正,左手系是顺时针为正。

相机坐标系 转 机体坐标系


α,β 分别为光电平台采集图像时的方位角与高低角;
注意,上式是默认旋转(-α,-β ),所以注意符号啊。。。

图像坐标系 转 像素坐标系

像素和图像

p对应的成像平面坐标为(x,y),dx和dy表示图像中每个像素在成像平面中的物理尺寸。成像平面的原点在像素坐标系中的坐标为(u0,v0)。

相机坐标系 转 图像坐标系

相机和图像

参考Zc计算:
Zc是目标在相机坐标系在Z轴的投影。

 

世界坐标系 转 相机坐标系

世界坐标系 转 像素坐标系

内参数矩阵K是固定值,由相机标定后确定;外参数矩阵T每张图都不一样,需要提供。

从世界坐标系到像素坐标系之间的转换关系可知,已知世界坐标系下的三维点坐标,只要已知内外参矩阵,就可以求得像素坐标。而如果已知像素坐标,即使已知内外参矩阵,其世界坐标下的三维点也不是唯一确定的,而是空间的一条直线。即单目相机只能测平面信息,而不能获取深度信息。

透视变换下的坐标转换

以上都是刚体变换,但实际摄像头倾斜情况下,会存在透视变换
 

以下内容来自“ 参考文献1”:
  在无人机目标定位过程中,EOSTP跟踪模块通过伺服调节摄像机的方位角和仰角,以保证目标点落在摄像机视场 中心附近。 因此,相机的视距可以有效地反映目标点与无人机之间的位置关系。
  LOS的角度($\rho,\epsilon$)定义如图4所示,$\rho$为LOS矢量与世界坐标系z轴的夹角,$\epsilon$为LOS矢量在$X_wO_wY_w$平面上的投影与世界坐标系x轴的夹角。 $q$和$\epsilon$由无人机的姿态、相机的方位角和仰角决定。
  在图4中,$M_1$和$M_2$分别表示图像平面和物平面。 在M1中,O为图像平面与相机光轴的交点,$O_1X_1$、$O_1Y_1$为图像平面水平和垂直方向的两个轴。P为目标点A在像平面上的投影点,其图像物理坐标为$(x_p, y_p)$。$P ^ { \prime }$是P在$O_w-X_wY_w$平面上的投影。在M2中,$O_2$是相机光轴与物体平面的交点。$O_2X_2$和$O_2Y_2$分别是$O_1X_1$和$O_1Y_1$在$M_2$平面上的投影。$O_c$为相机的镜头中心,$O_cO$为焦距f。$O_c-X_cY_cZ_c$为相机坐标系,$O_w-X_wY_wZ_w$为世界坐标系。
  向量$O_cP$可以在$O_c-X_cY_cZ_c$坐标系下表示为$v _ { c } = ( x _ { p } , y _ { p } , f ) ^ { T }$。
  设$O_cP$在$O_w-X_wY_wZ_w$坐标系下表示为$v _ { c w }$,则$v _ { c w } = R o t _ { B } ^ { W } ( \phi , \gamma , \theta ) \cdot R o t _C^ { B } ( \phi , \gamma , \theta ) \cdot { v_c }$,其中$ R o t _C^ { B } ( \phi , \gamma , \theta )$为摄像机坐标系到无人机坐标系的旋转矩阵,$R o t _ { B } ^ { W } ( \phi , \gamma , \theta ) $为无人机坐标系到世界坐标系的旋转矩阵。 无人机的偏航角$\phi$、俯仰角$\gamma$和滚转角$\theta$都可以通过IMU进行测量。
  设$t _ { z w } = ( 0 , 0 , 1 ) ^ { T }$为坐标轴$O_wZ_w$上的单位向量,则$\cos ( < v _ { c w } , t _ { z w } > ) = \frac { v _ { c w } \cdot t _ {z w } } { | v _ { c w } | |t_{ zw }| }$
  如果$O_cA$和$O_wZ_w$的夹角是$\rho$,那么:$\rho = \arccos ( < v _ { cw } , t _ { w } >)\ \ \ \rho \ \ in\ [ 0 , \pi / 2 )$
  向量$O_cP$在平面$O_cX_cY_c$上的投影为$O_cP ^ { \prime }$, $O_cP ^ { \prime }$在$O_cX_cY_cZ_c$坐标系下可以表示为$v _ { b } = ( x _ { p } , y _ { p } , 0 ) ^ { T }$。
  设$O_cP^ { \prime }$在$O_wX_wY_wZ_w$坐标系下表示为$v _ { b w }$,则: $v _ { b w } = R o t _ { B } ^ { W } ( \phi , \gamma , \theta ) \cdot R o t _ { C } ^ { B } ( \phi , \gamma , \theta ) \cdot { v _b }$
  设$t _ { x w } = ( 1 , 0 , 0 ) ^ { T }$为坐标轴$O_wX_w$上的单位向量。 则: $\cos ( < v _ { b w } , t _ { x w } > ) = \frac { v _ { b w } \cdot t _ { x w } } { | v _ { b w } | | t _ {x w}| }$
  如果$O_cP^ { \prime }$和$O_wX_w$的夹角为$\epsilon$,则$e = \arccos ( < { v }_ { b w } , t _ { x w } > )\ \ \ \epsilon\ \ in ( 0 , 2 \pi ]$
  (就没了???O2平面的呢???)


参考:
1、无人机单载荷目标检测及定位联合实现方法_王宁
2、基于电光稳定和跟踪平台的无人驾驶飞行器的目标位置
3、针孔相机模型 | 一索哥传奇
4、https://python.iitter.com/other/197329.html

坐标系系统

常用坐标系椭球参数

克拉索夫斯基椭球1975国际椭球WGS84椭球国家2000坐标系椭球
长半轴(a)6378245637814063781376378137
短半轴(b)6356863.01877304736356755.2881575286356752.31424517956356752.3141403558

扁率:$$\partial=\frac{a-b}b$$

第一偏心率:$$e=\frac{\sqrt{a^2-b^2}}a$$

第二偏心率:$$e^{’}=\frac{\sqrt{a^2-b^2}}b$$

通用横轴墨卡托UTM

  • 统一横轴墨卡托投影系统(Universal Transverse Mercator,UTM)
  • 60个精度区,其中 58 个区的东西跨度为 6°。
  • 20个纬度区,每个区的南北跨度为 8°。
  • 坐标格式:经度区纬度区以东以北,其中以东表示从经度区的中心子午线的投影距离,而以北表示距离赤道的投影距离。单位为
  • 坐标轴规定:

    • X:从西向东递增,称为“东移”
    • Y:从南到北递增,称为“北”
    • Z:从下到上增加,称为“高程”
    • B:从正X轴绕Z轴顺时针增大

NED

  • 北东地坐标系(导航坐标系)

    • N——北轴指向地球北;
    • E——东轴指向地球东;
    • D——地轴垂直于地球表面并指向下。

坐标转换公式

WGS84 <–> UTM

https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system

坐标转换软件

COORD GM2.0 (可转2000坐标)终结版.zip - 蓝奏云

三维画图软件

Vectary - Build interactive 3D and AR solutions online

测试代码

TODO

资料推荐

1、这个PPT很不错:Camera Calibration

题外话

1、注意OpenCV中图像的x、y和w、h的顺序。

# 图像点坐标顺序:x, y, z; 且:
# row = height = Point.y
# col = width  = Point.x# 图像宽高顺序:height, width, channel; 且:
h = img.shape[0] - 1  # 高度
w = img.shape[1] - 1  # 宽度

0

相关文章:

【教程】详解相机模型与坐标转换

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 由于复制过来&#xff0c;如果有格式问题&#xff0c;推荐大家直接去我原网站上查看&#xff1a; 相机模型与坐标转换 - 生活大爆炸 目录 经纬度坐标系 转 地球直角坐标系大地直角坐标系 转 经纬度坐标系地理坐标…...

171基于matlab的随机共振微弱信号检测

基于matlab的随机共振微弱信号检测&#xff0c;随机共振描述了过阻尼布朗粒子受周期性信号和随机噪声的共同作用下,在非线性双稳态系统中所发生的跃迁现象. 随机共振可用于弱信号的检测。程序已调通&#xff0c;可直接运行。...

petalinux_zynq7 驱动DAC以及ADC模块之三:实现C语言API并编译出库被python调用

前文&#xff1a; petalinux_zynq7 C语言驱动DAC以及ADC模块之一&#xff1a;建立IPhttps://blog.csdn.net/qq_27158179/article/details/136234296petalinux_zynq7 C语言驱动DAC以及ADC模块之二&#xff1a;petalinuxhttps://blog.csdn.net/qq_27158179/article/details/1362…...

NXP实战笔记(五):S32K3xx基于RTD-SDK在S32DS上配置ADC的硬件触发同步采样与软件采样过程

目录 1、概述 1.1、软件触发 1.2、硬件触发 - BCTU 1.3、硬件触发 - TRGMUX 1.4、ADC的校准 1.5、ADC时钟配置 2、BTCU硬件触发ADC的SDK配置 3、软件触发ADC 3.1、选择相应Port作为ADC的输入 3.2、ADC配置 3.3、代码示例 1、概述 恩智浦 S32K3xx 系列汽车微控制器…...

pikachu靶场-CSRF

CSRF: 介绍&#xff1a; Cross-site request forgery简称为"CSRF”。 在CSF的攻击场景中攻击者会伪造一个请求&#xff08;这个请求一般是一个链接&#xff09; 然后欺骗目标用户进行点击&#xff0c;用户一旦点击了这个请求&#xff0c;整个攻击也就完成了&#xff0…...

【结合OpenAI官方文档】解决Chatgpt的API接口请求速率限制

OpenAI API接口请求速率限制 速率限制以五种方式衡量&#xff1a;RPM&#xff08;每分钟请求数&#xff09;、RPD&#xff08;每天请求数&#xff09;、TPM&#xff08;每分钟令牌数&#xff09;、TPD&#xff08;每天令牌数&#xff09;和IPM&#xff08;每分钟图像数&#x…...

C语言实现基础数据结构——栈

目录 栈 栈的实现 数组栈 数组栈的实现 栈的初始化 栈的销毁 数据入栈 判断栈是否为空 数据出栈 获取栈顶元素 获取栈内数据个数 项目实现 栈的基础练习 有效的括号 栈 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的…...

船舶制造5G智能工厂数字孪生可视化平台,推进船舶行业数字化转型

船舶制造5G智能工厂数字孪生可视化平台&#xff0c;推进船舶行业数字化转型。随着数字化时代的到来&#xff0c;船舶行业正面临着前所未有的机遇与挑战。为了适应这一变革&#xff0c;船舶制造企业需要加快数字化转型的步伐&#xff0c;提高生产效率、降低成本并增强市场竞争力…...

【网络编程】okhttp深入理解

newCall 实际上是创建了一个 RealCall 有三个参数&#xff1a;OkHttpClient&#xff08;通用配置&#xff0c;超时时间等&#xff09; Request(Http请求所用到的条件&#xff0c;url等) 布尔变量forWebSocket&#xff08;webSocket是一种应用层的交互方式&#xff0c;可双向交互…...

大功率厚膜电阻器制造 – 优化性能?

通过优化工业大功率电阻器制造工艺&#xff0c;制造商可以提高电阻器的性能和可靠性、容差、额定电压、TCR、稳定性和额定功率。 在本文中&#xff0c;我们将介绍工业功率电阻器的制造过程。我们讨论了材料选择和生产技术及其对性能的潜在影响。 完美的电阻器 在其整个使用寿…...

ElasticStack安装(windows)

官网 : Elasticsearch 平台 — 大规模查找实时答案 | Elastic Elasticsearch Elastic Stack(一套技术栈) 包含了数据的整合 >提取 >存储 >使用&#xff0c;一整套! 各组件介绍: beats 套件:从各种不同类型的文件/应用中采集数据。比如:a,b,cd,e,aa,bb,ccLogstash:…...

gitlab的使用

前一篇文章我们已经知道Git人人都是中心&#xff0c;那他们怎么交互数据呢&#xff1f; • 使用GitHub或者码云等公共代码仓库 • 使用GitLab私有仓库 目录 一、安装配置gitlab 安装 初始化 这里初始化完成以后需要记住一个初始密码 查看状态 二、使用浏览器访问&#xf…...

基于springboot+vue的植物健康系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…...

Python爬虫实战入门:爬取360模拟翻译(仅实验)

文章目录 需求所需第三方库requests 实战教程打开网站抓包添加请求头等信息发送请求&#xff0c;解析数据修改翻译内容以及实现中英互译 完整代码 需求 目标网站&#xff1a;https://fanyi.so.com/# 要求&#xff1a;爬取360翻译数据包&#xff0c;实现翻译功能 所需第三方库 …...

微服务-微服务API网关Spring-clould-gateway实战

1. 需求背景 在微服务架构中&#xff0c;通常一个系统会被拆分为多个微服务&#xff0c;面对这么多微服务客户端应该如何去调用呢&#xff1f; 如果根据每个微服务的地址发起调用&#xff0c;存在如下问题&#xff1a; 1.客户端多次请求不同的微服务&#xff0c;会增加客户端…...

ECMAScript modules规范示例详解

ECMAScript modules&#xff08;简称 ES modules&#xff09;是JavaScript的标准模块系统。每个模块都是一个独立的JavaScript文件&#xff0c;可以在其中定义导出的变量、函数或类&#xff0c;并从其他模块中导入这些变量、函数或类。以下是ES modules规范的一些示例和详解&am…...

【OpenFeign常用配置】

OpenFeign常用配置 快速入门&#xff1a;1、引入依赖2、启用OpenFeign 实践1、引入依赖2、开启连接池功能3、模块划分4、日志5、重试 快速入门&#xff1a; OpenFeign是一个声明式的http客户端&#xff0c;是spring cloud在eureka公司开源的feign基础上改造而来。其作用及时基于…...

第2.1章 StarRocks表设计——概述

注&#xff1a;本篇文章阐述的是StarRocks-3.2版本的表设计相关内容。 建表是使用StarRocks非常重要的一环&#xff0c;规范化的表设计在某些场景下能使查询性能有数倍的提升。StarRocks的表设计涉及到的知识点主要包括数据表类型、数据分布&#xff08;分区分桶及排序键&#…...

WooCommerce商品采集与发布插件

如何采集商品或产品信息&#xff0c;并自动发布到Wordpress系统的WooCommerce商品&#xff1f; 推荐使用简数采集器&#xff0c;操作简单方便&#xff0c;且无缝衔接WooCommerce插件&#xff0c;快速完成商品的采集与发布。 简数采集器的智能自动生成采集规则和可视化操作功能…...

select滑动分页请求数据

需求背景 Antd 的 select 组件支滑动分页获取后端数据 实现滑动加载数据 定义变量 const allLoadedRef useRef<boolean>(true); // 是否触底 const [current, setCurrent] useState<number>(1); // 当前页 const [list, setList] useState([]); // 列表定义…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...