张正友相机标定算法详解
1.齐次表示法与一些基本结论
1.1 点与直线的齐次表示
在射影几何中,通常用齐次方式来表达点与直线。比如 p = ( u , v ) p=(u,v) p=(u,v)被表示成 p ^ = ( x 1 , x 2 , x 3 ) \hat{p}= (x_1,x_2,x_3) p^=(x1,x2,x3)其中 u = x 1 x 3 , v = x 2 x 3 u=\frac{x_1}{x_3},v=\frac{x_2}{x_3} u=x3x1,v=x3x2。如此就将 p ^ \hat{p} p^称为 p p p的齐次表示。
同样的直线方程 a x + b y + c = 0 ax+by+c=0 ax+by+c=0的齐次表示方式为 I = ( a , b , c ) I=(a,b,c) I=(a,b,c);
1.2几个常用结论
- 两条直线的交点 x = I × I ′ x=I\times I^{'} x=I×I′
- 过两点的一条直线 I = x × x ′ I=x\times x^{'} I=x×x′
- 点 x x x在直线 I I I上 x T I = 0 x^{T}I=0 xTI=0
具体证明如下图所示:
1.3理想点与无穷远直线
- 理想点 p = ( x 1 , x 2 , 0 ) p=(x_1,x_2,0) p=(x1,x2,0)
- 无穷远直线 I = ( a , b , 0 ) I=(a,b,0) I=(a,b,0)
2.张正友标定算法的数学推导
对于简单的相机模型有:
当把世界坐标系的 X Y XY XY平面选在与标定板平面重合时,这时便有:
当我们令:
根据
于是: h 1 T A − T A − 1 h 2 = 0 {h_1}^TA^{-T}A^{-1}h_2=0 h1TA−TA−1h2=0且 h 1 − T A − T A − 1 h 1 = h 2 T A − T A − 1 h 2 . . . . . . . . . . . . ( 1 ) {h_1}^{-T}A^{-T}A^{-1}h_1={h_2}^TA^{-T}A^{-1}h_2............(1) h1−TA−TA−1h1=h2TA−TA−1h2............(1)
此时令:
当我们令
于是有
h
i
T
A
−
T
A
−
1
h
j
=
h
i
T
B
h
j
{h_i}^TA^{-T}A^{-1}h_j={h_i}^TBh_j
hiTA−TA−1hj=hiTBhj,化简得到:
所以: h i T B h j = v i j T b {h_i}^TBh_j={v_{ij}^T}b hiTBhj=vijTb
于是:
这样就可以解出 b b b向量,于是则有:
r 1 = λ A − 1 h 1 r_1=\lambda A^{-1}h_1 r1=λA−1h1, r 2 = λ A − 1 h 2 r_2=\lambda A^{-1}h_2 r2=λA−1h2, r 3 = r 1 × r 2 r_3=r_1\times r_2 r3=r1×r2, t = λ A − 1 h 3 t=\lambda A^{-1}h_3 t=λA−1h3其中 λ \lambda λ是归一化因子;
3.从绝对二次曲线的角度推导张正友标定算法
在本节主要讲解绝对二次曲线的概念、虚圆点的概念、绝对二次曲线与虚圆点的关系、绝对二次曲线的像与相机内参的关系以及从绝对二次曲线的角度去推导张正友的标定算法。
3.1 绝对二次曲线
-
二次曲线: a x 1 2 + b x 1 x 2 + c x 2 2 + d x 1 x 2 + e x 2 x 3 + f x 3 2 = 0 ax_1^2+bx_1x_2+cx_2^2+dx_1x_2+ex_2x_3+fx_3^2=0 ax12+bx1x2+cx22+dx1x2+ex2x3+fx32=0写成矩阵的形式:
-
二次曲线的射影变换: x ′ = H x x^{'}=Hx x′=Hx,那么二次曲线的变换为 C ′ = H − T C H − 1 . . . . . ( 2 ) C^{'}=H^{-T}CH^{-1}.....(2) C′=H−TCH−1.....(2),具体推导如下:
-
虚圆点:圆也是一种特殊的二次曲线,其中 a = c = 1 , b = 0 a=c=1,b=0 a=c=1,b=0,于是圆的方程为:
x 1 2 + x 2 2 + d x 1 x 3 + e x 2 x 3 + f x 3 2 = 0 x_1^2+x_2^2+dx_1x_3+ex_2x_3+fx_3^2=0 x12+x22+dx1x3+ex2x3+fx32=0,圆与无穷远直线 I o o I_{oo} Ioo相交,则有 x 3 = 0 x_3=0 x3=0
因此 x 1 2 + x 2 2 = 0 x_1^2+x_2^2=0 x12+x22=0,显然 I = [ 1 , i , 0 ] T I=[1,i,0]^T I=[1,i,0]T, J = [ 1 , − i , 0 ] T J=[1,-i,0]^T J=[1,−i,0]T是 x 1 2 + x 2 2 = 0 x_1^2+x_2^2=0 x12+x22=0的两个解。于是我们称 I , J I,J I,J为虚圆点。
-
绝对二次曲线的概念-无穷远平面上的一条二次曲线
- 二次曲线方程:
写成矩阵形式:
- 二次曲线方程:
显然
I
和
J
I和J
I和J都经过上述方程。
### 3.2 绝对二次曲线的像
无穷远平面上的一点,可以写成:
相机矩阵为:
那么 X o o X_{oo} Xoo在图像平面上的投影为:
因此在 H = K R H=KR H=KR的变换下,根据(1)式,绝对二次曲线的变换为:
这就给出了相机内参和绝对二次曲线的像的关系。
3.3 张正友标定算法的推导
具体推导过程如下:
对于每一个标定板有四个角点,其角点的坐标可以设置为 ( 0 , 0 ) T , ( 1 , 0 ) T , ( 0 , 1 ) T , ( 1 , 1 ) T (0,0)^T,(1,0)^T,(0,1)^T,(1,1)^T (0,0)T,(1,0)T,(0,1)T,(1,1)T,通过这四个角点可以计算出标定板平面与图像平面的单应矩阵 H = [ h 1 , h 2 , h 3 ] H=[h_1,h_2,h_3] H=[h1,h2,h3]。于是虚圆点 I = [ 1 , i , 0 ] T I=[1,i,0]^T I=[1,i,0]T, J = [ 1 , − i , 0 ] T J=[1,-i,0]^T J=[1,−i,0]T被 H H H映射到 h 1 ± i h 2 h_1\pm ih_2 h1±ih2
又因这些被映射到图像平面上的点会被绝对二次曲线的像经过,于是: ( h 1 ± i h 2 ) T w ( h 1 ± i h 2 ) = 0 (h_1\pm ih_2)^Tw(h_1\pm ih_2)=0 (h1±ih2)Tw(h1±ih2)=0
于是有: ( h 1 T w h 1 − h 2 T w h 2 ) + i ( h 1 T w h 2 + h 2 T w h 1 ) = 0 (h_{1}^Twh_1-h_2^Twh_2)+i(h_1^Twh_2+h_2^Twh_1)=0 (h1Twh1−h2Twh2)+i(h1Twh2+h2Twh1)=0
显然: ( h 1 T w h 1 − h 2 T w h 2 ) = 0 (h_{1}^Twh_1-h_2^Twh_2)=0 (h1Twh1−h2Twh2)=0且 ( h 1 T w h 2 + h 2 T w h 1 ) (h_1^Twh_2+h_2^Twh_1) (h1Twh2+h2Twh1)=0;
于是: h 1 T w h 1 = h 2 T w h 2 h_{1}^Twh_1=h_2^Twh_2 h1Twh1=h2Twh2
又因为 w = ( K T K ) − 1 w=(K^TK)^{-1} w=(KTK)−1,因此 w w w是对称矩阵,所以 h 1 T w h 2 = h 2 T w h 1 = 0 h_1^Twh_2=h_2^Twh_1=0 h1Twh2=h2Twh1=0;
这就从绝对二次曲线的角度推出了与第二部分中**(1)式**相同的结论。
;
于是: h 1 T w h 1 = h 2 T w h 2 h_{1}^Twh_1=h_2^Twh_2 h1Twh1=h2Twh2
又因为 w = ( K T K ) − 1 w=(K^TK)^{-1} w=(KTK)−1,因此 w w w是对称矩阵,所以 h 1 T w h 2 = h 2 T w h 1 = 0 h_1^Twh_2=h_2^Twh_1=0 h1Twh2=h2Twh1=0;
这就从绝对二次曲线的角度推出了与第二部分中**(1)式**相同的结论。