相机的坐标系转换(1)

2023-11-03

前言

常言道,工欲善其事,必先利其器。如欲明其理,必先定其义。





后一句是我编的。
这里写图片描述

不过,这句话还是有道理的。如果要想明白相机的坐标系之间的转换,那么必须明白相机有哪几个坐标系,并对它们下一个明确的定义。只有这样,我们接下来的工作才好开展。

正文

相机的坐标系,总共有四个,有的文章里面说是三个。不管三个,还是四个,说的都是一样的意思。在本篇文章里,我们按照四个坐标系来讲。现在,我们把它们的定义摆出来:

  1. 图像的像素坐标系(u,v)
    以图像的左上方为原点,u轴平行于图像面水平向右,v轴垂直于u轴向下,此坐标系的单位为像素;
  2. 图像的物理坐标系(x,y)
    以相机的光轴与图像平面交点为原点,x轴方向与u轴方向一致,y轴方向与v轴方向一致,以毫米为单位,用物理单位表示图像像素位置;
  3. 相机坐标系(Xc,Yc,Zc)
    以相机的光心作为原点,Zc轴与光轴重合,并垂直于成像平面,且取摄影方向为正方向;Xc、Yc轴分别与图像物理坐标系的x,y轴平行;相机坐标系的原点与图像物理坐标系原点之间的距离为相机的焦距f,以毫米为单位;
  4. 世界坐标系(Xw,Yw,Zw)
    三维世界的全局坐标系,以(Xw,Yw,Zw)来表示,满足右手法则;

    在对四个坐标系有了明确的定义之后,我们就可以开始对它们之间的关系做一些研究。
    我们说的四个坐标系全在下面这张图里,虽然地方小了点儿,但坐标系一个不少,大家可以看一眼,直观地了解一下,虽然并没什么用。
    这里写图片描述


1.图像像素坐标系与物理坐标系之间的转换

这里写图片描述
如前文所述,我们设 o0 点为像素坐标系的原点,它位于图像的左上顶点。u轴向右为正方向,v轴向下为正方向。
[ps一句:左上角作为像素坐标的原点,这是一种人为的设置。换句话说,我们也可以设置其它顶点作为原点。例如,在opencv里面,像 素的原点即为左上角;而在kinect拍到的图片里,则左下角为原点。有涉及到这方面的小伙伴可以做笔记了,重点已经画出来了。]
与像素坐标系原点不同,图像物理坐标系原点的定义是只此一家,别无分店。我们给物理坐标系原点起个外号: o1 。 设 o1 的像素坐标值为 (uo,vo) 。很显然,它们之间的转换关系如下:

u=xdx+u0v=ydy+v0
(1)
不过,事情并不是这么简单,由于各种原因,像素在实际当中并非方方正正的正方形,而是菱形,如下图所示。
这里写图片描述
这样一来,为了追求更高的精度,我们需要将这个因素考虑进去,当然,没把这个因素考虑进去也无妨,因为好多人都没这么办,譬如大名鼎鼎的opencv,
这里写图片描述
上图出自 opencv2.4.13的文档。相比较像素坐标带来的误差,镜头畸变带来的误差影响更大,因为镜头畸变的原因,相机其实并非线性模型,提高相机标定精度的一大方法就是采用更精确的非线性模型,对比opencv不同版本的文档,我们可以发现,opencv下功夫的也是这方面。
把话题回到主线上来,在考虑到像素坐标的实际形态之后(个人比较喜欢用”形态“这个词),像素坐标系和物理坐标系之间的关系其实是这个样子的:
u=u0+xdxydcotθdxv=v0+ydysinθ
(2)变换成矩阵形式之后就是下面这个样子:

uv1=1dx00cotθdx1dysinθ0u0v01xyz
(3)
与公式(3)的模型相比,opencv的模型是不是显得单纯好多。

2.图像物理坐标系与相机坐标系之间的转换

这里写图片描述

上面这幅图形象的表明了图像物理坐标系与相机坐标系之间的关系。这两者之间的变换是透视变换

假设在空间某一点 P ,它在相机坐标系中的坐标为(xc,yc,zc),依据相似三角形的相关知识,我们可以得到:

xf=xczcyf=yczc
(4)
其中, f 就是我前面所说的焦距,什么,我没说过?那,现在说也不迟:f是相机的焦距。
照例,我们把它变成矩阵形式:
xy1=1zcf000f0001xcyczc
(5)
很明显,这个矩阵是一个齐次矩阵,我们为什么要变矩阵变换成齐次形式呢。简单点说,为了求解方便。

