相机标定基础--相关坐标系

news/2023/10/4 0:22:22

目录

1. 相机标定的四个坐标系

1.1 世界坐标系

1.2 相机坐标系

1.3 图像平面坐标系

1.4 像素坐标系

2. 坐标系之间的转换关系

2.1 世界坐标系与相机坐标系的变换

2.2 相机坐标系与图像平面坐标系的变换

2.3 图像平面坐标系与像素坐标系的变换


1. 相机标定的四个坐标系

如图1.所示,为了能够更好的描述和计算相机标定过程中图像上的像素点与空间三维点之间的关系,首先定义了四个坐标系:世界坐标系O_w-X_wY_wZ_w、相机坐标系O_c-X_cY_cZ_c、图像平面坐标系o'-xy、像素坐标系o-uv

图1. 相机标定的四个坐标系

 

1.1 世界坐标系

设置世界坐标系是为了统一描述真实三维世界中物体的位置,包括相机的位置、特征目标的位置等。在实际应用中世界坐标系是以空间中任意一点作为原点O_w建立的笛卡尔直角三维坐标系。

1.2 相机坐标系

相机坐标系O_c-X_cY_cZ_c同样是笛卡尔直角坐标系。相机坐标系是空间三维信息与二维图像信息之间的关键媒介,如图1所示,原点O_c建立在相机的光心,Z_c轴为相机光轴,方向向外。X_cO_cY_c平面垂直于想相机光轴,X_c轴平行于图像平面的横向。

1.3 图像平面坐标系

图像平面坐标系用于描述特征点在图像平面上的位置坐标,坐标单位一般为毫米。如图1所示,图像平面坐标系是在图像平面上建立二维坐标系,坐标原点o'为相机坐标中Z_c轴与图像平面的交点,x轴、y轴分别平行于相机坐标系的X_c轴、Y_c轴。图像平面坐标系的原点o'与相机坐标系的原点O_c之间的距离为相机的焦距f

1.4 像素坐标系

相机采集的图像一般为二维数字图像,以像素矩阵的形式存储,每个元素为该像素的图像灰度值。图像平面坐标系用于描述图像点在图像平面的位置坐标,像素坐标系描述该点在像素矩阵中的位置。如图1所示,像素坐标系建立在图像平面上,坐标原点o建立在图像平面的左上角,u轴平行于图形平面坐标系的x轴,v轴平行于图形平面坐标系的y轴。因此,坐标(u,v)分别表示像素点在像素矩阵中的行和列。

2. 坐标系之间的转换关系

从空间三维点P的世界坐标系(X_w,Y_w,Z_w,1)^T到其对应的在图像平面的投影点p的像素坐标(u,v,1)^T之间的变换可以分为三个变换,如图2所示。

图2. 世界坐标与像素坐标之间的变换

2.1 世界坐标系与相机坐标系的变换

同为三维坐标系的世界坐标系与相机坐标系之间的变换可以使用旋转矩阵和平移矩阵进行描述。假设空间三维点P的相机坐标为(X_c,Y_c,Z_c,1)^T,则该点的世界坐标与相机坐标之间的关系可以表示为:

\left [ \begin{matrix} X_c\\ Y_c\\ Z_c\\ 1 \end{matrix}\right ]=\left [ \begin{matrix} R & t \\ 0 & 1 \end{matrix} \right ] \left [ \begin{matrix} X_w\\ Y_w\\ Z_w\\ 1 \end{matrix} \right ]

 其中,R是旋转矩阵,3\times 3的矩阵;t是平移矩阵,3\times 1的矩阵。

2.2 相机坐标系与图像平面坐标系的变换

图3. 相机坐标系与图像平面坐标系变换示意图

 

由于相机坐标系的X_c轴和Y_c轴分别与图像平面坐标系的x轴和y轴平行,因此点P的相机坐标(X_c,Y_c,Z_c,1)^T与其对应的图像投影点p的图像平面坐标(x,y,1)^T之间只存在一个比例关系,此比例关系与相机焦距fP点的Z_c坐标有关。

P点的相机坐标与其对应的投影点p的图像平面坐标之间的关系为:

