相机内参详解

相机内参详解

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

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

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

4.最后由DSP将数字信号转换成数码图像
相机内参详解_第1张图片
这里引用《SLAM十四讲》中的图片,图中物理成像平面可以等同于上面所说的CCD或者CMOS

根据相似三角形关系可以得到:
在这里插入图片描述
根据相似三角形关系,我们可以将物体所成的像对称到相机前方(实际相机中是由相机内部软件对成像进行倒立像的调节使得我们最后得到正立的像)
相机内参详解_第2张图片
在左右两边都为 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的成像平面上所成的像离开光轴的距离(即成像大小)

所以一般想通过相机坐标得到图像坐标,首先会将相机坐标归一化
经过了这个变换,我们就将相机坐标系的坐标(归一化),投影到了成像平面上。
但是投影到成像平面上之后,在成像平面上的图像的单位还依旧是长度单位
最后变成我们的像素图像以像素为单位
那么成像平面到像素平面还会有一层转换关系,
这一层转换关系 就是我们所说的 相机内参:
相机内参详解_第3张图片
此时我们需要将 长度单位 转换为 以像素为单位的像素坐标,这个转换主要由相机内参中的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 :相机内参详解_第4张图片
由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
相机内参详解_第5张图片
在这个图上可以看到,物理成像平面的中心在光轴上,所以一般在成像平面的中心,但我们最后得到的图像面试以左上角为原点的像素图像,所以CX和CY其实是将物理成像平面的原点,做了一个偏移,将以光轴点为原点转换到以左上角为原点。

你可能感兴趣的:(相机标定,计算机视觉)