张氏标定法
张氏标定法是张正友博士在1999年发表在国际顶级会议ICCV上的论文《Flexible Camera Calibration By Viewing a Plane From Unknown Orientations》中,提出的一种利用平面棋盘格进行相机标定的实用方法。
符号定义
世界坐标系坐标:(Xw,Yw,Zw)
相机坐标系坐标:(Xc,Yc,Zc),坐标系Z轴与光轴重合,正方向为光轴方向,X轴正方向向右,Y轴正方向向下
像素坐标系坐标:(u,v),图像左上角为坐标原点,u正方向向右,v正方向向下
图像坐标系中心点在像素坐标下的坐标:(u0,v0)
相机焦距:f,相机坐标系中心与图像坐标系中心的距离
单个像素的横向尺寸:dx
单个像素的纵向尺寸:dy
棋盘平面到像素平面的单应矩阵:H
标定设置

- 拍摄一组不同方向棋盘格的图片,可以通过移动相机来实现,也可以移动标定图片来实现
标定原理
坐标变换关系
-
棋盘格上点p的世界坐标(Xw,Yw,0)到其相机坐标系的坐标(Xc,Yc,Zc)的变换关系如下
XcYcZc=RXwYw0+t=[R1R2t]XwYw1(1)
其中,R和t分别是相机坐标系相对于世界坐标系的旋转矩阵和平移向量,R1和R2是旋转矩阵R的前两列。
-
棋盘格上点p的相机坐标系到像素坐标系的变换关系如下
uv1=Zc1dxf00γdyf0u0u01XcYcZc(2)
其中,γ是由于制造误差产生的两个坐标轴偏斜参数,通常很小。
-
令s=Zc1,fx=dxf,fy=dyf,令相机内参矩阵为K,即
K=fx00γfy0u0v01(3)
则棋盘格上点p的世界坐标(Xw,Yw,0)与其像素坐标的变换关系如下
uv1=sKXcYcZc=sK[R1R2t]XwYw1(4)
单应矩阵求解
对于棋盘格相对于相机的每个摆放位置,即对于每个具体的R和t,都对应一个具体的棋盘格平面到像素坐标的一个单应变换,令单应变换矩阵为H,则
H=sK[R1R2t](5)
假设棋盘格上的角点个数为n,分别为p1,p2,…,pn,根据棋盘格的每个格子的尺寸,可以计算出棋盘格上每个角点的世界坐标
(x1,y1,0),(x2,y2,0),…,(xn,yn,0)
根据图像角点检测,计算出棋盘格上每个角点的像素坐标
(x1′,y1′),(x2′,y2′),…,(xn′,yn′)
则H满足
xi′yi′1∼Hxiyi1(6)
其中∼为对应坐标比例相等,i=1,2,…,n. 当n≥4时,可以计算得到H。不过,采用直接线性解法通常很难得到最优解,所以实际使用中一般会用其他优化方法,如奇异值分解、Levenberg-Marquarat(LM)算法等进行求解。
单应变换矩阵H与相机内参K之间的关系
将单应矩阵表示为列形式,根据上面的讨论,有
H=[H1,H2,H3]=sK[R1,R2,t](7)
即
H1=sKR1 或 R1=s1K−1H1H2=sKR2 或 R2=s1K−1H2H3=sKt 或 t=s1K−1H3(8)
根据旋转矩阵的性质可知,R1TR1=R2TR2=1,R1TR2=R2TR1=0,因此可得
s21H1T(K−1)TK−1H1=s21H2T(K−1)TK−1H2=1s21H1T(K−1)TK−1H2=0(9)
令
B=(K−1)TK−1=fx21−fx2fyγfx2fyv0γ−u0fy−fx2fyγfx2fy2γ2+fy21−fx2fy2γ(v0γ−u0fy)−fy2v0fx2fyv0γ−u0fy−fx2fy2γ(v0γ−u0fy)−fy2v0fx2fy2(v0γ−u0fy)2+fy2v02+1=B11B21B31B12B22B32B13B23B33(10)
可知B是对称矩阵,因此未知参数只有6个。将B带入上面式子,可得
H1TBH1=H2TBH2H1TBH2=0(11)
令Hi=[hi1,hi2,hi3]T,则有
HiTBHj=hi1hj1hi1hj2+hi2hj1hi2hj2hi3hj1+hi1hj3hi3hj2+hi2hj3hi3hj3TB11B12B22B13B23B33(12)
令
vij=hi1hj1hi1hj2+hi2hj1hi2hj2hi3hj1+hi1hj3hi3hj2+hi2hj3hi3hj3, b=B11B12B22B13B23B33(13)
则有
HiTBHj=vijTb(14)
因此,最初的两个约束条件,最终可以转化为如下形式
(v11T−v22T)b=0v12Tb=0⟶ [v11T−v22Tv12T]b=0(15)
计算相机内参和外参
假设针对棋盘格不同摆放位置,进行了m次拍摄,每个具体摆放对应的旋转和平移为
(R(1),t(1)),(R(2),t(2)),…,(R(m),t(m))
分别计算得到的单应变换矩阵为
H(i)=s(i)K[R1(i)R2(i)t(i)](16)
其中i=1,2,…,m. 根据单应矩阵和相机内参之间的关系可知,b有6个未知数需要求解,因此需要6个约束方程构成的方程组才能求解b,而每个单应矩阵提供两个约束方程,因此要求解b,至少需要m≥3.
根据计算得到的b的每个分量,与B中对应分量相差一个常量倍数,即存在λ使得
b=B^11B^12B^22B^13B^23B^33=λB11λB12λB22λB13λB23λB33(17)
因此,可得
fx21−fx2fyγfx2fyv0γ−u0fy−fx2fyγfx2fy2γ2+fy21−fx2fy2γ(v0γ−u0fy)−fy2v0fx2fyv0γ−u0fy−fx2fy2γ(v0γ−u0fy)−fy2v0fx2fy2(v0γ−u0fy)2+fy2v02+1=B11B21B31B12B22B32B13B23B33=B11B12B13B12B22B23B13B23B33=λ1B^11λ1B^12λ1B^13λ1B^12λ1B^22λ1B^23λ1B^13λ1B^23λ1B^33(18)
根据公式(10),可以求得相机内参K中每个位置的值
⎩⎨⎧fx=B^11λfy=B^11B^22−B^122λB^11u0=fyγv0−λB^13fx2v0=B^11B^22−B^122B^12B^13−B^11B^23γ=−λB^12fx2fyλ=B^33−B^11B^132+v0(B^12B^13−B^11B^23)(19)
得到内参后,根据公式(8),以及∥R1∥=∥R2∥=1,R3=R1×R2,可计算出外参R和t.
注: 公式(19)中关于λ的表达式的计算推导如下
B^33−B^11B^132+v0(B^12B^13−B^11B^23)=λB33−λB11(λB13)2+v0(λB12λB13−λB11λB23)=λ(B33−B11B132+v0(B12B13−B11B23))=λ[fx2fy2(v0γ−u0fy)2+fy2v02+1] λ−fx21(fx2fyv0γ−u0fy)2+v0[(−fx2fyγ)(fx2fyv0γ−u0fy)−(fx21)(−fx2fy2γ(v0γ−u0fy)−fy2v0)]=λ[fx2fy2(v0γ−u0fy)2+fy2v02+1] λ−[fx2fy2(v0γ−u0fy)2+v0[(−fyγ)(fx2fyv0γ−u0fy)−(−fx2fy2γ(v0γ−u0fy)−fy2v0)]]=λ[fx2fy2(v0γ−u0fy)2+fy2v02+1] −λ[fx2fy2(v0γ−u0fy)2−fx2fy2v0γ(v0γ−u0fy)+fx2fy2v0γ(v0γ−u0fy)+fy2v02]=λ⋅1=λ
实际应用中计算相机内外参的方法
上述的推导结果是基于理想情况下的解,从理论上证明了张氏标定算法的可行性。但在实际标定过程中,一般使用最大似然估计进行优化。假设我们拍摄了m张标定图片,每张图片里有n个棋盘格角点。
令,三维空间点pj在图片上对应的二维像素为xij,三维空间点经过相机内参K,外参Ri和ti变换后得到的二维像素为x′(K,Ri,ti,pj),其中i=1,2,…,m,j=1,2,…,n.
通过最小化每个空间点的实际像素值与经过计算得到的像素值的距离,来求解上述最大似然估计问题
i=1∑mj=1∑n∥xij−x′(K,Ri,ti,pj)∥2(20)
从而解出相机具体的内参K和外参R、t.
相机存在畸变的情况下,计算相机内外参和畸变参数
透镜的畸变主要分为径向畸变和切向畸变,还有薄透镜畸变等等,但都没有径向和切向畸变影响显著,所以我们在这里只考虑径向和切向畸变。
径向畸变是由于透镜形状的制造工艺导致。且越向透镜边缘移动径向畸变越严重。下图所示是径向畸变的两种类型:桶形畸变和枕形畸变。

