深入解读相机矩阵

2023-05-16

在这片文章里,你将了解到以下内容:
1、相机的针孔模型
2、相机矩阵的概念
3、相机内参的含义
4、相机外参的含义

1 相机针孔模型

针孔模型是相机成像的基础模型,是理解后续相机矩阵内容的基础。
下图描述了基本的小孔成像过程:

在这里插入图片描述
图中,X坐标系是针孔所在坐标系,Y坐标系为成像平面坐标系,P为空间一点,小孔成像使得P点在图像平面上呈现了一个倒立的像。
在这里插入图片描述
这幅图是前一幅图的俯视图,由三角相似关系可以得到:
在这里插入图片描述在这里插入图片描述
写成矩阵的形式:
在这里插入图片描述
多了一个讨厌的负号(小孔成像上下颠倒,左右也颠倒),为了方便,大家把成像平面移到了和物体(P点)相同的一边,这样相似关系中就没有负号。
在这里插入图片描述
上图中Y1’为移动后的成像平面,这与移动前的比例关系是等效的。
在这里插入图片描述 在这里插入图片描述
写成矩阵形式:
在这里插入图片描述
参考资料4中有一幅图能够更好的反映小孔成像的原理(下图):
在这里插入图片描述
图中,
相机原点就是成像小孔;
图像平面移到了物体这一边;
图像平面距离小孔的距离为f,小孔本不存在焦距,但是实际中相机都用镜片(透镜模型和小孔模型可以认为是近似的),因此,图像平面在焦距处是清晰成像的条件。
光轴是垂直通过图像平面和相机原点的轴线,它与图像平面的交点被称为主点。
看懂了这幅图,小孔成像也就可以翻篇了。

2、什么是相机矩阵(camera matrix )

首先来理解一下相机成像的本质:成像过程就是三维空间坐标到二维图像坐标的变换,这是一个投影过程(降维打击)。
相机矩阵就是建立这种三维到二维的投影关系。
在这里插入图片描述
如果我们用[xw yw zw ]来表示一个空间点的坐标,用[x y]来表示对应于成像平面上的一个图像点的坐标(不是像素坐标),那么这两个点肯定是有一种变换关系联系起来的,我们把这个变换关系记为P,

但是大家都喜欢用齐次坐标,那我们就用齐次坐标来表示上述这两个点(齐次坐标有优点:可以将旋转和平移用一种统一的格式来描述)。
空间点:在这里插入图片描述,图像点:在这里插入图片描述
则有:在这里插入图片描述
这里面,在这里插入图片描述是一个3X4的矩阵(这是为了满足4X1变换到3X1的要求),该矩阵就被称为相机矩阵(camera matrix ),或者相机投影矩阵(camera projection matrix)。

上述相机矩阵只是一种非常粗略的表达,要是考卷上你写这个答案估计得不了分,实际上我们可以在细化一下该矩阵的表达。这就要再来看看小孔模型。
第一部分说小孔模型时没有使用齐次坐标,现在我们用齐次坐标再来看看小孔模型。
还记得这个表达式吧:在这里插入图片描述
把它写成齐次形式:
在这里插入图片描述
注意,左边变为[y1 y2 1]的齐次形式了,右边矩阵的第三行是额外添加的,它是等式成立的配平项。
在此,我们先暂时舍弃比例因子f/x3,只建立[y1 y2 1]与[x1 x2 x3]的关系,可以得到表达式
在这里插入图片描述
由于舍弃了一个比例因子,等式不再成立,因此使用~来表示二者之间的相似关系。
对于在这里插入图片描述,可以建立在这里插入图片描述在这里插入图片描述的关系,用矩阵表示如下:
在这里插入图片描述
到此,就建立了在这里插入图片描述在这里插入图片描述的关系,如下所示:
在这里插入图片描述
注意,不是等号。

其中,在这里插入图片描述就是相机矩阵,或者乘以一个系数f写为在这里插入图片描述可以看出,比之前的表达式具体多了。

