相机内参详解

2023-05-16

相机内参详解

以下是一些个人在工作中对相机内参的学习和理解
首先要了解一下数码相机的大致成像原理
1.光聚焦在CCD或CMOS上。

2.CCD或CMOS完成光/电转换。

3.A/D将模拟信号转换成数字信号。

4.最后由DSP将数字信号转换成数码图像
在这里插入图片描述
这里引用《SLAM十四讲》中的图片,图中物理成像平面可以等同于上面所说的CCD或者CMOS

根据相似三角形关系可以得到:
在这里插入图片描述
根据相似三角形关系,我们可以将物体所成的像对称到相机前方(实际相机中是由相机内部软件对成像进行倒立像的调节使得我们最后得到正立的像)
在这里插入图片描述
在左右两边都为 f 的情况下可以得到等大的图像
则上述公式变为:
在这里插入图片描述
根据公式可以知道 归一化成像平面是怎么定义的,根据对称得到的虚像
左边除以 f 右边除以 f,最后右边在Z=1的平面上,左边在f=1的平面得到的图像
将公式整理可得:
在这里插入图片描述
则这个公式表示:
归一化坐标点,[X/Z,Y/Z,1] 即在Z=1的平面上所成的像和[ X’/f , Y’/f , 1] 即在f=1的成像平面上所得到的像,离开光轴(即原点,Z轴)的距离是相同的,再这个基础上再乘 f 即可得到,[X, Y, Z]在焦距为f的成像平面上所成的像离开光轴的距离(即成像大小)

所以一般想通过相机坐标得到图像坐标,首先会将相机坐标归一化
经过了这个变换,我们就将相机坐标系的坐标(归一化),投影到了成像平面上。
但是投影到成像平面上之后,在成像平面上的图像的单位还依旧是长度单位
最后变成我们的像素图像以像素为单位
那么成像平面到像素平面还会有一层转换关系,
这一层转换关系 就是我们所说的 相机内参:
在这里插入图片描述
此时我们需要将 长度单位 转换为 以像素为单位的像素坐标,这个转换主要由相机内参中的fx与fy来进行确定

物理成像平面其实是由一个个像素单元组成的,每个像素单元就会有 大小,
即这个小单元格像素的宽高,所以 像素单元 的单位是 微米/像素(米,毫米单位并不固定)
举个例子:
通过投影到成像平面上时
整个图像长5376μm 宽为 3024μm
最后显示在1280*720的图像内 那么每个 物理成像平面每个像素单元的
宽度为 5376/1280 为4.2μm
高度为 3024/720 为4.2 μm
此时像素单元 是正方形的, 此时为 4.2 单位是 μm/像素(若像素单元不是正方形则fx和fy就不同了,所以会存在fx和fy因为大部分都不会是正方形)

根据 opencv中 对于内参 fx与fy的定义:(f是焦距,引用于《学习opencv》–P409)
fx = fsx
fy = f
sy
sx的单位是像素/毫米 就是我们上面求得 像素单元size的倒数

转换一下 可以得到 1/4.2 = 0.238095 像素/μm
(到这基本可以明白如何通过长度转换为像素了)
这里有个疑问 为什么 fx的定义是 fx = f*sx ?

举个例子:
假设现在我们有一个世界坐标(相机坐标系) P = [X,Y,Z]
根据小孔成像公式
在这里插入图片描述
我们得到坐标 X’ = fX/Z Y’ = fY/Z (成像平面坐标)
但是实际使用矩阵乘法中我们是这样用
假设内参矩阵时K :在这里插入图片描述
由opencv的定义 fx = f*sx f是焦距 sx单位是像素/μm

那么这个点转换到像素坐标的为:

Px = K * (P/Z) 即先归一化在左乘内参矩阵
将乘法分解开来
可以得到 Px = fx*(X/Z) + cx (这里CX是光心 暂不做解释)
Px = fsx (X/Z) +cx
Px = f
sx * (X/Z) = f
(X/Z) * sx +cx

所以为什么相机内参会定义为 f*sx就是这个原因
因为坐标在一开始就除以Z进行归一化了
按照小孔成像公式应该乘f 只不过在opencv中将f移到了内参来进行表达 所以fx和fy的本质是 :
将世界坐标归一化后的在成像平面上的像(长度单位) 转换为像素平面上的像素(像素单位)

fx的物理意义: 因为fx 其实 是 f*sx ,sx是像素/μm(该单位并不固定) 加上f之后就变成像素,所以fx的物理意义是 :
在焦距为 f 的成像平面上,每 f 的长度表示多少个像素
最后说明一下CX和CY
在这里插入图片描述
在这个图上可以看到,物理成像平面的中心在光轴上,所以一般在成像平面的中心,但我们最后得到的图像面试以左上角为原点的像素图像,所以CX和CY其实是将物理成像平面的原点,做了一个偏移,将以光轴点为原点转换到以左上角为原点。

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

相机内参详解 的相关文章

