相机成像过程及相机内参详解
一、定义介绍
本节以小孔成像模型为例,详细介绍了普通单目相机的成像过程,相机内参及内参矩阵的详细含义。本节所述的成像原理与大部分相机成像原理类似,读懂此节可满足大部分与单目视觉相关的工作,也可以此类推到更复杂的内容。
二、原理解读
(一)成像过程
1.坐标系
在相机成像过程中存在三个坐标系(也可加上世界坐标系看作四个):相机坐标系(也称为光心坐标系)、物理(成像平面)坐标系、像素坐标系
相机坐标系:如图所示,为o-x-y-z坐标系,对应相机平面。以光心O为原点,z轴指向相机正前方,y轴向下,x轴向右。我们所谓的真实世界中的物体的坐标基于世界坐标系,此处的相机坐标系是经过世界坐标系转换来的,但世界坐标系到相机坐标系是属于外参,因此,我们人为地将物体看作基于相机坐标系即可,本质上没有太大影响。
物理坐标系:如图所示,为o’-x’-y’坐标系,对应物理平面。物理坐标系是个二维坐标系(包括后面的像素坐标系)!并非相机坐标系的三维。物理(成像平面)坐标系本质上就是用来刻度感光芯片(如CMOS)的平面,一般物理坐标系原点就是感光芯片的中心点(也有可能不是,根据具体厂家生产不同决定)。物理平面就是感光芯片上的图片。
像素坐标系:如图所示,为o’’-u-v坐标系,对应像素平面。由物理平面映射而成,相当于改变物理坐标系原点、改变基于物理坐标系下的成像平面的缩放倍数,可以理解为像素坐标系和物理坐标系处于同一个平面。图像成像到像素平面其实就可以理解为平时电脑上看到的图片(PNG、JEPG等)。
f f f:焦距,相机光心到物理成像平面的距离。一般相机在生产时就固定了,由厂家给出;也存在变焦相机,指的就是 f f f是可变的。比如1~5mm变焦相机,指的就是相机的焦距 f f f可以在1~5mm内变动,一般变焦相机通过硬件微型电机前后移动镜头来实现变焦功能。
2.成像转换过程
假设镜头前有一实际的点P,从P转到 p p p的过程即是成像转换的过程。我们以相机的光心为原点,那么基于相机坐标系,这个点P的坐标就为(X, Y ,Z)。此时我们得到了一个实际点(有一个点,实际物体看做很多很多个点就是了)在相机坐标系下的坐标,接下来要做的就是通过相机坐标系下的点,转而获得该点基于物理坐标系下的坐标;再从基于物理坐标系下获得的坐标,转而获得该点基于像素坐标系下的坐标,这样就完成了实际物体到图像的成像过程。下面分步解释几个转换:
(1)从相机坐标系到物理坐标系
上面我们假设相机坐标系下有一点P(X,Y,Z),投影到成像平面坐标系下为P’(X’,Y’)。如图所示,根据假设,我们已知X、Y、Z和 f f f(焦距),由于是小孔成像模型,成像平面与相机平面平行,且两坐标系原点同在相机坐标系Z轴。依据相似三角形原理,我们不难求出P’(X’,Y’)的坐标,这里没有Z轴,因为物理坐标系是二维的。以下为推到公式:
因相似三角形原理,且小孔成像导致图像倒置180度
得 − X ′ f = X Z \frac{-X'}{f}=\frac{X}{Z} f−X′=ZX
得 X ′ = f − X Z X'=f\frac{-X}{Z} X′=fZ−X
同理可得 Y ′ = f − Y Z Y'=f\frac{-Y}{Z} Y′=fZ−Y
(2)从物理坐标系到像素坐标系
得到P’(X’,Y’)后,从物理坐标系映射到像素坐标系其实是一种人为的过程,如图所示,以左上角为像素坐标系原点只是一种人为约定的习惯。将物理平面的所有点都映射到像素平面,不难理解,需要先进行缩放,然后加上点的偏移。如图,P’(X’,Y’)映射到像素平面后为 p ( u , v ) p(u,v) p(u,v)但因为小孔成像模型中(1)从相机坐标系到物理坐标系这个过程,会导致图像翻转180度,因此,一般情况下(有些相机设备可能不是这样),成像平面上右下角的点,就应该是像素平面的原点。我们假设X’轴、Y’轴缩放倍数为 α 、 β α、β α、β,点偏移为 c x 、 c y c_x、c_y cx、cy,那么,我们就可以得到点 p ( u , v ) p(u,v) p(u,v)的坐标。
u = α X ′ + c x = α f − X Z + c x u=αX'+c_x=αf\frac{-X}{Z}+c_x u=αX′+cx=αfZ−X+cx
v = β X ′ + c y = β f − Y Z + c y v=βX'+c_y=βf\frac{-Y}{Z}+c_y v=βX′+cy=βfZ−Y+cy
虽然说小孔成像导致图像倒置,但这些都是人为规定的,我们也可以将成像平面看做是在相机前面,也是变成如图所示样子(从 − f -f −f处的蜡烛变成了 f f f处红色的蜡烛)
这样一来,我们就把负号去掉了,一般情况下相机生成厂家也都是这么做的(他们就是直接去除负号)。因此,点 p ( u , v ) p(u,v) p(u,v)的坐标又可以写成
u = α X ′ + c x = α f X Z + c x u=αX'+c_x=αf\frac{X}{Z}+c_x u=αX′+cx=αfZX+cx
v = β X ′ + c y = β f Y Z + c y v=βX'+c_y=βf\frac{Y}{Z}+c_y v=βX′+cy=βfZY+cy
(二)相机内参矩阵
1.推导内参矩阵
我们用 f x f_x fx替换 α f αf αf,用 f y f_y fy替换 β f βf βf;则上式变为
u = f x X Z + c x u=f_x\frac{X}{Z}+c_x u=fxZX+cx
v = f y Y Z + c y v=f_y\frac{Y}{Z}+c_y v=fyZY+cy
然后再将上式写成矩阵的形式,就变成了
( u v 1 ) = ( f x Z 0 c x Z 0 f y Z c y Z 0 0 1 Z ) ∗ ( X Y Z ) \begin{pmatrix} u\\ v\\ 1\end{pmatrix}=\begin{pmatrix} \frac{f_x}{Z}&0&\frac{c_x}{Z}\\ 0&\frac{f_y}{Z}&\frac{c_y}{Z}\\ 0&0&\frac{1}{Z}\end{pmatrix}*\begin{pmatrix} X\\ Y\\ Z\end{pmatrix} ⎝⎛uv1⎠⎞=⎝⎛Zfx000Zfy0ZcxZcyZ1⎠⎞∗⎝⎛XYZ⎠⎞
提取出K,变成下式
( u v 1 ) = 1 Z ( f x 0 c x 0 f y c y 0 0 1 ) ∗ ( X Y Z ) \begin{pmatrix} u\\ v\\ 1\end{pmatrix}=\frac{1}{Z}\begin{pmatrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1\end{pmatrix}*\begin{pmatrix} X\\ Y\\ Z\end{pmatrix} ⎝⎛uv1⎠⎞=Z1⎝⎛fx000fy0cxcy1⎠⎞∗⎝⎛XYZ⎠⎞
将Z提取到前面,上式便写成
Z p = K P Zp=KP Zp=KP
此时,我们就得到了内参矩阵,K( ( f x 0 c x 0 f y c y 0 0 1 ) \begin{pmatrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1\end{pmatrix} ⎝⎛fx000fy0cxcy1⎠⎞)就是内参矩阵
2.内参矩阵的意义
通过上面,我们得到了内参矩阵K: ( f x 0 c x 0 f y c y 0 0 1 ) \begin{pmatrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1\end{pmatrix} ⎝⎛fx000fy0cxcy1⎠⎞
其中, f x = α f f_x=αf fx=αf, f x f_x fx就是 f f f(焦距)和 α α α(像素平面u轴缩放倍数)的乘积;
f y = β f f_y=βf fy=βf, f y f_y fy就是 f f f(焦距)和 β β β(像素平面v轴缩放倍数)的乘积;
c x c_x cx就是物理平面与像素平面u轴的偏移
c y c_y cy就是物理平面与像素平面v轴的偏移
来自:九七的视觉工程
作者原创文章,文章版权归本文作者所有,未经作者同意请勿以任何方式进行复制、转载等盗版操作,请勿用于商业、违法用途!违者自行承担法律责任!