世界坐标系、相机坐标系、图像物理坐标系、像素平面坐标系

news2024/11/21 18:40:44

坐标系及其转换在计算机视觉领域占据核心地位。理解如何从一个坐标系转换到另一个坐标系,不仅是理论上的需要,也是实际应用中不可或缺的技能。

一、世界坐标系的定义

世界坐标系是一个全局的坐标系统,用于定义场景中物体的位置。在这个坐标系中,每个物体的位置都是相对于一个全局原点来描述的,单位是m,任意一点的坐标表示为P_{w} = \left [ X_{w}, Y_{w}, Z_{w} \right ]^{T},也称为测量坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置,世界坐标系的位置可以根据实际情况自由确定。

二、相机坐标系的定义

相机坐标系是相对于相机的位置来定义物体的坐标系统。在这个坐标系中,原点通常位于相机的光心,即相机镜头的中心。Z轴通常与相机的观察方向一致,与成像平面垂直,X和Y轴定义相机平面,就是以光圈O为原点的右手坐标系,与世界坐标系位于同一空间,只是位置和方向不同,单位是m,任意一点的坐标表示为P_{c} = \left [ X_{c}, Y_{c}, Z_{c} \right ]^{T}

三、图像物理坐标系的定义

如二中图所示,物理成像平面上的坐标系就是图像物理坐标系,是一个二维坐标系,原点在成像平面的中心,单位是mm,相当于用物理单位描述像素的位置,其中任意一点的坐标可表示为p = \left [ x, y \right ]^{T}

四、像素平面坐标系的定义

像素坐标系是图像上的二维坐标系统,用于定义图像上每个像素的位置。原点通常位于图像的左上角,X轴从左到右延伸,Y轴从上到下延伸,单位是像素,从图像物理坐标系到像素平面坐标系存在一个缩放和平移,其中任意一点的坐标表示为p = \left [ u, v \right ]^{T}

五、世界坐标系到像素平面坐标系的转换

5.1 先从世界坐标系转换到相机坐标系

二者处于同一空间,所以只需要平移和旋转,通过W2C外参矩阵完成,假设世界坐标系中的点为\left ( X_{w}, Y_{w}, Z_{w} \right ),相机坐标系中的点为\left ( X_{c}, Y_{c}, Z_{c} \right ),转换过程如下:

                                                   \begin{pmatrix} X_{c}\\ Y_{c}\\ Z_{c}\\ 1 \end{pmatrix}= W2C\begin{pmatrix} X_{w}\\ Y_{w}\\ Z_{w}\\ 1 \end{pmatrix} 

其中:

                                                         W2C = \begin{pmatrix} R &T \\ 0& 1 \end{pmatrix}

R是3*3的旋转矩阵,描述相机的旋转;

T是3*1的平移向量,描述相机在世界坐标系中的位置;

从世界坐标系转换到相机坐标系最终的转换公式如下(涉及到齐次坐标,有空更新):

                                                  \begin{pmatrix} X_{c}\\ Y_{c}\\ Z_{c}\\ 1 \end{pmatrix}= \begin{pmatrix} R &T \\ 0& 1 \end{pmatrix}\begin{pmatrix} X_{w}\\ Y_{w}\\ Z_{w}\\ 1 \end{pmatrix}

这一步完成后,就得到点在相机坐标系中的坐标\left ( X_{c}, Y_{c}, Z_{c} \right )

5.2 从相机坐标系到图像物理坐标系

相似那部分重点查看,这篇文章。

根据相似三角形得到的关系式如下:

                                                         \frac{Z_{c}}{f} = \frac{X_{c}}{x} = \frac{Y_{c}}{y}

                                                      x = f\frac{X_{c}}{Z_{c}} , y = f\frac{Y_{c}}{Z_{c}}

齐次坐标表示:

                                        Z_{c}\begin{pmatrix} x\\ y\\ 1 \end{pmatrix}= \begin{pmatrix} f &0&0&0 \\ 0&f &0&0 \\ 0&0 &1&0 \end{pmatrix}\begin{pmatrix} X_{c}\\ Y_{c}\\ Z_{c}\\ 1 \end{pmatrix}

5.3 从图像物理坐标系到像素坐标系

                                          

像素坐标系和图像坐标系都在成像平面上,只是各自的原点和度量单位不一样。

图像坐标系的原点为相机光轴与成像平面的交点,通常情况下是成像平面的中点;

像素坐标系的原点在成像平面的左上角;
图像坐标系的单位是mm,是物理单位,而像素坐标系的单位是pixel,我们平常描述一个像素点都是几行几列。所以这两者之间的转换关系如下:

