【视频开发】【计算机视觉】相机标定(Camera calibration)《二》

2019年11月06日 阅读数:394
这篇文章主要向大家介绍【视频开发】【计算机视觉】相机标定(Camera calibration)《二》,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

简介

摄像机标定(Camera calibration)简单来讲是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵  P  的过程,下面相关的部分主要参考UIUC的计算机视觉的课件(网址Spring 2016 CS543 / ECE549 Computer vision)。css

基本的坐标系:html

  • 世界坐标系(world coordinate system);
  • 相机坐标系(camera coordinate system);
  • 图像坐标系(image coordinate system);

通常来讲,标定的过程分为两个部分:spring

  • 第一步是从世界坐标系转换为相机坐标系,这一步是三维点到三维点的转换,包括  R t  (相机外参)等参数;
  • 第二部是从相机坐标系转为图像坐标系,这一步是三维点到二维点的转换,包括  K (相机内参)等参数;

相机坐标系 转换到 图像坐标系

坐标系介绍

相机到图片

如上图所示(图片来自UIUC计算机视觉课件),是一个小孔成像的模型,其中:atom

  • C  点表示camera centre,即相机的中心点,也是相机坐标系的中心点;
  • Z  轴表示principal axis,即相机的主轴;
  • p  点所在的平面表示image plane,即相机的像平面,也就是图片坐标系所在的二维平面;
  • p  点表示principal point,即主点,主轴与像平面相交的点;
  • C  点到  p  点的距离,也就是右边图中的  f  表示focal length,即相机的焦距;
  • 像平面上的  x  和  y  坐标轴是与相机坐标系上的  X  和  Y  坐标轴互相平行的;
  • 相机坐标系是以  X ,  Y ,  Z (大写)三个轴组成的且原点在  C  点,度量值为米(m);
  • 像平面坐标系是以  x y (小写)两个轴组成的且原点在  p  点,度量值为米(m);
  • 图像坐标系通常指图片相对坐标系,在这里能够认为和像平面坐标系在一个平面上,不过原点是在图片的角上,并且度量值为像素的个数(pixel);

相机 转换到 像平面

知道上面的简单知识后,若是知道相机坐标系中的一个点  X (现实三维世界中的点),在像平面坐标系对应的点是  x ,要求求从相机坐标系转为像平面坐标系的转换,也就是从  X  点的 (X,Y,Z) 经过必定的转换变为  x  点的 (x,y) 。注意: (X,Y,Z) (大写)是在相机坐标系,而 (x,y) (小写)是在像平面坐标系(还不是图像坐标系,原点不一样。)观察第二个图,很简单的能够获得这个转换: 
spa

x=fX/Z
y=fY/Z
(X,Y,Z)(fX/Z,fY/Z)

能够表示为矩阵计算为(在这里用的是齐次坐标的表示方式,关于齐次坐标文章最下面有介绍): 
code

XYZ1fXfYZ=ff1000XYZ1

能够简写为( P  就是所谓的投影矩阵,固然如今还不完整): 
orm

x=PX

加入偏移量

经过上面,能够把相机坐标系转换到像平面坐标系,可是像平面坐标系和图像坐标系虽然在同一个平面上,可是原点并非同一个,而目标是要转换到图像坐标系下,因此还须要一步操做,以下图:htm

这里写图片描述

如上图所示(图片来自UIUC计算机视觉课件),其中主点  p  是像平面坐标系的原点,但在图像坐标系中的位置为 (px,py) ,在这里,图形坐标系的原点是图片的左下角,因此能够获得: 
图片

(X,Y,Z)(fX/Z+px,fY/Z+py)

至关于在上面的基础上加了一个p点坐标的偏移量,同时能够表示为矩阵计算为(在这里用的是齐次坐标的表示方式): 
ip

XYZ1fX+ZpxfY+ZpyZ=ffpxpy1000XYZ1

整理一下得: 