为什么上述关系不使用等号?
因为空间三维点的齐次坐标到二维图像点的坐标不满足一 一映射的条件,空间->图像是1对1的,图像->空间是1对多的,这就意味着远处一个大的物体和近处一个小的物体在图像上投影也许是一样的,上述舍弃的那个比例因子,就是这种缩放平移关系。

上述推导来自Wikipedia,在有些版本的推导中,图像点的齐次坐标和空间点的其次坐标建立关系时,使用等式相连,,那就请注意,他们在表述图像点齐次坐标的时候,在这里插入图片描述齐次项写的应该不是1,可能前面还有系数,请注意不同版本的不同表达,各种表达是等价的。

我们现在已经知道,相机矩阵的形式为在这里插入图片描述而且这个矩阵是可以分解的,分解结果为在这里插入图片描述这个分解结果留着后面有用。
但这个关系还远远不够,我们得接着往下走。

3、什么是内参矩阵(Intrinsic matrix)

说内参矩阵之前,还得再引入像素坐标系的概念。
上述图像点的表示是长度单位,不是像素,由于我们拿到的图像是以像素来衡量的,因此还需要将图像坐标系转化为像素坐标系。
在此直接给出结论:
在这里插入图片描述
具体参见百度百科:https://baike.baidu.com/item/像素坐标/5372225
于是之前的相机矩阵又得添加一项:
在这里插入图片描述(1)
上述推导中有一个假设前提,就是相机的感光元件是正方形的,感光元件的安装也是通过光轴中心的,但这不可能,于是会出现以下两个问题:
1、感光元件的基本单元不是方的,一个方形物体可能最后成像为一个矩形(甚至会有斜切效果,一般可以不考虑斜切因素);
这导致表达式(1)中,dx与dy不相等,
2、感光元件的中心与光轴通过的主点不重合,会使得正常投影的图像发生了一点小小的位移。
这导致表达式(1)中,u0与v0可能并不等于成像传感器长宽尺寸的一半。(理想状态下就是一半)

表达式(1)中,等式右边的前三个矩阵合并,得到下式:
在这里插入图片描述
,其中在这里插入图片描述被称为内参矩阵(Wikipedia)
或者只合并等式右边前两个矩阵,得到下式:
在这里插入图片描述
于是也有习惯将在这里插入图片描述称为内参矩阵(少了一列0),都是一个意思。
内参矩阵的参数含义:
f:焦距,单位毫米,dx:像素x方向宽度,单位毫米,1/dx:x方向1毫米内有多少个像素
f/dx:使用像素来描述x轴方向焦距的长度
f/dy:使用像素来描述y轴方向焦距的长度
u0,v0,主点的实际位置,单位也是像素。

内参矩阵反应了相机自身的属性,各个相机是一不一样的,需要标定才能知道这些参数。

4、什么是外参矩阵( extrinsic matrix)

外参矩阵是世界坐标系到相机坐标系的变换。既然是变换,我们就能够将其表达为[R t],齐次形式为在这里插入图片描述
但是目前为止好像并没有在相机矩阵中看到外参矩阵。之前的相机矩阵表示如下:
在这里插入图片描述(2)
那是因为,之前的推导中,我们默认世界坐标系和相机坐标系是重合的。在小孔成像模型中,空间一点的坐标被描述为[x y z 1],这个点的坐标系原点在小孔,而相机的坐标中心也在小孔,但是在实际应用过程中,世界坐标系和相机坐标系往往不重合,这样才带来了外参矩阵的概念,下图展示了相机坐标系与世界坐标系不重合时的情况,我们只知道P点在世界坐标系下的坐标,因为要运用小孔成像原理,我们想知道P点在相机坐标系下的坐标,相机外参矩阵就实现了这种变换。
在这里插入图片描述
还是空间某个点p,其在世界坐标系下表示为[xw,yw,zw,1],在相机坐标系下表示为[xc,yc,zc,1],那么它们具有如下关系:
在这里插入图片描述
带入到相机矩阵表达式中可以得:
在这里插入图片描述
合并等式右边2、3两个矩阵:
在这里插入图片描述
到此,我们就看到了一个比较常见的内外参数矩阵的写法,等式右边,第一个矩阵为内参矩阵(3x3),第二个矩阵为外参矩阵(3x4),合起来就是相机矩阵,它建立了三维点齐次坐标到二维点齐次坐标的变换。