s\left [ \begin{matrix} x\\ y\\ 1 \end{matrix} \right ]=\left [ \begin{matrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{matrix} \right ]\left [ \begin{matrix} X_c\\ Y_c\\ Z_c\\ 1 \end{matrix} \right ]

 其中,s是比例因子,不为0。

2.3 图像平面坐标系与像素坐标系的变换

图像平面坐标系的原点是光轴在图像平面上的投影点,假设该点在像素坐标系中的坐标为(u_0,v_0)。三维点P对应的投影点p的图像平面坐标与其像素坐标之间的关系为:

\left [ \begin{matrix} u\\ v\\ 1 \end{matrix} \right ]=\left [ \begin{matrix} \frac{1}{dX} & 0 &u_0 \\ 0 & \frac{1}{dY} &v_0 \\ 0& 0 &1 \end{matrix} \right ]\left [ \begin{matrix} x\\ y\\ 1 \end{matrix} \right ]

其中,dX是像素在图像平面坐标系的x轴方向上的物理尺寸,dY是像素在图像平面坐标系的y轴方向上的物理尺寸。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.yaotu.net/news/4657.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis-Plus——实现乐观锁

MyBatis-Plus——实现乐观锁乐观锁——MyBatis-Plus实现1. 主要适用场景:2. 乐观锁实现方式:3. 乐观锁实现流程3.1 修改实体类属性3.2 注册乐观锁插件3.3 测试乐观锁——MyBatis-Plus实现 针对于某一问题的解决方案,多线程或并发操作中产生的一些问题——丢失更新 …

C++多态

📋 个人简介 💖 作者简介:大家好,我是菀枯😜 🎉 支持我:点赞👍收藏⭐️留言📝 💬格言:不要在低谷沉沦自己,不要在高峰上放弃努力&am…

简单几步,爬取网页图片

简单几步,爬取网页图片 目录简单几步,爬取网页图片前言1 爬取原理讲解1.1 查看网页源代码1.2 分析网页源码并制定对应的爬取方案1.3 完善爬取流程和细节2 实战演练2.1 PyCharm下载安装2.2 安装相应依赖包(类库)2.3 编写代码2.4 补充细节和优化2.5 运行测…

linux shell 编程之变量总结

一、什么是Shell 变量 变量用于存储和管理临时的数据, 这些数据都是在运行内存中的; 二、变量的分类 shell中变量大致可以分为下面几类: 系统环境变量自定义变量特殊符号变量系统环境变量 是由系统提供的共享变量。是linux系统加载Shell的配置文件中定…

slam 14讲笔记

中秋抽时间混囵吞枣看了slam 14讲的前一半,稍微记录下. slam的框架 视觉里程计, 估计相邻两帧图像之间的位姿(特帧匹配)以及局部地图(又称为前端)后端优化, 主要利用前端返回的一些稀疏点,相机初步位姿, 传感器等信息, 回环检测,使用非线性优化来估计全局的位姿和地图. 数学知…

【手把手带你学JavaSE系列】String类(上篇)

目录一、字符串的构造方法二、String对象的比较1.比较是否引用同一个对象。2. boolean equals(Object anObject) 方法:按照字典序比较。3. int compareTo(String s) 方法4.int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是…

django项目实战基于Python实现的衣物捐赠系统

💖💖更多项目资源,最下方联系我们✨✨✨✨✨✨ 目录 Python项目介绍 资料获取 Python项目介绍 计算机毕业设计python毕设项目(pythonmysql) 旧衣物捐赠系统-IT实战课堂_哔哩哔哩_bilibili计算机毕业设计python毕设项目(pythonmysql) 旧衣…

刘二大人 PyTorch深度学习实践 笔记 P10 卷积神经网络(基础篇)

刘二大人 PyTorch深度学习实践 笔记 P10 卷积神经网络(基础篇)1、基本概念2、卷积I 卷积运算过程II paddingIII stride2 步长为2,有效降低图像的W HIV 下采样 max pooling layer 最大池化层,没有w,2 * 2的max pooling&…

【小月电子】安路国产FPGA开发板系统学习教程-LESSON7串口通信

串口通信例程讲解若要观看该博客配套的视频教程,可点击此链接根据多年工作经验,总结出的FPGA的设计流程,概括起来总共有以上12步,其中根据项目难易度可省去其中一些步骤。比如非常简单的项目,我们可以省去虚线框里面的…

使用 SwiftUI 的 Eager Grids

介绍 早在 2020 年,我们就拥有了在 SwiftUI(LazyVGrid 和 LazyHGrid)中绘制网格的新视图控件。两年后,我们又获得了另一种在网格(Grid)中显示视图的视图控件。但是,这些新增功能非常不同&#…

深入源码!详解MultipartFile

MultipartFile大家想必不陌生,在SpringMVC的控制器方法中,我们可以通过MultipartFile自动注入上传的文件。我们从一个小案例引入,深入了解下MultipartFile 1、一个小问题 此问题来自真实案例,大家可以先想想当我们通过生产者端 …

【JAVA】线程不安全问题以及相关解决方案

1.造成线程不安全的常见5点因素 2.如何解决线程不安全 线程不安全,就是在多线程运行的结束后,结果或者过程并不按照我们预期的那样执行,则为线程不安全,即产生了BUG 出现以下5种情况,一般都会造成线程不安全 1.抢占式…

【SpringBoot】之自定义 Filter 过滤器

目录 一、Filter 介绍二、Filter 的拦截过程三、自定义 Filter 一、Filter 介绍 Filter 过滤器主要用来过滤用户的请求,允许用户对请求进行前置处理和后置处理,比如实现 URL 级别的权限控制、过滤非法请求等等。Filter 过滤器是面向切面编程&#xff08…

操作系统随记 —— 中断与异常

操作系统系列文章:👉 目录 👈 文章目录一、用户态与核心态二、中断与异常1、中断与异常的定义2、中断处理的过程硬件部分软件部分一、用户态与核心态 为了避免操作系统及其关键数据受到用户程序的破坏,通常需要将 CPU 的执行状态…

【CSDN高校社区无锡学院】# 新学期,新Flag # 开学季征文活动

校风:艰苦朴素、勤奋好学、自强不息、追求真理 前言 少年易老学难成,一寸光阴不可轻。未觉池塘春草梦,阶前梧叶已秋声。 活动介绍 暑期已经结束,你是否准备好踏上大学的新征程!在新征程的起点,我们一起扬帆起航。 期待是扬帆起…

面试突击82:SpringBoot 中如何操作事务?

在 Spring Boot 中操作事务有两种方式:编程式事务或声明式事务,接下来我们一起来看二者的具体实现。 1.编程式事务 在 Spring Boot 中实现编程式事务又有两种实现方法:使用 TransactionTemplate 对象实现编程式事务; 使用更加底层的 TransactionManager 对象实现编程式事务…

重装系统踩坑指南

目录1. 使用网上提供的U盘制作工具(不建议)2. 使用纯净版windows系统2.1 下载纯净版镜像2.2 下载刻录软件2.3 制作U盘启动盘2.4 开始安装2.5 完善驱动事情起因: 虚拟机出现了问题,一直卡在启动界面转圈圈。昨天还好好的,今天就出问题。后面忍痛吧Linux镜…

【uiautomation】获取微信好友名单,可指定标签 全部

前言 接到了一个需求:现微信有8000好友,需要给所有好友发送一则一样的消息。网上搜索一番后,发现uiautomation 可以解决该需求,遂有此文。这是第一篇,获取全部好友 代码在文章末尾,自取~ 微信群发消息链接 …

【云开发】小程序端中使用云函数的介绍

文章目录云函数云函数基本介绍云函数基本使用云函数传递参数云函数获取openID云函数操作数据库云函数发送http请求云函数 云函数基本介绍 云函数即在云端(服务器端)运行的函数: 在物理设计上,一个云函数可由多个文件组成,占用一定量的CPU 内存等计算资…

GitHub操作之跨团队操作

这里可以搜索库,可以通过库名进行搜索,在前面加上账号可实现精准搜索 也可以通过链接访问 这里我们随便选择一个,然后点击fork,就可以把库添加到自己的目录下,同时也可以看到相关的信息,这里不再演示。 然…
最新文章