fX+ZpxfY+ZpyZ=ffpxpy1111000XYZ1

因此最后能够获得  K ,也就是平时所说的相机内参(Intrinsic parameters): 

K=ffpxpy1

以及投影矩阵  P (在这里能够认为旋转矩阵  R  为单位矩阵  I ,平移矩阵  t  都为0,这也是为何要拆成这种方式),为: 
P=K[I0]

像素坐标

前面也提到了在图像坐标系中用的不是现实生活中的m来度量,而是用的 pixel 的个数,因此在上面转换到图像坐标系中还有个问题,就是坐标的表示仍是m,并无转换到像素坐标系统;在这里须要引入一个新概念就是:

  • mx  表示在水平方向1m的长度包含的像素的个数;
  • my  表示在竖直方向1m的长度包含的像素的个数;

可能有人奇怪为啥不是一个值,还须要分别指定  mx  和  my  呀,这是由于经过上面能够获得一个像素点的大小(m度量)为: 

1mx×1my

可是须要说明的是像素并不必定是一个正方形,有时候可能也是一个矩形,因此要分别指定。 
因此能够把上面相机内参  K  变为更新为,转换公式把  K  替换便可,其余不变: 

K=mxmy1ffpxpy1=αxαyβxβy1

通常来讲,在使用相机内参K计算坐标系转换时,提供的都是已经变换后的值;例如会提供  fx fy  , cx cy  四个值表明相机内参 K ,其实  fx  就是这里的  αx ,同理  fy  是  αy cx  是  βx cy  是  βy

世界坐标系 转换到 图像坐标系

坐标系介绍

如上图所示(图片来自UIUC计算机视觉课件),从世界坐标系转换到相机坐标系是三维空间到三维空间的变换,通常来讲须要一个平移操做和一个旋转操做就能够完成这个转换,用公式表示以下(能够理解为世界坐标系原点先平移到相机坐标系的位置而后在作一次坐标系旋转,使坐标轴对齐。): 

X˜cam=R(X˜C˜)

  • R  表示旋转矩阵;
  • X˜  表示  X  点在世界坐标系中的位置;
  • C˜  表示相机原点  C  在世界坐标系中的位置;
  • X˜cam  表示  X  点在相机坐标系中的位置;

世界 转换到 相机

根据上面的公式能够获得从一个三维点从世界坐标系转换到相机坐标的变换公式以下(也是用的齐次坐标的表示方式): 

Xcam=(X˜cam1)=[R0RC˜1](X˜1)=[R0RC˜1]X

世界 转换到 图像

根据上面的讨论知道了怎样从世界坐标系转换到相机坐标系(平移和旋转)以及从相机坐标系转换到图像坐标系(相机内参变换),因此带入上面的矩阵计算,能够获得: 

x=K[I0]Xcam=K[RRC˜]X

这样就获得了最终的投影矩阵  P  : 

P=K[Rt]

其中: 

t=RC˜

在这里, K  通常称为相机内参(intrinsic parameters),描述了相机的内部参数,包括焦距  f 、主点  p 的位置、以及像素与真实环境的大小比例等,这个是固有属性,是提供好的; R  和  t  称为相机外参(extrinsic parameters), R  在这里是旋转矩阵,能够转换为三维的旋转向量,分别表示绕 x y z  三个轴的旋转角度, t  目前就是一个平移向量,分别表示在 x y z  三个方向上的平移量。

畸变参数(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]

其中:

  • xdis  和  ydis  表示有畸变的坐标;
  • xcorr  和  ycorr  表示修复后的坐标;
  • k1 k2 k3  表示径向畸变参数;
  • p1 p2  表示切向畸变参数;

因此最终获得5个畸变参数: 

D=(k1,k2,p1,p2,k3)

相机标定