争议讨论

外参矩阵常备误解为相机坐标系到世界坐标系的变换(刚好反了),等效的误解表达为:相机在世界坐标系下的位置姿态。
争议来源1:Wikipedia
在这里插入图片描述
争议来源2:一个讲的比较细的国外网站http://ksimek.github.io/2012/08/22/extrinsic/
在这里插入图片描述

争议来源3:国内很多博客,基本上都是翻译上述两句话,就不贴图了。

也许是我没理解清楚,但上述这些表述很有误导性。

我认为准确的表述应该是:
外参矩阵是世界坐标系在相机坐标系下的描述(或者位置姿态)
等价于外参矩阵是从世界坐标系到相机坐标系的变换
它确实也确定了相机在世界坐标系下的位置姿态,但相机位置姿态是外参矩阵的逆。
再说细一些:
R的每一个列向量表示世界坐标系的每一个坐标轴在相机坐标系下的指向;
t表示世界坐标系原点在相机坐标系下的表示。

依据1:自相矛盾的Wikipedia
在这里插入图片描述

依据2:还是上面讲的比较细的那个国外网站http://ksimek.github.io/2012/08/22/extrinsic/
在这里插入图片描述
该网站还详细推导了外参矩阵与相机位姿的关系,这更说明外参矩阵与相机位姿不是一回事,如下图。
在这里插入图片描述
依据3:
在这里插入图片描述

不过上述所有资料来源都一致的讲到:外参矩阵是世界坐标系在相机坐标系下的描述,或者将世界坐标系下的点转换到相机坐标系下,这应该没有异议,其余说法的准确性自行甄别吧。

以上是我对相机矩阵的理解,欢迎讨论。

参考资料:
1、wikipedia:camera-matrix https://en.wikipedia.org/wiki/Camera_matrix
2、wikipedia:Camera resectioning https://en.wikipedia.org/wiki/Camera_resectioning
3、国外的一份PDF课件 http://www.cs.cmu.edu/~16385/s17/Slides/11.1_Camera_matrix.pdf
4、《机器人学、机器视觉与控制——Matlab算法基础》

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