3.相机坐标系与世界坐标系之间的转换

这两者之间的变换是刚体变换。所谓刚体变换,就是只有旋转和平移的变换。
什么,难道还要别的变换?
当然有,缩放、扭曲、翻转还有剪切等等,各种变换真是不要太多。
形象点说,你拿一条棍子甩来甩去,这叫刚体变换。如果你拿一根面条甩来甩去,那就不是刚体变换。
好了,刚体变换的话题到此结束,我们来进入正题,看看相机坐标系与世界坐标系之间的转换。

xcyczc=(R|T)xwywzw1
(6)
其中, R 为3×3的矩阵,T为3×1的矩阵。一如既往,我们对上式采取了齐次的形式。

利用上面的四个变换公式,我们可以得到图像的二维像素点与对应的三维空间坐标点的转换公式:

suv1=α00αcotθβsinθ0u0v01(R0TT1)xwywzw1
(7)
其中, s=1zc α=fdx,β=fdy ,值得一提的是, 0T 是一个3×3的矩阵。另外 s <script type="math/tex" id="MathJax-Element-2287">s</script>并不影响矩阵的求解,具体原因,下回再说。

后记:第一篇带这么多公式的博客写完了,真是太开心

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相机的坐标系转换(1) 的相关文章

  • 保存原始rgb8bit 数据到bmp文件

    就填充方式来说 跟24位位图基本是一样的 不同的是bitcolor 位设置的颜色位数要填充为8 而不是24 百度了很久 目前只能是勉强能保存成图片 能正常打开 但目前还有未能理解的问题 列举如下 如果有知道的朋友 希望能得到您的慷慨解惑 感
  • OpenCV——图像分块(1)

    目录 一 概述 二 代码实现 三 结果展示 1 原始图像 2 分块结果 一 概述 已知分块后图像的分块个数 对图像进行分块 二 代码实现 include
  • 深度学习之Python,OpenCV中的卷积

    这篇博客将介绍图像内核和卷积 如果将图像视为一个大矩阵 那么图像内核只是一个位于图像顶部的微小矩阵 从左到右和从上到下滑动内核 计算输入图像和内核之间的元素乘法总和 称这个值为内核输出 内核输出存储在与输入图像相同 x y 坐标的输出图像中
  • MATLAB小技巧(33)arima时间序列

    MATLAB小技巧 33 arima时间序列 前言 一 MATLAB仿真 二 仿真结果 三 小结 前言 MATLAB进行图像处理相关的学习是非常友好的 可以从零开始 对基础的图像处理都已经有了封装好的许多可直接调用的函数 这个系列文章的话主
  • matlab 读取某一文件夹下的文件

    MATLAB 是一个十分强大的科学计算软件 用于各种数据分析和科学计算 在实际工作和研究过程中 我们通常将数据存储在文件中 文件存在于系统的某个目录中 如果需要读取这些文件 可以使用 MATLAB 提供的文件和文件夹操作函数 本文将介绍如何
  • R-CNN史上最全讲解

    文章目录 一 初识R CNN 网络结构 二 训练步骤 1 RP的确定 2 模型pre training 3 Fine Tunning 4 提取并保存RP的特征向量 5 SVM的训练 6 bbox regression的训练 三 测试步骤 s
  • 图像处理 --- 一、认识图像处理

    声明 本系列文档由学习哔站视频总结而得 后续会逐渐添加相对应的示例代码 python 1 什么是图像与图像处理 百闻不如一见 图像是客观对象的一种相似性的 生动性的描述或写真 是人类社会活动中最常用的信息载体 或者说图像是客观对象的一种表示
  • 数字图像处理(入门篇)六 图像数据预处理之坐标变化

    目录 1 平移 2 镜像 3 旋转 4 缩放 图像的坐标变换又称为图像的几何计算 常见的基本变换包括 平移 旋转 镜像和缩放等等 1 平移 1 代码 使用OpenCV仿射变换函数 cv2 warpAffine 实现平移操作 import n
  • 通过matlab实现数字图像处理中的抠图换背景功能

    适合背景为蓝色的图片 效果最好 如果背景色为别的颜色 可对代码进行调整修改后使用 其实这里的代码最开始由于报错已经经过我的修改了 可能出现的异常情况 1 待抠图片以及需要替换的背景图片放置在代码文件所在的目录 不然会无法读取 不出结果 2
  • CUDA的下载安装

    大家好 下面将进行CUDA的下载安装 下载安装的详细步骤描述如下 1 CUDA下载 https download csdn net download qq 41104871 87462747 2 CUDA安装 1 首先 需要解压缩下载好的C
  • 保姆级使用PyTorch训练与评估自己的ConvNeXt网络教程

    文章目录 前言 0 环境搭建 快速开始 1 数据集制作 1 1 标签文件制作 1 2 数据集划分 1 3 数据集信息文件制作 2 修改参数文件 3 训练 4 评估 5 其他教程 前言 项目地址 https github com Fafa D
  • 图像处理神器 ImageMagick 命令介绍

    安装完 ImageMagick 打开命令行 输入相应命令即可处理图像 所有命令前面都要加 magick 网上的教程都没说 也可能是我自己环境没配置吧 说明 内的命令表示是可选的 内表示是示例或者代号而已 magick convert sou
  • 图像二值化

    文章目录 1 图像二值化 2 图像二值化方法及Python实现 2 1 简单二值法 2 2 平均值法 2 3 双峰法 2 4 OTSU法 3 opencv python中二值化方法的应用 3 1 简单阈值分割 Simple Threshol
  • 关于统计变换(CT/MCT/RMCT)算法的学习和实现,也称为局部二进制模式(LBP)

    原文地址 http blog sina com cn s blog 684c8d630100turx html
  • 扩散模型:Diffusion models as plug-and-play priors作为即插即用先验的扩散模型

    扩散模型 Diffusion models as plug and play priors作为即插即用先验的扩散模型 0 摘要 1 概述 2 方法 2 1 问题设置 2 2 将去噪扩散概率模型作为先验 3 实验 图像生成 3 1 MNIST
  • pil_openvcv_scikit-image_tensorflow四种读图方式对比

    文章目录 1 四种不同的库读取jpg图显示 2 评估所读图片的差异 3 简单说明有差异原因 4 同样的流程对png图片进行处理 5 png图片转jpg 5 1 使用PIL进行转换 5 2 使用Opencv进行转换 5 3 使用Tensorf
  • 基于TensorFlow2实现的宠物识别系统(爬虫、模型训练和调优、模型部署)

    目录 开发环境 0 项目准备 1 数据集准备 2 数据预处理 3 构建模型 4 模型训练及验证 5 模型部署 6 项目地址 开发环境 作者 嘟粥yyds 时间 2023年8月25日 集成开发工具 PyCharm Professional 2
  • 【FMC141】基于VITA57.4标准的4通道2.8GSPS 16位DA播放子卡(2片DAC39J84)

    FMC141是一款基于VITA57 4标准的4通道2 8GSPS 2 5GSPS 1 6GSPS采样率16位DA播放FMC子卡 该板卡为FMC 标准 符合VITA57 4与VITA57 1规范 16通道的JESD204B接口通过FMC 连接
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • 盘点那些年我们一起玩过的网络安全工具

    大家好 我是IT共享者 这篇文章给大家盘点那些年 我们一起玩过的网络安全工具 一 反恶意代码软件 1 Malwarebytes 这是一个检测和删除恶意的软件 包括蠕虫 后门 流氓 拨号器 间谍软件等等 快如闪电的扫描速度 具有隔离功能 并让

