[摘抄]相机标定(内参外参)概要
简介
摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵 PP 的过程,下⾯相关的部分主要参考UIUC的计算机视觉的课件(⽹址)。
基本的坐标系:
世界坐标系(world coordinate system);
特斯拉电脑相机坐标系(camera coordinate system);
图像坐标系(image coordinate system);
⼀般来说,标定的过程分为两个部分:
第⼀步是从世界坐标系转换为相机坐标系,这⼀步是三维点到三维点的转换,包括 RR,tt (相机外参)等参数;
第⼆部是从相机坐标系转为图像坐标系,这⼀步是三维点到⼆维点的转换,包括 KK(相机内参)等参数;
相机坐标系转换到图像坐标系
坐标系介绍
如上图所⽰(图⽚来⾃UIUC计算机视觉课件),是⼀个⼩孔成像的模型,其中:
CC 点表⽰camera centre,即相机的中⼼点,也是相机坐标系的中⼼点;
gw250ZZ 轴表⽰principal axis,即相机的主轴;
pp 点所在的平⾯表⽰image plane,即相机的像平⾯,也就是图⽚坐标系所在的⼆维平⾯;
pp 点表⽰principal point,即主点,主轴与像平⾯相交的点;
CC 点到 pp 点的距离,也就是右边图中的 ff 表⽰focal length,即相机的焦距;
像平⾯上的 xx 和 yy 坐标轴是与相机坐标系上的 XX 和 YY 坐标轴互相平⾏的;
相机坐标系是以 XX, YY, ZZ(⼤写)三个轴组成的且原点在 CC 点,度量值为⽶(m);
像平⾯坐标系是以 xx,yy(⼩写)两个轴组成的且原点在 pp 点,度量值为⽶(m);
图像坐标系⼀般指图⽚相对坐标系,在这⾥可以认为和像平⾯坐标系在⼀个平⾯上,不过原点是在图⽚的⾓上,⽽且度量值为像素的个数(pixel);
相机转换到像平⾯
知道上⾯的简单知识后,如果知道相机坐标系中的⼀个点 XX(现实三维世界中的点),在像平⾯坐标系对应的点是 xx,要求求从相机坐标系转为像平⾯坐标系的转换,也就是从 XX 点的(X,Y,Z)(X,Y,Z)通过⼀定的转换变为 xx 点的(x,y)(x,y)。注意:(X,Y,Z)(X,Y,Z)(⼤写)是在相机坐标系,⽽(x,y)(x,y)(⼩写)是在像平⾯坐标系(还不是图像坐标系,原点不同。)观察第⼆个图,很简单的可以得到这个转换:
x=fX/Z
y=fY/Zy
(X,Y,Z)↦(fX/Z,fY/Z)
加⼊偏移量
通过上⾯,可以把相机坐标系转换到像平⾯坐标系,但是像平⾯坐标系和图像坐标系虽然在同⼀个平⾯上,但是原点并不是同⼀个,⽽⽬标是要转换到图像坐标系下,所以还需要⼀步操作,如下图:
如上图所⽰(图⽚来⾃UIUC计算机视觉课件),其中主点 pp 是像平⾯坐标系的原点,但在图像坐标系中的位置为(px,py)(px,py),在这⾥,图形坐标系的原点是图⽚的左下⾓,所以可以得到:
(X,Y,Z)↦(fX/Z+px,fY/Z+py)
整理后可以得到 K,也就是平时所说的相机内参(Intrinsic parameters):
f为焦距,即相机镜头光⼼到成像平⾯的距离。
像素坐标
前⾯也提到了在图像坐标系中⽤的不是现实⽣活中的m来度量,⽽是⽤的pixel的个数,所以在上⾯转换到图像坐标系中还有个问题,就是坐标的表⽰还是m,并没有转换到像素坐标系统;在这⾥需要引⼊⼀个新概念就是:
mx表⽰在⽔平⽅向1m的长度包含的像素的个数;
my 表⽰在竖直⽅向1m的长度包含的像素的个数;
可能有⼈奇怪为啥不是⼀个值,还需要分别指定 mxmx 和 mymy 呀,这是因为通过上⾯可以得到⼀个像素点的⼤⼩(m度量)为:
但是需要说明的是像素并不⼀定是⼀个正⽅形,有时候可能也是⼀个矩形,所以要分别指定。
⼀般来说,在使⽤相机内参K计算坐标系转换时,提供的都是已经变换后的值;例如会提供 fx,fy,cx,cy 四个值代表相机内参K,其实 fx就是这⾥的αx,同理 fy 是αy,cx 是βx,cy 是βy。
世界坐标系转换到图像坐标系
坐标系介绍
如上图所⽰(图⽚来⾃UIUC计算机视觉课件),从世界坐标系转换到相机坐标系是三维空间到三维空间的变换,⼀般来说需要⼀个平移操作和⼀个旋转操作就可以完成这个转换,⽤公式表⽰如下(可以理解为世界坐标系原点先平移到相机坐标系的位置然后在做⼀次坐标系旋转,使坐标轴对齐。):
X~cam=R(X~−C~)
RR 表⽰旋转矩阵;
X˜X~ 表⽰ XX 点在世界坐标系中的位置;
C˜C~ 表⽰相机原点 CC 在世界坐标系中的位置;
X˜camX~cam 表⽰ XX 点在相机坐标系中的位置;
世界转换到相机
根据上⾯的公式可以得到从⼀个三维点从世界坐标系转换到相机坐标的变换公式如下(也是⽤的齐次坐标的表⽰⽅式):
Xcam=(X˜cam1)=[R0−RC˜1](X˜1)=[R0−RC˜1]X
世界转换到图像
根据上⾯的讨论知道了怎样从世界坐标系转换到相机坐标系(平移和旋转)以及从相机坐标系转换到图像坐标系(相机内参变换),所以带⼊上⾯的矩阵计算,可以得到:
x=K[I0]Xcam=K[R−RC˜]X
这样就得到了最终的投影矩阵 PP :
P=K[Rt]
其中:
t=−RC~
在这⾥,KK ⼀般称为相机内参(intrinsic parameters),描述了相机的内部参数,包括焦距 ff、主点 pp 的位置、以及像素与真实环境的⼤⼩⽐例等,这个是固有属性,是提供好的;RR 和 tt 称为相机外参(extrinsic parameters),RR 在这⾥是旋转矩阵,可以转换为三维的旋转向量,分别表⽰绕xx,yy,zz 三个轴的旋转⾓度,tt ⽬前就是⼀个平移向量,分别表⽰在xx,yy,zz 三个⽅向上的平移量。
畸变参数(distortion parameters)
在⼏何光学和阴极射线管(CRT)显⽰中,畸变(distortion)是对直线投影(rectilinear projection)的⼀种偏移。简单来说直线投影是场景内的⼀条直线投影到图⽚上也保持为⼀条直线。那畸变简单来说就是⼀条直线投影到图⽚上不能保持为⼀条直线了,这是⼀种光学畸变(optical aberration)。可能由于摄像机镜头的原因,这⾥不讨论,有兴趣的可以查阅光学畸变的相关的资料。
畸变⼀般可以分为两⼤类,包括径向畸变和切向畸变。主要的⼀般径向畸变有时也会有轻微的切向畸变。
径向畸变(Radial distortion)
径向畸变的效应有三种,⼀种是桶形畸变(barrel distortion),另⼀种是枕形畸变(pincushion distortion),还有⼀种是两种的结合叫做胡⼦畸变(mustache distortion),从图⽚中可以很容易看出区别,具体见下图(图⽚来⾃wikipedia):
利亚纳径向畸变可以⽤如下公式修正:
xcorr=xdis(1+k1r2+k2r4+k3r6)
ycorr=ydis(1+k1r2+k2r4+k3r6)
切向畸变(tangential distortion)
切向畸变是由于透镜与成像平⾯不严格的平⾏,其可以⽤如下公式修正:
xcorr=xdis+[2p1xy+p2(r2+2x2)]
ycorr=ydis+[p1(r2+2y2)+2p2xy]
其中:
xdisxdis 和 ydisydis 表⽰有畸变的坐标;
xcorrxcorr 和 ycorrycorr 表⽰修复后的坐标;
k1k1,k2k2,k3k3 表⽰径向畸变参数;
p1p1,p2p2 表⽰切向畸变参数;
所以最终得到5个畸变参数:
D=(k1,k2,p1,p2,k3)
相机标定
那么可以利⽤这些来进⾏最终的任务相机标定,简单的过程可以描述为通过标定板,如下图,可以得到n个对应的世界坐标三维点 XiXi 和对应的图像坐标⼆维点 xixi,这些三维点到⼆维点的转换都可以通过上⾯提到的相机内参 KK,相机外参 RR和 tt,以及畸变参数 DD 经过⼀系列的矩阵变换得到。现在就⽤这些对应关系来求解这些相机参数。最后就是⽤线性⽅法求解⽅程式,这⾥就不做讨论了。
那为什么要做相机标定呢?
每个镜头的畸变程度各不相同,通过相机标定可以校正这种镜头畸变。其实可以认为⽤这种标定的⽅式来求解相机内参和畸变参数,相当于⼀种相机校准,然后这些参数就可以⽤于后⾯的求解。例如求解新拍的两幅图⽚相对的 RR 和 tt,求解这个外参⽤到就是标定得到的相机内参和畸变参数。
齐次坐标
就是将⼀个原本是n维的向量⽤⼀个n+1维向量来表⽰。
许多图形应⽤涉及到⼏何变换,主要包括平移、旋转、缩放。以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘,综合起来可以表⽰为 x=R∗X+tx=R∗X+t(注:因为习惯的原因,实际使⽤时⼀般使⽤变化矩阵左乘向量)(RR 旋转缩放矩阵,tt 为平移矩阵,XX 为原向量,xx 为变换后的向量)。引⼊齐次坐标的⽬的主要是合并矩阵运算中的乘法和加法,表⽰为 x=P∗Xx=P∗X 的形式。即它提供了⽤矩阵运算把⼆维、三维甚⾄⾼维空间中的⼀个点集从⼀个坐标系变换到另⼀个坐标系的有效⽅法。和上⾯的计算过程是对应的。
版权声明:本⽂为博主原创⽂章,遵循版权协议,转载请附上原⽂出处链接和本声明。
江淮同悦汽车本⽂链接:
相机内参详解
以下是⼀些个⼈在⼯作中对相机内参的学习和理解
⾸先要了解⼀下数码相机的⼤致成像原理
1.光聚焦在CCD或CMOS上。
2.CCD或CMOS完成光/电转换。
3.A/D将模拟信号转换成数字信号。
4.最后由DSP将数字信号转换成数码图像
这⾥引⽤《SLAM⼗四讲》中的图⽚,图中物理成像平⾯可以等同于上⾯所说的CCD或者CMOS
根据相似三⾓形关系可以得到:
五菱宏光mini小q超跑多少钱
根据相似三⾓形关系,我们可以将物体所成的像对称到相机前⽅(实际相机中是由相机内部软件对成像进⾏倒⽴像的调节使得我们最后得到正⽴的像)
在左右两边都为 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