深入解读相机矩阵 的相关文章

  • 详解温度传感器DS18B20编程与使用

    DS18B20是由DALLAS半导体公司推出的一种的 一线总线 接口的温度传感器 与传统的热敏电阻等测温元件相比 xff0c 它是一种新型的体积小 适用电压宽 与微处理器接口简单的数字化温度传感器 1 测量温度范围 55 43 125 2
  • AD10 如何将焊盘的实心改为十字型覆铜

    焊盘实心覆铜虽然有利于电流的传输 但由于焊盘周围都覆上铜皮 对焊锡有粘附作用 不利于元器件拆除 对往后板卡调试造成不便 所以焊盘在覆铜的时候建议采用十字型覆铜 xff0c 过孔采用实心覆铜 接下来就讲解一下AD10如何设置焊盘十字覆铜 xf
  • 相机参数标定(camera calibration)及标定结果如何使用

    重要更新 xff1a 本文的第二次更新已发布 为了不破坏现有内容的结构 xff0c 故重新开始新的一篇文章 同时本文的一些内容也会涵盖进去 欢迎关注 第二更 xff0c 相机参数标定基础 xff1a 从小孔成像开始到单双目标定 关于实践部分
  • 基于51单片机的LCD1602电子时钟

    摘要 xff1a 51系列单片机是各单片机中最为典型和最有代表性的一种 由RAM ROM CPU构成 xff0c 定时 xff0c 计数和多种接口于一体的微控制器 本次设计的数字电子时钟采用了STC89C52芯片进行控制 xff0c 使用D
  • 基于51单片机的简易密码锁

    一个基于51单片机的简易密码锁 xff0c 废话不多说 xff0c 直接贴图贴代码 1 电路图 电路组成 xff1a 5V电源 43 51单片机最小系统 43 LCD1602显示屏 43 4 4矩阵键盘 2 程序分析 xff08 1 xff
  • 浅谈Android与Linux系统的差异

    最近忙于查找Linux和android平台的资料 xff0c 今天将其整理整理 xff0c 根据本人拙见分享给大家 Android和Linux作为现行主流的操作系统 xff0c 无论在消费类产品还是在工控领域 xff0c 都有广泛的应用 都
  • 基于51单片机的超声波测距

    1 超声波测距原理 超声波是利用反射的原理测量距离的 xff0c 被测距离一端为超声波传感器 xff0c 另一端必须有能反射超声波的物体 测量距离时 xff0c 将超声波传感器对准反射物发射超声波 xff0c 并开始计时 xff0c 超声波
  • 超细!详解AD13:如何从零开始画出一个PCB(电路板)

    在学电子或者单片机的小伙伴们或许有过这种念头 xff0c 就是想把自己的设计的电路或者单片机系统做成一个电路板出来 xff1b 但却不知怎样做出来 今天我就给大家详细讲解如果通过AD13电路设计软件设计出一个电路板 1 首先打开AD13 x
  • 基于51单片机液晶万年历设计

    电子万年历是一种非常广泛日常计时工具 xff0c 给人们的带来了很大的方便 xff0c 在社会上越来越流行 它可以对年 月 日 时 分 秒进行计时 xff0c 采用直观的数字显示 xff0c 可以同时显示年月日时分秒和温度等信息 xff0c
  • 基于51单片机的简易计算器

    1 简介 本计算器是以MCS 51系列AT89C51单片机为核心构成的简易计算器系统 该系统通过单片机控制 xff0c 实现对4 4键盘扫描进行实时的按键检测 xff0c 并由LCD1602显示屏将过程与结果显示出来 2 硬件原理图 硬件主
  • 基于51单片机的红外解码器

    1 简介 本红外解码器是以MCS 51系列AT89C512片机为核心 xff0c 将红外传感器接收的信号解析出来 xff0c LCD1602显示屏将解码数据显示出来 2 总体原理图 硬件组成 单片机最小系统LCD1602显示屏IR红外接收器
  • 基于51单片机的心率脉搏计检测系统

    1 功能原理 脉搏传感器采样脉搏信号 xff0c 采用STC89C51单片机作为控制器 xff0c 脉搏传感器输出方波传入单片机 xff0c 触发单片机进去外部中断函数 xff0c 每接收一个脉冲波形 xff0c 显示屏就计数一次 如果脉搏
  • 基于51单片机的智能调光台灯

    1 功能介绍 智能台灯可分成自动和手动两种模式 在自动模式下 xff0c 台灯能根据环境光的亮暗与人是否被台灯所检测到 xff08 人是否在 xff09 来自动开启台灯 当人被微机检测到 xff0c 环境光又达到某个程度的时候 xff08
  • app元素辅助定位三种方式:Appium-Inspector、uiautomatorviewer、Weditor(uiautomator2)

    xff08 1 xff09 使用Appium Desktop中Appium Inspector辅助进行元素定位 早期版本集成在Appium Desktop中 xff0c 最新版本已分开 下载地址 xff1a Releases appium
  • 俄罗斯方块游戏的算法

    1 原理 这个游戏设计 xff0c 本质上就是用一个线程或者定时器产生重绘事件 用线程和用户输入改变游戏状态 这个游戏也不例外 xff0c 启动游戏后 xff0c 就立即生成一个重绘线程 xff0c 该线程每隔50ms绘制一次屏幕 当然 x
  • 基于51单片机的俄罗斯方块游戏

    俄罗斯方块游戏算法 请参考俄罗斯方块游戏的算法 1 概述 俄罗斯方块是一款风靡全球的益智游戏 它规则简单 xff0c 容易上手 xff0c 且游戏过程变化无穷 xff0c 使用户在游戏中得到乐趣 本设计是采用单片机来实现的智能俄罗斯方块游戏
  • 基于51单片机的智能温控风扇

    1 功能 本设计为一种温控风扇系统 xff0c 具有灵敏的温度感测和显示功能 xff0c 系统选用STC89C52单片机作为控制平台对风扇转速进行控制 可在测得温度值在高低温度之间时打开风扇弱风档 xff0c 当温度升高超过所设定的温度时自
  • 基于51单片机的数字频率计

    1 简介 数字频率计是现代科研生产中不可或缺的测量仪器 xff0c 它以十进制数显示被测频率 xff0c 基本功能是测量正弦信号 xff0c 方波信号 xff0c 及其它各种单位时间内变化的物理量 本系统采用AT89C52单片机智能控制 x
  • 基于51单片机的火灾报警器

    1 系统功能 火灾报警器 xff0c 主要检测温度和烟雾 xff0c 再通过单片机控制相应的报警和驱动负载 通过液晶显示当前的烟雾值和温度值 xff0c 通过按键设定相应的阀值 主要包括以下几项功能 xff1a 1 火情探测功能 xff1a