随机推荐

  • 为什么使用token?session与token的区别

    目录 一 session的状态保持及弊端 二 token认证机制 一 session的状态保持及弊端 当用户第一次通过浏览器使用用户名和密码访问服务器时 xff0c 服务器会验证用户数据 xff0c 验证成功后在服务器端写入session数
  • 在线加密解密工具

    http tool oschina net encrypt 一个在线加解密工具 xff0c 界面如图 xff1a
  • Django到底是MVC还是MVT?以及MVC和MVT的区别

    最近一直被一些问题所困惑 xff1a Django是遵循MVC还是MVT xff1f MVC和MVT到底有哪些区别 xff1f MVC可以继续拆分吗 xff1f 在网络上浏览了很多无关痛痒的文章 xff0c 无非是M V C分别代表什么 x
  • 【Python】使用Counter方法统计字符串每个字符出现的次数

    from collections import Counter a 61 34 a lskdh 96 foiegn 96 96 as ldnf asd 121 2ljladsfkja 96 sdijfhaosjlfd gjsdfg as d
  • 【Python】时间戳的格式化输出

    将当前时间按照 2019 02 25 10 xff1a 26 xff1a 55 输出 xff1a import datetime now time 61 datetime datetime now strftime 34 Y m d H M
  • 【Python】输出给定范围内的所有素数

    质数 xff08 prime number xff09 又称素数 xff0c 有无限个 质数定义为在大于1的自然数中 xff0c 除了1和它本身以外不再有其他因数 首先定义一个空列表用来存放所有的素数 sushu 61 遍历给定的范围 xf
  • Java 通过map构造树形结构

    在开发中 xff0c 经常会有将 数据组装成为树形结构的场景 xff0c 除了可以通过递归实现 xff0c 还可以通过map 组装实现 一 xff0c 构造基本数据 import apple laf JRSUIUtils import co
  • 【无标题】es搜索基本操作

    一 xff0c 准备数据 1 创建索引 PUT lagou book 2 创建mapping PUT lagou book doc mapping 34 properties 34 34 description 34 34 type 34
  • ubuntu 环境使用eclipse和JLink对uboot进行调试

    ubuntu 12 04 Jlink v8 Jlink Linux v422a tar gz Linux J Link ARM V4 34 Windows 下载eclipse C C 43 43 版本 http www eclipse or
  • 【ES】常用操作工具

    工欲善其事 xff0c 必先利于器 xff0c es使用过程中 xff0c 有些工具能帮助我们快速的上手和使用 一 es head es head 是一款专门针对 es的客户端工具elasticSearch配置包 是一个基于node js的
  • 【es】基本概念理解

    一 xff0c 初识es 1 是什么 xff1f ElasticSearch 简称es 开源的分布式的全文搜索引擎 xff0c 可以近乎实时的存储检索数据 xff0c es使用java开发 xff0c 并且使用Lucene作为核心实现搜索功
  • 无法安装net framework 3.5 的解决方法

    电脑刚重装了Windows8 1系统 xff0c 然后安装数据库的时候 xff0c 却出现了这样的问题 xff1a 您的电脑上的应用需要使用以下windows功能 问题原因是 xff1a 在安装系统的时候 xff0c NET Framewo
  • 【计算机网络原理】第四章 数据链路层

    今天主要梳理了一下数据链路层的内容 xff0c 如下 一 宏观规划 综合数据链路层的整体 xff0c 分为两大部分 xff0c 第一部分讲解数据链路层的功能 xff0c 第二部分讲解数据链路层的功能 这些协议 xff0c 其实还是为了实现数
  • 【redis】关系型数据库 VS 非关系型数据库

    一 关系型数据库 xff1f 1 概念 关系型数据库是指采用了关系模型来组织数据的数据库 简单来说 xff0c 关系模式就是二维表格模型 主要代表 xff1a SQL Server xff0c Oracle Mysql PostgreSQL
  • resultful风格接口

    一 产生背景 网络应用程序 xff0c 越来越流行前端和后端的分离设计 当前的发展趋势是前端的设计层出不穷 比如 xff1a 各种型号的手机 平板灯其他设计 因为必须要一种统一的机制方便不同的前端和后端进行通信 这就导致了API结构的流行
  • 【kafka】Exception thrown when sending a message with key='null' and payload='lizhenjuan;99' to topic

    今天碰到一个奇怪的问题 xff0c 如下图 xff1a 一 问题 1 问题截图 上午还可以发送消息成功的 xff0c 下午突然就发送不了消息了 我就检查我代码的问题 xff0c 是传递的格式不对 xff0c 还是数据要求不对 网上的资料显示
  • 【mysql】order by多个字段排序

    今天遇到了两个字段排序的问题 xff0c 感觉不是很清晰 xff0c 所有又按照规则查询了下 xff0c 总结下 count都是306的有三个 现在需要同时按照age和count排序 xff0c 测试最后的排序结果 默认都是按照age和co
  • PCB Layout软件分析对比(AD、Pads、Allegro)

    PCB Layout软件分析对比 xff08 AD Pads Allegro xff09 国内的EDA软件市场几乎被三家瓜分 xff0c 分别是Altium Cadence Mentor xff0c 也是我们这次主要分析和比较的软件 除此之
  • 【leetcode学习笔记】leecode是什么?

    在csdn上看到leecode是第二次了 xff0c 之前一直不知道是什么 xff1f 今天在学习linux系统如何将文本登录界面转换为图像登录界面的时候 xff08 出现了运行startx后 xff0c ubuntu密码正确也进不去系统的
  • 相机内参详解

    相机内参详解 以下是一些个人在工作中对相机内参的学习和理解 首先要了解一下数码相机的大致成像原理 1 光聚焦在CCD或CMOS上 2 CCD或CMOS完成光 电转换 3 A D将模拟信号转换成数字信号 4 最后由DSP将数字信号转换成数码图