矫正径向畸变前后的图像坐标关系为
{x^=x(1+k1r2+k2r4+k3r6)y^=y(1+k1r2+k2r4+k3r6)(21)
切向畸变是由于透镜和CMOS或者CCD的安装位置误差导致。因此,如果存在切向畸变,一个矩形被投影到成像平面上时,很可能会变成一个梯形。切向畸变需要两个额外的畸变参数来描述,矫正前后的图像坐标关系为
{x^=x+[2p1xy+p2(r2+2x2)]y^=y+[p1(r2+2y2)+2p2xy](22)
径向畸变和切向畸变联合矫正图像坐标关系式为
{x^=x(1+k1r2+k2r4+k3r6)+[2p1xy+p2(r2+2x2)]y^=y(1+k1r2+k2r4+k3r6)+[p1(r2+2y2)+2p2xy](23)
其中,(x,y)为理想的无畸变的图像坐标,(x^,y^)为畸变后的图像坐标,r为图像坐标点到图像中心点的距离,即r2=x2+y2,k1,k2,k3是径向畸变参数,p1,p2切向畸变参数。
假设(u,v)是理想无畸变的像素坐标,(u^,v^)是畸变后的像素坐标,则根据内参K和图像坐标与像素坐标的关系,它们与(x,y)和(x^,y^)的关系如下
⎩⎨⎧u=u0+fxx+γyv=v0+fyy−−−−−−−−u^=u0+fxx^+γy^v^=v0+fyy^⟹⎩⎨⎧x=fxu−u0−fxfyγ(v−v0)y=fyv−v0−−−−−−−−x^=fxu^−u0−fxfyγ(v^−v0)y^=fyv^−v0(24)
把(24)带入(21)可得
⟹⎩⎨⎧fxu^−u0−fxfyγ(v^−v0)=(fxu−u0−fxfyγ(v−v0))(1+k1r2+k2r4+k3r6)fyv^−v0=fyv−v0(1+k1r2+k2r4+k3r6){u^=u+(u−u0)(k1r2+k2r4+k3r6)v^=v+(v−v0)(k1r2+k2r4+k3r6)(25)
把(24)带入(22)可得
⟹⎩⎨⎧fxu^−u0−fxfyγ(v^−v0)=fxu−u0−fxfyγ(v−v0)+[2p1xy+p2(r2+2x2)]fyv^−v0=fyv−v0+[p1(r2+2y2)+2p2xy]{u^=u+fx[2p1xy+p2(r2+2x2)]+γ[p1(r2+2y2)+2p2xy]v^=v+fy[p1(r2+2y2)+2p2xy](26)
把(24)带入(23)可得
⟹⎩⎨⎧fxu^−u0−fxfyγ(v^−v0)=(fxu−u0−fxfyγ(v−v0))(1+k1r2+k2r4+k3r6)+[2p1xy+p2(r2+2x2)]fyv^−v0=fyv−v0(1+k1r2+k2r4+k3r6)+[p1(r2+2y2)+2p2xy]⎩⎨⎧u^=u+(u−u0)(k1r2+k2r4+k3r6)+fx[2p1xy+p2(r2+2x2)]+γ[p1(r2+2y2)+2p2xy]v^=v+(v−v0)(k1r2+k2r4+k3r6)+fy[p1(r2+2y2)+2p2xy](27)
现在考虑受透镜畸变影响时,相机内外参的求解。由于径向畸变的影响相对较明显,实践中主要考虑径向畸变参数,通常只考虑径向畸变的前两个参数k1,k2(增加更多的参数会使得模型变的复杂且不稳定),新的待优化函数如下
i=1∑mj=1∑n∥xij−x′(K,Ri,ti,pj,k1,k2)∥2(28)
上述非线性优化问题通常用Levenberg-Marquardt(LM)算法进行迭代求解,从而解出相机具体的内参K和外参R、t,还有畸变参数k1,k2.