相机内参详解

以下是一些个人在工作中对相机内参的学习和理解
首先要了解一下数码相机的大致成像原理
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 = fsy
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 = fsx * (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其实是将物理成像平面的原点,做了一个偏移,将以光轴点为原点转换到以左上角为原点。

原文链接:https://blog.csdn.net/cjh666/article/details/106326257

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值