随机推荐

  • 基于51单片机的指纹密码锁

    1 系统功能概述 本次分享的是一款基于51单片机的指纹识别电子密码锁系统 xff0c 该系统以STC89C52单片机作为模块核心 xff0c 通过串口通信控制指纹模块AS608实现录取指纹并存储指纹数据 xff0c 并通过LCD12864液
  • 基于51单片机的智能电子秤

    1 概述 xff08 1 xff09 系统原理 本电子秤系统利用压力传感器采集因压力变化产生的电压信号 xff0c 经过电压放大电路放大 xff0c 然后再经过模数转换器转换为数字信号 xff0c 最后把数字信号送入单片机 单片机经过相应的
  • 基于51单片机的智能垃圾桶

    1 简介 本次主要是利用单片机设计并制作一套智能垃圾箱 要求以单片机为控制核心 xff0c 通过红外传感器检测是否有人扔垃圾 xff0c 并自动打开垃圾箱盖 xff0c 扔完垃圾后再自动关闭 主要内容包括 xff08 1 xff09 红外对
  • gmake: No rule to make target `C:/ti/controlSUITE2_DMC Rev/device_support/f2803x/v122/DSP2803x_h的解决

    注 xff1a 此方法是在CCS8环境下的使用成功的 在使用controlSUITE的例程编译时 xff0c 工程老出现这种错误 xff0c 排查了很久 xff0c 终于找到了原因 xff0c 造成这种原因主要是CCS在安装时没有按照默认的
  • 基于51单片机的数字气压计

    1 概述 本设计是基于MPX4115的数字气压计 xff0c 硬件处理电路为大气压传感器模拟信号的采集 转换 处理和显示 xff0c 并根据相应的软件需求设计控制程序 2 硬件设计 xff08 1 xff09 硬件总体框图 气压计的硬件主要
  • 一站式开源分布式集群云真机测试平台Sonic——基于Docker方式部署sonic前后端(体验版)

    Sonic xff1a 一站式开源分布式集群云真机测试平台 xff0c 致力服务于中小企业的客户端UI测试 xff0c 永久免费 sonic官网 xff1a Sonic 开源云真机测试平台 开源不易 xff0c 请大家多多支持作者 xff0
  • Policy Gradient Algorithms

    Policy Gradient Algorithms 2019 10 02 17 37 47 This blog is from https lilianweng github io lil log 2018 04 08 policy gr
  • 基于51单片机的多功能八路抢答器

    1 功能介绍 多功能八路抢答器是基于51单片机来设计的 xff0c 除了可以实现最基本功能 8路抢答外 xff0c 还具有自动处理犯规选手 xff0c 抢答时间调整 xff0c 还可以进行答题 xff0c 计分 xff0c 并且可以查询或修
  • 基于51单片机的贪吃蛇游戏

    1 简介 本设计为一款贪吃蛇游戏 xff0c 显示器采用8 8点阵 xff0c 主控制器采用51单片机 xff0c 并通过按键实现对游戏的操作 2 贪吃蛇算法介绍 吃蛇游戏算法的实现 xff0c 即如何通过液晶屏显示蛇的移动 其实蛇看似移动
  • 基于51单片机的便携式输液点滴控制报警器

    1 简介 基于单片机输液点滴控制报警器组成 该系统主要由光电传感器检测电路 键盘 数码管显示 报警提示电路 液滴流速监测电路 电机驱动电路等组成 利用光电感器测量出液滴流速 xff0c 并将将信息返回给单片机 xff0c 单片机对流速信号与
  • PCB加工文件—Gerber文件的导出

    当我们使用软件将一个板卡的PCB图纸设计好后 xff0c 想到PCB厂家制作成电路板 简单的 xff0c 你可以把自己的设置PCB文件 PcbDoc 直接发给厂家加工 xff0c 但是有些PCB厂家会要求你提供Gerber文件 但是这个Ge
  • AD13如何导出坐标文件

    在电子行业加工生产大批量的电路板 xff0c 都是利用贴片机进行生产和制造 xff0c 在生产之前 xff0c 我们需要提供PCB的坐标文件给贴片厂家 xff0c 这样厂家才能确定每个元器件应该贴在PCB板上什么位置 所以下面我们就来讲一下
  • 基于PID算法的水箱温度控制系统

    1 概述 本设计为基于STC89C52单片机的智能水温控制系统 xff0c 控制对象以500mL陶瓷水箱为容器 xff0c 并使用PID控制算法来调整水箱中500ml纯净水的温度 水温可以在一定范围内人为设定 xff0c 并能实现在下限温度
  • 基于51单片机的数字电流电压表

    1 简述 本文介绍了基于STC89C52单片机为核心 xff0c 分别以ACS712 05芯片和串联分压电路为为电流检测和电压检测电路 xff0c 并通过AD0809数模转换芯片对电压信号进行采集和转换 xff0c 传输给单片机进行处理 x
  • OpenStack快速入门

    一 登陆OpenStack 查看用户名和密码 查看文件 用户名admin和demo 登录 页面显示 修改密码 点击设置 gt 更改密码 创建和操作虚拟机实例 xff08 一 xff09 创建虚拟机实的前提 创建虚拟机实例的前提条件 1 实例
  • vnc view远程登录Linux

    转自http blog sina com cn s blog 49c306b201011had html 尽管我们可以使用 SSH连接远程通过字符界面来操作Linux xff0c 但是对于更多熟悉图形人来说是很不方便的 xff0c 因此开启
  • 【Python基础】之装饰器

    这是我初次接触装饰器 xff0c 先从初学者的角度介绍装饰器 xff0c 关于装饰器的应用场景举例 xff0c 后面再补充 1 装饰器的作用 装饰器可以让一个函数在不做任何变动的情况下新增额外的功能 如下代码 xff0c func name
  • Sonic simple服务中设备图片、测试用例运行异常图片、失败录像路径映射配置

    使用docker ps查看容器信息 使用docker exec it a2d69c075875 sh进入容器 xff0c 并查看容器文件 相关文件夹说明 xff1a imageFiles xff1a 测试用例运行截图信息 keepFiles
  • ubuntu vmware 虚拟网络编辑 ping 外网不通问题

    内网环境在192 168 1 1 网段 虚拟机想要ssh 接入 xff0c 并且可以上网 使用桥接方式和NAT方式都可以 互ping xff0c 但是上网遇到了问题 NAT解决方法如下 xff0c 桥接方式随后再研究 NAT 模式下子网IP
  • 深入解读相机矩阵

    在这片文章里 xff0c 你将了解到以下内容 xff1a 1 相机的针孔模型 2 相机矩阵的概念 3 相机内参的含义 4 相机外参的含义 1 相机针孔模型 针孔模型是相机成像的基础模型 xff0c 是理解后续相机矩阵内容的基础 下图描述了基