相机标定(Cameracalibration )
简介
摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵 的过程,下⾯相关的部分主要参考UIUC的计算机视觉的课件(⽹址)。基本的坐标系:
世界坐标系(world coordinate system);相机坐标系(camera coordinate system);图像坐标系(image coordinate system);⼀般来说,标定的过程分为两个部分:
第⼀步是从世界坐标系转换为相机坐标系,这⼀步是三维点到三维点的转换,包括 , (相机外参)等参数;第⼆部是从相机坐标系转为图像坐标系,这⼀步是三维点到⼆维点的转换,包括 (相机内参)等参数;
故乡美相机坐标系 转换到 图像坐标系##
坐标系介绍
如上图所⽰(图⽚来⾃UIUC计算机视觉课件),是⼀个⼩孔成像的模型,其中:短篇散文
点表⽰camera centre ,即相机的中⼼点,也是相机坐标系的中⼼点; 轴表⽰principal axis ,即相机的主轴;
点所在的平⾯表⽰image plane ,即相机的像平⾯,也就是图⽚坐标系所在的⼆维平⾯; 点表⽰principal point ,即主点,主轴与像平⾯相交的点;
点到 点的距离,也就是右边图中的 表⽰focal length ,即相机的焦距;
像平⾯上的 和 坐标轴是与相机坐标系上的 和 坐标轴互相平⾏的;
相机坐标系是以 , , (⼤写)三个轴组成的且原点在 点,度量值为⽶(m );像平⾯坐标系是以 ,(⼩写)两个轴组成的且原点在 点,度量值为⽶(m );
图像坐标系⼀般指图⽚相对坐标系,在这⾥可以认为和像平⾯坐标系在⼀个平⾯上,不过原点是在图⽚的⾓上,⽽且度量值为像素的个数(pixel );
相机 转换到 像平⾯
P R t K C Z p p C p f x y X Y X Y Z C x y p
知道上⾯的简单知识后,如果知道相机坐标系中的⼀个点 (现实三维世界中的点),在像平⾯坐标系对应的点是 ,要求求从相机坐标系转为像平⾯坐标系的转换,也就是从 点的通过⼀定的转换变为 点的$\begin{pmatrix}x, & y\end{pmatrix}
\begin{pmatrix}X, & Y, & Z \end{pmatrix}\begin{pmatrix}x, & y\end{pmatrix} $(⼩
写)是在像平⾯坐标系(还不是图像坐标系,原点不同。)观察第⼆个图,很简单的可以得到这个转换:爸爸英文
可以表⽰为矩阵计算为(在这⾥⽤的是齐次坐标的表⽰⽅式,关于齐次坐标⽂章最下⾯有介绍):
可以简写为( 就是所谓的投影矩阵,当然现在还不完整):
加⼊偏移量
通过上⾯,可以把相机坐标系转换到像平⾯坐标系,但是像平⾯坐标系和图像坐标系虽然在同⼀个平⾯上,但是原点并不是同⼀个,⽽⽬标
是要转换到图像坐标系下,所以还需要⼀步操作,如下图:
如上图所⽰(图⽚来⾃UIUC计算机视觉课件),其中主点 是像平⾯坐标系的原点,但在图像坐标系中的位置为$\begin{pmatrix}p_x, & p_y \end{pmatrix}
$,在这⾥,图形坐标系的原点是图⽚的左下⾓,所以可以得到:
相当于在上⾯的基础上加了⼀个p 点坐标的偏移量,同时可以表⽰为矩阵计算为(在这⾥⽤的是齐次坐标的表⽰⽅式):if歌词
X x X (X ,
Y ,Z )x 。注意:(⼤写)是在相机坐标系,⽽x =fX /Z y =fY /Z
↦(X ,Y ,Z )(fX /Z ,fY /Z )
↦⎝⎜⎜⎛X Y Z 1⎠⎟⎟
⎞
=
⎝⎛fX fY
Z ⎠⎞⎣⎡f f
1000⎦⎤⎝⎜⎜⎛X Y Z 1⎠
⎟⎟⎞
P x =PX
p ↦(X ,Y ,Z )(fX /Z +p ,x fY /Z +p y )
↦⎝⎜⎜⎛X Y Z 1⎠⎟⎟
⎞
=
⎝⎛fX +Zp x fY +Zp y
Z ⎠⎞⎣⎡f f
p x
p y 1
000⎦⎤⎝⎜⎜⎛X Y Z 1⎠
⎟⎟⎞
整理⼀下得:
所以最后可以得到 ,也就是平时所说的相机内参(Intrinsic parameters ):
以及投影矩阵 (在这⾥可以认为旋转矩阵 为单位矩阵 ,平移矩阵 都为0,这也是为什么要拆成这种⽅式),为:
像素坐标
前⾯也提到了在图像坐标系中⽤的不是现实⽣活中的m 来度量,⽽是⽤的 pixel 的个数,所以在上⾯转换到图像坐标系中还有个问题,就是坐标的表⽰还是m ,并没有转换到像素坐标系统;在这⾥需要引⼊⼀个新概念就是:
表⽰在⽔平⽅向1m 的长度包含的像素的个数; 表⽰在竖直⽅向1m 的长度包含的像素的个数;
可能有⼈奇怪为啥不是⼀个值,还需要分别指定 和 呀,这是因为通过上⾯可以得到⼀个像素点的⼤⼩(m 度量)为:
但是需要说明的是像素并不⼀定是⼀个正⽅形,有时候可能也是⼀个矩形,所以要分别指定。所以可以把上⾯相机内参 变为更新为,转换公式把 替换即可,其他不变:
⼀般来说,在使⽤相机内参K 计算坐标系转换时,提供的都是已经变换后的值;例如会提供 , ,, 四个值代表相机内参,其实
就是这⾥的 ,同理 是 , 是 , 是 。
世界坐标系 转换到 图像坐标系##
坐标系介绍
=
⎝⎛fX +Zp x fY +Zp y Z ⎠⎞⎣⎡f f
p x p y 1⎦⎤⎣⎡111000⎦⎤⎝⎜⎜⎛X Y Z 1⎠
⎟⎟⎞
院校排行K K =
⎣
⎡f f
p x p y 1⎦
⎤
P R I t P =K [I
0]
m x m y m x m y ×m x 1
m y
1K K K =
=⎣
⎡m x m y
1⎦⎤⎣
⎡f
f
p x p y 1⎦⎤⎣⎡αx αy βx βy 1⎦
⎤f x f y c x c y K f x αx f y αy c x βx c y βy
如上图所⽰(图⽚来⾃UIUC计算机视觉课件),从世界坐标系转换到相机坐标系是三维空间到三维空间的变换,⼀般来说需要⼀个平移操作和⼀个旋转操作就可以完成这个转换,⽤公式表⽰如下(可以理解为世界坐标系原点先平移到相机坐标系的位置然后在做⼀次坐标系旋转,使坐标轴对齐。):
表⽰旋转矩阵;
表⽰ 点在世界坐标系中的位置; 表⽰相机原点 在世界坐标系中的位置; 表⽰ 点在相机坐标系中的位置;
世界 转换到 相机
根据上⾯的公式可以得到从⼀个三维点从世界坐标系转换到相机坐标的变换公式如下(也是⽤的齐次坐标的表⽰⽅式):
世界 转换到 图像
根据上⾯的讨论知道了怎样从世界坐标系转换到相机坐标系(平移和旋转)以及从相机坐标系转换到图像坐标系(相机内参变换),所以带⼊上⾯的矩阵计算,可以得到:
这样就得到了最终的投影矩阵 :
简朴造句
其中:
在这⾥, ⼀般称为相机内参(intrinsic parameters ),描述了相机的内部参数,包括焦距 、主点 的位置、以及像素与真实环境的⼤⼩⽐例等,这个是固有属性,是提供好的; 和 称为相机外参(extrinsic parameters ), 在这⾥是旋转矩阵,可以转换为三维的旋转向量,分别表⽰绕,, 三个轴的旋转⾓度, ⽬前就是⼀个平移向量,分别表⽰在,, 三个⽅向上的平移量。
畸变参数(distortion parameters )
=X cam R (−X )
C R X X C C X cam X X =cam =(X cam 1)=[R 06的分解与组成
−RC 1](X 1)X [R 0−RC
1]x =K X =[I
0]cam K X
[R −RC ]P P =K [R t ]
t =−RC
头发枯燥K f p R t R x y z t x y z
在⼏何光学和阴极射线管(CRT)显⽰中,畸变(distortion ) 是对直线投影(rectilinear projection )的⼀种偏移。简单来说直线投影是场景内的⼀条直线投影到图⽚上也保持为⼀条直线。那畸变简单来说就是⼀条直线投影到图⽚上不能保持为⼀条直线了,这是⼀种光学畸变(optical aberration )。可能
由于摄像机镜头的原因,这⾥不讨论,有兴趣的可以查阅光学畸变的相关的资料。畸变⼀般可以分为两⼤类,包括径向畸变和切向畸变。主要的⼀般径向畸变有时也会有轻微的切向畸变。
径向畸变(Radial distortion )###
径向畸变的效应有三种,⼀种是桶形畸变(barrel distortion ),另⼀种是枕形畸变(pincushion distortion
),还有⼀种是两种的结合叫做胡⼦畸变(mustache distortion ),从图⽚中可以很容易看出区别,具体见下图(图⽚来⾃wikipedia ):
径向畸变可以⽤如下公式修正:
切向畸变(tangential distortion )###
切向畸变是由于透镜与成像平⾯不严格的平⾏,其可以⽤如下公式修正:
其中:
和 表⽰有畸变的坐标; 和 表⽰修复后的坐标;,, 表⽰径向畸变参数;, 表⽰切向畸变参数;
所以最终得到5个畸变参数:
相机标定
x =corr x (1+dis k r +12k r +24k r )
36y =corr y (1+dis k r +12k r +24k r )
36x =corr x +dis [2p xy +1p (r +222x )]
2y =corr y +dis [p (r +122y )+22p xy ]
2x dis y dis x corr y corr k 1k 2k 3p 1p 2D =(k ,1k ,2p ,1p ,2k 3)