那么能够利用这些来进行最终的任务相机标定,简单的过程能够描述为经过标定板,以下图,能够获得n个对应的世界坐标三维点  Xi  和对应的图像坐标二维点  xi ,这些三维点到二维点的转换均可以经过上面提到的相机内参  K ,相机外参  R  和  t ,以及畸变参数  D  通过一系列的矩阵变换获得。如今就用这些对应关系来求解这些相机参数。最后就是用线性方法求解方程式,这里就不作讨论了。

那为何要作相机标定呢? 
每一个镜头的畸变程度各不相同,经过相机标定能够校订这种镜头畸变。其实能够认为用这种标定的方式来求解相机内参和畸变参数,至关于一种相机校准,而后这些参数就能够用于后面的求解。例如求解新拍的两幅图片相对的  R  和  t ,求解这个外参用到就是标定获得的相机内参和畸变参数。

齐次坐标 
就是将一个本来是n维的向量用一个n+1维向量来表示。 
许多图形应用涉及到几何变换,主要包括平移、旋转、缩放。以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘,综合起来能够表示为  x=RX+t (注:由于习惯的缘由,实际使用时通常使用变化矩阵左乘向量)( R  旋转缩放矩阵, t  为平移矩阵, X  为原向量, x 为变换后的向量)。引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为  x=PX 的形式。即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另外一个坐标系的有效方法。和上面的计算过程是对应的。

简介

摄像机标定(Camera calibration)简单来讲是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵  P  的过程,下面相关的部分主要参考UIUC的计算机视觉的课件(网址Spring 2016 CS543 / ECE549 Computer vision)。

基本的坐标系:

  • 世界坐标系(world coordinate system);
  • 相机坐标系(camera coordinate system);
  • 图像坐标系(image coordinate system);

通常来讲,标定的过程分为两个部分:

  • 第一步是从世界坐标系转换为相机坐标系,这一步是三维点到三维点的转换,包括  R t  (相机外参)等参数;
  • 第二部是从相机坐标系转为图像坐标系,这一步是三维点到二维点的转换,包括  K (相机内参)等参数;

相机坐标系 转换到 图像坐标系

坐标系介绍

相机到图片

如上图所示(图片来自UIUC计算机视觉课件),是一个小孔成像的模型,其中:

  • C  点表示camera centre,即相机的中心点,也是相机坐标系的中心点;
  • Z  轴表示principal axis,即相机的主轴;
  • p  点所在的平面表示image plane,即相机的像平面,也就是图片坐标系所在的二维平面;
  • p  点表示principal point,即主点,主轴与像平面相交的点;
  • C  点到  p  点的距离,也就是右边图中的  f  表示focal length,即相机的焦距;
  • 像平面上的  x  和  y  坐标轴是与相机坐标系上的  X  和  Y  坐标轴互相平行的;
  • 相机坐标系是以  X ,  Y ,  Z (大写)三个轴组成的且原点在  C  点,度量值为米(m);
  • 像平面坐标系是以  x y (小写)两个轴组成的且原点在  p  点,度量值为米(m);
  • 图像坐标系通常指图片相对坐标系,在这里能够认为和像平面坐标系在一个平面上,不过原点是在图片的角上,并且度量值为像素的个数(pixel);

相机 转换到 像平面

知道上面的简单知识后,若是知道相机坐标系中的一个点  X (现实三维世界中的点),在像平面坐标系对应的点是  x ,要求求从相机坐标系转为像平面坐标系的转换,也就是从  X  点的 (X,Y,Z) 经过必定的转换变为  x  点的 (x,y) 。注意: (X,Y,Z) (大写)是在相机坐标系,而 (x,y) (小写)是在像平面坐标系(还不是图像坐标系,原点不一样。)观察第二个图,很简单的能够获得这个转换: 

x=fX/Z
y=fY/Z
(X,Y,Z)(fX/Z,fY/Z)

能够表示为矩阵计算为(在这里用的是齐次坐标的表示方式,关于齐次坐标文章最下面有介绍): 

XYZ1fXfYZ=ff