⎡⎣⎢uv1⎤⎦⎥=s⎡⎣⎢fx00γfy0u0v01⎤⎦⎥[r1r2t]⎡⎣⎢xWyW1⎤⎦⎥(1) (1) [ u v 1 ] = s [ f x γ u 0 0 f y v 0 0 0 1 ] [ r 1 r 2 t ] [ x W y W 1 ]
其中,
u、v u 、 v 表示像素坐标系中的坐标,s表示尺度因子,
fx、fy、u0、v0、γ f x 、 f y 、 u 0 、 v 0 、 γ (由于制造误差产生的两个坐标轴偏斜参数,通常很小)表示5个相机内参,
R,t R , t 表示相机外参,
XW、YW、ZW X W 、 Y W 、 Z W (假设标定棋盘位于世界坐标系中
ZW=0 Z W = 0 的平面)表示世界坐标系中的坐标。
首先,我们假设两张图像中的对应点对齐次坐标为(x′,y′,1) ( x ′ , y ′ , 1 ) 和(x,y,1) ( x , y , 1 ) ,单应矩阵H定义为:
H=⎡⎣⎢h11h21h21h12h22h22h13h23h23⎤⎦⎥ H = [ h 11 h 12 h 13 h 21 h 22 h 23 h 21 h 2 2 h 23 ]
则有:
⎡⎣⎢x′y′1⎤⎦⎥=H=⎡⎣⎢h11h21h21h12h22h22h13h23h23⎤⎦⎥⎡⎣⎢xy1⎤⎦⎥ [ x ′ y ′ 1 ] = H = [ h 11 h 12 h 13 h 21 h 22 h 23 h 21 h 2 2 h 23 ] [ x y 1 ]
矩阵展开后有3个等式,将第3个等式代入前两个等式中可得:
x′=h11x+h12y+h13h31x+h32y+h33y′=h21x+h22y+h23h31x+h32y+h33 x ′ = h 11 x + h 12 y + h 13 h 31 x + h 32 y + h 33 y ′ = h 21 x + h 22 y + h 23 h 31 x + h 32 y + h 33
也就是说,一个点对对应两个等式。在此插入一个讨论:
单应矩阵H有几个自由度?
或许有人会说,9个啊,H矩阵不是9个参数吗?从h11 h 11 到h33 h 33 总共9个。真的是这样吗?实际上并不是,因为这里使用的是齐次坐标系,也就是说可以进行任意尺度的缩放。比如我们把hij h i j 乘以任意一个非零常数k并不改变等式结果:
x′=kh11x+kh12y+kh13kh31x+kh32y+kh33y′=kh21x+kh22y+kh23kh31x+kh32y+kh33 x ′ = k h 11 x + k h 12 y + k h 13 k h 31 x + k h 32 y + k h 33 y ′ = k h 21 x + k h 22 y + k h 23 k h 31 x + k h 32 y + k h 33
等价于:
x′=h11x+h12y+h13h31x+h32y+h33y′=h21x+h22y+h23h31x+h32y+h33 x ′ = h 11 x + h 12 y + h 13 h 31 x + h 32 y + h 33 y ′ = h 21 x + h 22 y + h 23 h 31 x + h 32 y + h 33
所以实际上单应矩阵H只有8个自由度。8自由度下H计算过程有两种方法。
第一种方法:直接设置 h33 h 33 =1,那么上述等式变为:
x′=h11x+h12y+h13h31x+h32y+1y′=h21x+h22y+h23h31x+h32y+1 x ′ = h 11 x + h 12 y + h 13 h 31 x + h 32 y + 1 y ′ = h 21 x + h 22 y + h 23 h 31 x + h 32 y + 1
第二种方法:将H添加约束条件,将H矩阵模变为1,如下:
x′=h11x+h12y+h13h31x+h32y+h33y′=h21x+h22y+h23h31x+h32y+h33h211+h212+h213+h221+h222+h223+h231+h232+h233=1 x ′ = h 11 x + h 12 y + h 13 h 31 x + h 32 y + h 33 y ′ = h 21 x + h 22 y + h 23 h 31 x + h 32 y + h 33 h 11 2 + h 12 2 + h 13 2 + h 21 2 + h 22 2 + h 23 2 + h 31 2 + h 32 2 + h 33 2 = 1
以第2种方法(用第1种也类似)为例继续推导,我们将如下等式(包含||H||=1约束):
x′=h11x+h12y+h13h31x+h32y+h33y′=h21x+h22y+h23h31x+h32y+h33 x ′ = h 11 x + h 12 y + h 13 h 31 x + h 32 y + h 33 y ′ = h 21 x + h 22 y + h 23 h 31 x + h 32 y + h 33
乘以分母展开,得到:
(h31x+h32y+h33)x′=h11x+h12y+h13(h31x+h32y+h33)y′=h21x+h22y+h23 ( h 31 x + h 32 y + h 33 ) x ′ = h 11 x + h 12 y + h 13 ( h 31 x + h 32 y + h 33 ) y ′ = h 21 x + h 22 y + h 23
整理,得到:
h11x+h12y+h13−h31xx′−h32yx′−h33x′=0h21x+h22y+h23−h31xy′+h32yy′+h33y′=0 h 11 x + h 12 y + h 13 − h 31 x x ′ − h 32 y x ′ − h 33 x ′ = 0 h 21 x + h 22 y + h 23 − h 31 x y ′ + h 32 y y ′ + h 33 y ′ = 0
M=⎡⎣⎢fx00γfy0u0v01⎤⎦⎥ M = [ f x γ u 0 0 f y v 0 0 0 1 ]
记:
B=(M−1)TM−1=⎡⎣⎢⎢⎢⎢⎢⎢⎢1f2x−γf2xfyv0γ−u0fyf2xfy−γf2xfyγ2f2xf2y−γv0γ−u0fyf2xf2y−v0f2yv0γ−u0fyf2xfy−γv0γ−u0fyf2xf2y−v0f2y(v0γ−u0fy)2f2xf2y+v20f2y+1⎤⎦⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢B11B21B31B12B22B32B13B23B33⎤⎦⎥ B = ( M − 1 ) T M − 1 = [ 1 f x 2 − γ f x 2 f y v 0 γ − u 0 f y f x 2 f y − γ f x 2 f y γ 2 f x 2 f y 2 − γ v 0 γ − u 0 f y f x 2 f y 2 − v 0 f y 2 v 0 γ − u 0 f y f x 2 f y − γ v 0 γ − u 0 f y f x 2 f y 2 − v 0 f y 2 ( v 0 γ − u 0 f y ) 2 f x 2 f y 2 + v 0 2 f y 2 + 1 ] = [ B 11 B 12 B 13 B 21 B 22 B 23 B 31 B 32 B 33 ]
{hT1Bh2=0hT1Bh1=hT2Bh2 { h 1 T B h 2 = 0 h 1 T B h 1 = h 2 T B h 2
上面两约束中的式子均可写为通式
hTiBhj h i T B h j
的形式,定义3X3的单应矩阵H=[h1h2h3] H = [ h 1 h 2 h 3 ] 的第i i 列列向量:
hi=[hi1hi2hi3]
将如下表达式代入上述的约束单项式:
hTiBhj=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢hi1hj1hi1hj2+hi2hj1hi2hj2hi3hj1+hi1hj3hi3hj2+hi2hj3hi3hj3⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢B11B12B22B13B23B33⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥ h i T B h j = [ h i 1 h j 1 h i 1 h j 2 + h i 2 h j 1 h i 2 h j 2 h i 3 h j 1 + h i 1 h j 3 h i 3 h j 2 + h i 2 h j 3 h i 3 h j 3 ] [ B 11 B 12 B 22 B 13 B 23 B 33 ]
为了简化表达形式,令:
vij=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢hi1hj1hi1hj2+hi2hj1hi2hj2hi3hj1+hi1hj3hi3hj2+hi2hj3hi3hj3⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥,b=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢B11B12B22B13B23B33⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥ v i j = [ h i 1 h j 1 h i 1 h j 2 + h i 2 h j 1 h i 2 h j 2 h i 3 h j 1 + h i 1 h j 3 h i 3 h j 2 + h i 2 h j 3 h i 3 h j 3 ] , b = [ B 11 B 12 B 22 B 13 B 23 B 33 ]
⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪fx=λB11−−−√fy=λB11(B11B22−B212)−−−−−−−−−√u0=γv0fy−B13f2xλv0=B12B13−B11B23B11B22−B212γ=B12f2xfyλλ=B33−[B213+v0(B12B13−B11B23)]B11 { f x = λ B 11 f y = λ B 11 ( B 11 B 22 − B 12 2 ) u 0 = γ v 0 f y − B 13 f x 2 λ v 0 = B 12 B 13 − B 11 B 23 B 11 B 22 − B 12 2 γ = B 12 f x 2 f y λ λ = B 33 − [ B 13 2 + v 0 ( B 12 B 13 − B 11 B 23 ) ] B 1 1
得到内参数后,内参矩阵M也已知。单应矩阵H也已知,因此可继续求得外参数:
r1=λM−1h1,r2=λM−1h2r3=r1×r2,t=λM−1h3 r 1 = λ M − 1 h 1 , r 2 = λ M − 1 h 2 r 3 = r 1 × r 2 , t = λ M − 1 h 3
其中又由旋转矩阵性质有
||r1||=||λM−1h1||=1 | | r 1 | | = | | λ M − 1 h 1 | | = 1
f(xij)=12π−−√e−(x′(M,Ri,ti,Xj))−xijσ2 f ( x i j ) = 1 2 π e − ( x ′ ( M , R i , t i , X j ) ) − x i j σ 2
然后,构造似然函数:
L(A,Ri,ti,Xj)=∏i=j=1n,mf(xij)=e−∑ni=1∑mj=1(x′(M,Ri,ti,Xj))−xijσ2 L ( A , R i , t i , X j ) = ∏ i = j = 1 n , m f ( x i j ) = e − ∑ i = 1 n ∑ j = 1 m ( x ′ ( M , R i , t i , X j ) ) − x i j σ 2
现在让L取得最大值,则可令下式最小:
∑i=1n∑j=1m||xij−x′(M,Ri,ti,Xj)||2 ∑ i = 1 n ∑ j = 1 m | | x i j − x ′ ( M , R i , t i , X j ) | | 2