随机推荐

  • 封装自己的SDK

    我们在开发Spring项目时常常会引入各种xxx spring boot starter的依赖包 然后在配置文件中填入必要的信息 就可以使用依赖提供好的容器 这里是在鱼皮新项目直播中学习到的 特此记录一下 可在未来封装自己的SDK进行封装与
  • openswan安装部署

    Lclient gt Lserver Rserver lt Rclient 172 16 10 16 10 86 10 17 10 86 10 18 192 168 10 16 首先要保证 lclient ping通lserver和rser
  • mysql中的mvcc机制

    MVCC全称是 Multi Version ConCurrency Control 即多版本控制协议 MVCC的主要是靠在每行记录上增加隐藏列和使用undo log来实现的 隐藏列主要包括 改行数据创建的版本号 递增的 删除时间 指向und
  • sql手工注入练习拿flag

    sql手工注入练习拿flag 记录一下自己重新开始学习web安全之路 1 找注入点 url 搜索框 登录框 2 找交互点 用单引号判断是否存在交互点 发现回显不正常 说明url存在有交互点 3 判断类型 char类型 利用and 1 1 和
  • hdu 6127 Hard challenge

    Problem acm hdu edu cn showproblem php pid 6127 Meaning 平面上有 n 个不重合的点 任意三点不共线 任意两点所在直线不经原点 每个点有个 value 任意两个点连出的线段的 value
  • Java 输出数组中指定元素的下标

    输出数组指定元素的下标 public static void main String args 定义一个数组 int array new int 123 456 789 321 654 987 int index printArray ar
  • Chisel入门(三)------Chisel的基本语法2

    概述 继续介绍Chisel的基本语法 3 组件 3 1 Chisel中的组件是模块 Chisel中的每个模块都拓展了class 并包含了接口的io字段 接口是由封装为IO 的Bundle所定义的 Bundle包含的字段表示模块的输入输出端口
  • 用Python3实现文本转语音

    本文首次在公众号 零妖阁 上发表 为了方便阅读和分享 我们将在其他平台进行自动同步 由于不同平台的排版格式可能存在差异 为了避免影响阅读体验 建议如有排版问题 可前往公众号查看原文 感谢您的阅读和支持 利用文本朗读库pyttsx3实现文字转
  • Linux环境rpm yum与dnf详解

    目录 一 rpm工具 1 1 简介 1 2 参数介绍 1 3 常用情景命令 二 yum工具 2 1简介 2 2 常用命令 三 dnf工具 3 1简介 3 2常用命令 本篇文章主要从使用的角度来介绍Linux下rpm yum与dnf三种工具
  • 搭建docker+sonarqube并使用scanner、maven分析项目

    一 搭建docker sonarqube 步骤1 进入服务器 创建一个文件夹sonarqube ssh root ip mkdir sonarqube cd sonarqube 可以选用临时或者正式部署方案 临时部署方案 通用部署 dock
  • 厂房效果图制作

    关于厂房 工厂园区规划 及钢结构类项目效果图制作过程中所经常遇到的一些问题 在这里予以汇总整理 并对场景搭建的流程给予简述 三维场景创建 首先需要把CAD平面规划图纸 或是PDF电子版文档 或是手绘稿等弄清楚 场地占地多少亩 有多少厂房 办
  • 1.1 初识基准测试(Benchmark)

    基准测试 Benchmark 是Go语言中用于衡量代码性能的重要工具 通过编写基准测试函数 并使用testing B提供的方法来记录执行时间和其他指标 我们可以准确地评估代码的性能表现 在开发过程中 合理使用基准测试可以帮助我们优化代码 提
  • 面试系列之基础篇

    强引用 软引用 弱引用 虚引用 一般面试官会这样问 你知道Java中对象的引用类型有哪几种吗 分别讲讲这几种之间的区别 强引用 只要强引用还存在 垃圾收集器永远不会回收被引用的对象 软引用 描述一些还有用但是并非必需的对象 将要发生内存溢出
  • 深度学习与人脸识别系列(3)__基于VGGNet的人脸识别系统

    作者 wjmishuai 出处 http blog csdn net wjmishuai article details 50854155 声明 版权所有 转载请联系作者并注明出处 1 引言 本文中介绍的人脸识别系统是基于这两篇论文 Ver
  • java高qps接口设计_高并发后端设计-限流篇

    系统在设计之初就会有一个预估容量 长时间超过系统能承受的TPS QPS阈值 系统可能会被压垮 最终导致整个服务不够用 为了避免这种情况 我们就需要对接口请求进行限流 限流的目的是通过对并发访问请求进行限速或者一个时间窗口内的的请求数量进行限
  • leetcode刷题:最大子序积

    1 题目 题解 实现上面的过程 class Solution public int maxProduct vector
  • 删除gitlab上的分支

    好久没有更新了 今天记录一下删除gitlab上的分支的操作 登录仓库后 依次点击 project gt home gt Readme gt repository gt branches 会看到所有master和所有分支 点击右侧删除即可 看
  • 剑指Offer(一):二维数组中查找最大值

    题目 这个题目说的是 给你一个二维数组 matrix 和一个目标值 target 你要在数组里找到这个目标值 然后返回它的行 列下标 如果找不到 则返回 1 1 这个数组的每一行都是从左向右递增 每一列都是从上到下递增 和 二维数组的二分搜
  • 首届《产业数字化金铲奖》榜单来袭

    出品 产业家 2021年 产业数字化是绝对的主题 在这个变幻莫测的一年里 越来越多的企业开始寻求数字化转型方向 它们在工业 农业 医疗 教育等等方向都在努力作出自己的数字化尝试 个体寻找数字进化之路 企业构建新的技术底层 产业定义互联网下半
  • 相机的坐标系转换(1)

    前言 常言道 工欲善其事 必先利其器 如欲明其理 必先定其义 后一句是我编的 不过 这句话还是有道理的 如果要想明白相机的坐标系之间的转换 那么必须明白相机有哪几个坐标系 并对它们下一个明确的定义 只有这样 我们接下来的工作才好开展 正文