齐次坐标表示:

                                                        \begin{pmatrix} u\\ v \\ 1 \end{pmatrix}= \begin{pmatrix} \frac{1}{dx} &0 & u_{0}\\ 0&\frac{1}{dy} &v_{0} \\ 0 &0 &1 \end{pmatrix}\begin{pmatrix} x\\ y \\ 1 \end{pmatrix}

将以上步骤结合在一起,可以得到从世界坐标系到图像坐标系的完整转换公式:

综上所述,存在的疑惑就是:

1、世界坐标系怎么确定?

分不分静态的相机和运动的相机?

2、相机内参,外参怎么样计算?

相机内参的获取通常通过相机标定过程来实现。‌‌

相机内参的定义和作用

相机内参是与相机自身特性相关的参数,主要包括参数矩阵(如fx, fy, cx, cy)以及畸变参数(如k1, k2, k3, p1, p2)。这些参数在相机出厂时通常已被标定,并存储在设备的Flash中。,帮助将三维世界坐标转换到二维图像坐标。

获取相机内参的方法

  1. 通过相机标定获取内参‌:最常见的获取相机内参的方法是通过相机标定。标定过程通常使用棋盘格等标定图案,通过图像处理和数学计算来估算内参。具体步骤包括拍摄多张标定图案的图片,使用标定算法(如张正友标定法)计算内参。

  2. 使用现成的标定工具或软件‌:许多相机厂商提供了标定工具或软件,用户可以通过这些工具进行标定以获取相机的内参。例如,OpenCV提供了丰富的相机标定函数,用户可以通过编写代码实现标定过程。

  3. 通过API获取‌:一些相机设备在出厂时已经标定好内外参,并存储在设备的Flash中。用户可以通过调用设备的API获取这些参数,而无需重新标定。

参考:

https://zhuanlan.zhihu.com/p/128155013

https://blog.csdn.net/m0_51661400/article/details/141395396

世界坐标系到像素坐标系的转换_世界坐标系转相机坐标系-CSDN博客

https://zhuanlan.zhihu.com/p/356546894

https://blog.csdn.net/mzpmzk/article/details/64924017

https://zhuanlan.zhihu.com/p/681072094

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习笔记——聚类算法(Kmeans、GMM-使用EM优化)

