相机内参与外参分析,从建模,推导到求解:Camera Extrinsics and Intrinsics.
一些内容来自于:Camera Extrinsics and Intrinsics. Link:
Extrinsics,
Intrinsics.
本文的坐标变换,矩阵变换完全建立在单应性坐标 homogeneous coordinate和单应性变换的基础上,包括了基础的刚体变换,以及投影变换等。具体的描述参见:homogeneous单应性坐标的定义,以及不同投影,仿射,相似,刚体变换矩阵的关系和*度分析。
I. 坐标系的建立,Coordinate System.
主要讲从世界坐标系到图像平面坐标系以及到相机的传感器感光元件上的坐标系定义。注意:下面开始,所有的坐标点的含义均遵循下面的命名规则:
-
用o表示的是object,world,也就是世界坐标系下面的坐标或者转换矩阵,3D;
-
用k表示camera,相机坐标系下的坐标或者变换矩阵;
-
用c表示image plane,图像平面坐标系下的坐标点或者变换矩阵;
-
用s表示sensor,传感器平面坐标系下的坐标点或者变换矩阵;
-
一个投影变换矩阵,写成bHa或者写成bPa,它的含义为:从a坐标系投影到b坐标系下的homo矩阵H或者投影矩阵P,都是可以的。也可以说成,将a坐标系下的点投影到b坐标系下的transformation变换矩阵。
因此, sHc表示从image plane图像平面投影到sensor传感器平面的投影矩阵,以此类推,cHk表示从camera相机坐标系投影到image plane图像平面的投影矩阵,kHo表示从object/ world世界坐标系投影到camera相机坐标系下的投影矩阵,也可以称之为homo矩阵。
根据表述规则,罗列出不同坐标系下的坐标点的表示方法。
- World/ Object coordinate system.
So=[X,Y,Z]T, o for object.
- Camera coordinate system.
Sk=[kX,kY,kZ]T, k for camera.
- Image (plane) coordinate system.
Sc=[cx,cy]T, c for image or plane.
- Sensor coordinate system. This has some distortion and nonlinearity from image coord to sensor coord.
Ss=[sx,sy]T, s for sensor.
II. 转换关系,Transformation.
从目标的世界坐标系3D,转换到相机坐标系3D,然后转换到图像平面坐标系2D,最后转换到传感器坐标系2D。转换的矩阵关系为:
⎣⎡sxsy1⎦⎤=sHccHkkHo⎣⎢⎢⎡XYZ1⎦⎥⎥⎤
其中,image plane和camera system的原点,在x和y方向是重合的,只是说image plane的原点坐标相较于camera origin向z轴平移了c。因此,图像平面的原点可以表示为相机平面的z轴平移。
kOc=k[0,0,−c]T
下图展示了图像平面与相机平面的原点关系。
III. From the world coord to the sensor coord.
下面分析从世界坐标系,通过一系列转换,到图像和传感器平面坐标的关系。其中,目标到相机是外参,相机与图像平面,传感器平面,是内参。
他们之间的变换关系,对应的刚体变换到投影变换等不同方式。具体如下图:
3.1 Extrinsics,相机的外参
Extrinsic parameters describe the pose of the camera in the world.
3.1.1 从世界坐标系到相机坐标系
world coordinate to camera coordinate.
从世界坐标系到相机坐标系的转换是可逆的。知道了外参,就知道转换的矩阵。求逆就可以相互转换。
是目标点的3D位置与相机点的3D位置的相互关系所组成的homo矩阵。包括的目标位置和相机位置的一个平移和旋转关系。是一个刚体变换。只是旋转和平移。6个*度。Xp为投影的目标点的世界坐标系下的3D坐标。
kXp=kHXp
其中,kH矩阵为:
kH=[R0T−RXo1]
Xo为camera在世界坐标系下的坐标。通过kH矩阵,将世界坐标系下的点Xp投影到相机坐标系下的kXP。
下图是对上面的一个小的总结,手写的推导。
3.2 Intrinsics,相机的内参
Intrinsic parameters describe the mapping of the scene in front of the camera to the pixels in the final image (sensor).
其中,可逆的部分是从图像平面到sensor平面以及传感器的偏差,这里表述为model deviation。这两部分是可逆的,都是2D与2D直接的变换。而对于相机到图像,这是一个中心投影,由3D到2D的一个变换。在这个过程中,缺少了深度信息,因此,是不可逆的变换。
3.2.1 从相机到图像平面
相机坐标系到图像平面坐标系,camera coordinate to image plane。
这里采用了相似三角形的方式,来分析相机上的一点P和图像平面上的一点pˉ。其中,x,y采用的是相似三角形的变换,而z上所有的点,即深度信息,全是mapping到一个平面上,均为常数c,这个常数,也可以设置为focal length,焦距。
因此,得到了图像平面上的一点cxpˉ。
cxpˉ=cPkkXp
其中,cPk为:
cPk=⎣⎡c000c0001000⎦⎤
对kH和cPk做合并处理,就能够直接得到从世界坐标系投影到图像平面的矩阵cP。这里表示从世界坐标系投影到相机坐标系,通过kH;然后,在从相机投影到图像平面,通过cPk。
cP=cPkkH=⎣⎡c000c0001000⎦⎤[R0T−RXo1]
其中,由于cPk的最后一列全为0,对最后一列做简化,得到calibration matrix ck:
ck=⎣⎡c000c0001⎦⎤
得到最后的投影矩阵cP:
cP=ck[R−RXo]=ckR[I−Xo]3×4
因此,我们能够将任何的世界坐标的点Xp,投影到图像平面cx:
cx=ckR[I−Xo]Xp
3.2.2 从图像平面到传感器
image plane to sensors. 很多时候,传感器坐标系的初始原点(0,0)不是平面的中心点。有一个小的位移。一般还包括了剪切和尺度的变换。因此,从图像平面到传感器的变换矩阵sHc为:
sHc=⎣⎡100s1+m0xHyH1⎦⎤
将sHc矩阵与calibration matrix矩阵ck结合,得到:
K=sHcck=⎣⎡100s1+m0xHyH1⎦⎤⎣⎡c000c0001⎦⎤=⎣⎡c00csc(1+m)0xHyH1⎦⎤
其中,矩阵K是仿射变换,包含5个参数,*度为5:相机的常数,也就是焦距c, 原点xH,yH,尺度因子m,剪切因子s。
sx=KR[I−Xo]X
下图是一个对相机内参的总结,包括了上述讲的几个方面。
3.2.3 传感器平面的非线性误差
上面的所有设定都只考虑了线性的误差,在真实世界里面,具有镜头的畸变,传感器的不平整性。包括径向畸变和切向畸变。需要用一些参数来进行校正。这个矩阵为aHs:
aHs(x)=⎣⎡100010Δx(x,q)Δy(x,q)1⎦⎤
最后得到非线性误差后的在传感器上的图像坐标:
ax=aHssx
IV. 总结.
可以将整个投影看做两部分。
-
仿射变换,将世界坐标下的点Xp投影到传感器坐标系下为点sx:
sx=PXp
-
非线性变换,考虑传感器的非线性误差:
ax=aHs(x)sx
- 整个参数量为11个,包括了外参6个,内参5个。
下图对本文所描述的外参和内参做了总结。