本笔记介绍机器学习中常见的聚类算法(Kmeans、GMM-使用EM优化)。 文章目录 聚类K-Means工作原理特点 K-Medoids工作原理特点 Mini-Batch K-Means工作原理特点 K-Means(重要)工作原理特点 总结K的选值1. 肘部法则(Elbow…

浅议Flink中的通讯工具: Akka

在Flink中,各个组件之间需要频繁交换数据和控制信息。Flink选择了基于Actor模型的Akka框架作为通信基础。 Akka是什么 Actor模型 Actor模型是用于单个进程中并发的场景。 在Actor模型中: ActorSystem负责管理actor生命周期 将每个实体视为独立的 Ac…

如何在react中使用react-monaco-editor渲染出一个编辑器

一、效果展示 二、基于vite配置 1.首先安装react-monaco-editor和monaco-editor包 npm add react-monaco-editor npm i monaco-editor 2.其次创建一个单独的文件(此处是tsx、直接用app或者jsx也行) import { useState, useEffect } from react impo…

孙玲:从流水线工人到谷歌程序员

这是《开发者说》的第24期,本期我们邀请的开发者是孙玲,她出生于湖南娄底一个贫穷的农村家庭,2009年高考落榜,她去了深圳一家电子厂,在流水线上给电池喷码,每天12个小时轮班,月薪2300&#xff0…

kali搭建pikachu靶场

前言: 总所周知搭个网站需要有apachemysqlphp,Apache是一个开源的Web服务器软件, MySQL是一种关系型数据库管理系统(数据库),PHP是一种在服务器上执行的脚本语言 文章内容来自:【黑帽编程与攻…

android 使用MediaPlayer实现音乐播放--获取音乐数据

前面已经添加了权限&#xff0c;有权限后可以去数据库读取音乐文件&#xff0c;一般可以获取全部音乐、专辑、歌手、流派等。 1. 获取全部音乐数据 class MusicHelper {companion object {SuppressLint("Range")fun getMusic(context: Context): MutableList<Mu…

VMware Workstation 17.6.1

概述 目前 VMware Workstation Pro 发布了最新版 v17.6.1&#xff1a; 本月11号官宣&#xff1a;针对所有人免费提供&#xff0c;包括商业、教育和个人用户。 使用说明 软件安装 获取安装包后&#xff0c;双击默认安装即可&#xff1a; 一路单击下一步按钮&#xff1a; 等待…

Methode Electronics EDI 需求分析

Methode Electronics 是一家总部位于美国的全球性技术公司&#xff0c;专注于设计和制造用于多个行业的电子和电气组件&#xff0c;产品涵盖汽车、工业、电信、医疗设备以及消费电子等多个领域&#xff0c;提供创新的解决方案。 填写Methode_EDI_Parameters_Template Methode_…

uniapp自动注册机制:easycom

传统 Vue 项目中&#xff0c;我们需要注册、导入组件之后才能使用组件。 uniapp 框架提供了一种组件自动注册机制&#xff0c;只要你在 components 文件夹下新建的组件满足 /components/组件名/组件名.vue 的命名规范&#xff0c;就能直接使用。 注意&#xff1a;组件的文件夹…

【Vue】Vue3.0(二十六)Vue3.0中的作用域插槽

上篇文章 【Vue】Vue3.0&#xff08;二十五&#xff09;Vue3.0中的具名插槽 的概念和使用场景 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月20日17点30分 文章目录 概念使用场景示…

C语言第14节:字符函数和字符串函数

1. 字符分类函数 C语言中有一系列的函数是专门做字符分类的&#xff0c;也就是一个字符是属于什么类型的字符的。这些函数的使用都需要包含一个头文件是<ctype.h> <ctype.h>头文件中的字符分类函数提供了一组用于检查单个字符特性的函数。这些函数接收一个字符&a…

IDEA怎么定位java类所用maven依赖版本及引用位置

在实际开发中&#xff0c;我们可能会遇到需要搞清楚代码所用依赖版本号及引用位置的场景&#xff0c;便于排查问题&#xff0c;怎么通过IDEA实现呢&#xff1f; 可以在IDEA中打开项目&#xff0c;右键点击maven的pom.xml文件&#xff0c;或者在maven窗口下选中项目&#xff0c;…

使用vscode+expo+Android夜神模拟器运行react-native项目

1.进入夜神模拟器安装路径下的bin目录 2.输入命令&#xff0c;连接Android Studio 启动夜神模拟器后&#xff0c; 打开安装目录的bin文件夹执行下面的命令&#xff0c;只需执行一次&#xff09; nox_adb.exe connect 127.0.0.1:62001adb connect 127.0.0.1:62001 3.运行项目…

IPv6 NDP 记录

NDP&#xff08;Neighbor Discovery Protocol&#xff0c;邻居发现协议&#xff09; 是 IPv6 的一个关键协议&#xff0c;它组合了 IPv4 中的 ARP、ICMP 路由器发现和 ICMP 重定向等协议&#xff0c;并对它们作出了改进。该协议使用 ICMPv6 协议实现&#xff0c;作为 IPv6 的基…

个人全栈开发微信小程序上线了(记日记)

个人开发的全栈项目&#xff0c;《每日记鸭》微信小程序上线了&#xff01; 主要是技术栈&#xff1a;uniapp,koa2,mongodb,langchian&#xff1b; 感兴趣的小伙伴可以来捧捧场&#xff01;

用源码编译虚幻引擎,并打包到安卓平台

用源码编译虚幻引擎&#xff0c;并打包到安卓平台 前往我的博客,获取更优的阅读体验 作业内容: 源码编译UE5.4构建C项目&#xff0c;简单设置打包到安卓平台 编译虚幻 5 前置内容 这里需要将 Epic 账号和 Github 账号绑定&#xff0c;然后加入 Epic 邀请的组织&#xff0c…

如何更改手机GPS定位

你是否曾想过更改手机GPS位置以保护隐私、玩游戏或访问受地理限制的内容&#xff1f;接下来我将向你展示如何使用 MagFone Location Changer 更改手机GPS 位置&#xff01;无论是在玩Pokmon GO游戏、发布社媒贴子&#xff0c;这种方法都快速、简单且有效。 第一步&#xff1a;下…

如何在 Ubuntu 上使用 Docker 部署 LibreOffice Online

简介 LibreOffice Online&#xff08;也称为Collabora Online&#xff09;是一个开源的在线办公套件&#xff0c;它提供了与LibreOffice桌面版相似的功能&#xff0c;但完全在云端运行。这意味着用户可以通过浏览器访问和编辑文档&#xff0c;而无需在本地计算机上安装任何软件…

Uniapp运行环境判断和解决跨端兼容性详解

Uniapp运行环境判断和解决跨端兼容性 开发环境和生产环境 uniapp可通过process.env.NODE_ENV判断当前环境是开发环境还是生产环境&#xff0c;一般用于链接测试服务器或者生产服务器的动态切换。在HX中&#xff0c;点击运行编译出来的代码是开发环境&#xff0c;点击发行编译…

华为Ensp模拟器配置OSPF路由协议

目录 简介 实验步骤 Pc配置 路由器配置 OSPF配置 交换机配置 简介 开放式最短路径优先 (OSPF) 协议深度解析 简介 开放式最短路径优先&#xff08;Open Shortest Path First, OSPF&#xff09;是一种内部网关协议&#xff08;IGP&#xff09;&#xff0c;用于在自治系统…