摘要:本文首先介绍了针孔相机模型,然后推导四个坐标轴变换的关系,引出R、T、K、D中包含相机的5个内参,6个外参,5个畸变参数。相机的标定是从空间点及其对应的像素点,获得相机的位置信息和内部参数信息的过程,16个相机参数的总结为此提供了模型基础。
相机中有四个坐标系,分别为{world},{camera},{image},{pixel}
图片说明:{camera}:O c _c c-x c _c cy c _c cz c _c c,相机中心点Oc,焦距f。{picture}:O-xy,像平面π。主轴:从 O c O_c Oc出发,垂直于像平面的射线 。主点:主轴与像平面的交点p。
介绍如何从世界坐标轴,通过相机坐标轴和像面坐标轴,得到像素坐标轴的变换的过程,即 w o r l d : P w = ( x w , y w , z w ) T world:P_w=(x_w,y_w,z_w)^T world:Pw=(xw,yw,zw)T-----> c a m e r a : P c = ( x c , y c , z c ) T camera:P_c=(x_c,y_c,z_c)^T camera:Pc=(xc,yc,zc)T------> i m a g e : m = ( x p , y p , 1 ) T image:m=(x_p,y_p,1)^T image:m=(xp,yp,1)T-----> p i x e l : P i x = ( u , v , 1 ) T pixel:Pix=(u,v,1)^T pixel:Pix=(u,v,1)T
设某点在{world}中的坐标为 P w = ( x w , y w , z w ) T Pw=(x_w,y_w,z_w)^T Pw=(xw,yw,zw)T,在{camera}中的坐标为 P c = ( x c , y c , z c ) T Pc=(x_c,y_c,z_c)^T Pc=(xc,yc,zc)T。则
P c = [ R T 0 1 ] P w P_c=\begin{bmatrix}R&T\\ 0&1\end{bmatrix}P_w Pc=[R0T1]Pw
其中,R为正交旋转矩阵,
R = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] R=\begin{bmatrix} r_{11} &r_{12}&r_{13}\\r_{21} &r_{22}&r_{23}\\ r_{31} &r_{32}&r_{33}\end{bmatrix} R=⎣⎡r11r21r31r12r22r32r13r23r33⎦⎤
T为平移矩阵, T = [ t x t y t z ] T T=\begin{bmatrix}t_x&t_y&t_z\end{bmatrix}^T T=[txtytz]T
设空间点 X c X_c Xc在{camera}下: P c = ( x c , y c , z c , 1 ) T P_c=(xc,yc,zc,1)^T Pc=(xc,yc,zc,1)T,其像点m在{image}的齐次坐标为 m = ( x p , y p , 1 ) T m=(x_p,y_p,1)^T m=(xp,yp,1)T。由图中相似三角形可得,
{ x p = f x c z c y p = f y c z c \left\{\begin{matrix} x_p=\frac{fx_c}{z_c} \\ \\ y_p=\frac{fy_c}{z_c}\end{matrix}\right. ⎩⎨⎧xp=zcfxcyp=zcfyc
写成矩阵表示为,
z c m = [ f 0 0 0 0 f 0 0 0 0 1 0 ] P c z_cm=\begin{bmatrix} f& 0& 0& 0 \\ 0& f& 0& 0 \\ 0& 0& 1& 0 \end{bmatrix}P_c zcm=⎣⎡f000f0001000⎦⎤Pc
实际中,主点可能不在图像坐标系原点,若主点在图像坐标系中的坐标为 p = ( x 0 , y 0 , 1 ) T p=(x_0,y_0,1)^T p=(x0,y0,1)T
则
z c m = [ f x f y 1 ] = [ f 0 x 0 0 0 f y 0 0 0 0 1 0 ] P c z_cm=\begin{bmatrix}fx\\ fy\\ 1\end{bmatrix}=\begin{bmatrix} f& 0& x_0& 0 \\ 0& f& y_0& 0 \\ 0& 0& 1& 0 \end{bmatrix}P_c zcm=⎣⎡fxfy1⎦⎤=⎣⎡f000f0x0y01000⎦⎤Pc
假设一个像素的长和宽分别为dx,dy,设像素坐标 P i x = ( u , v , 1 ) T Pix=(u,v,1)^T Pix=(u,v,1)T,则
[ u v 1 ] = [ 1 / d x 0 0 0 1 / d y 0 0 0 1 ] [ x p y p 1 ] \begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}1/d_x&0&0\\0&1/d_y&0\\0&0&1\end{bmatrix}\begin{bmatrix}x_p\\y_p\\1\end{bmatrix} ⎣⎡uv1⎦⎤=⎣⎡1/dx0001/dy0001⎦⎤⎣⎡xpyp1⎦⎤
结合{camera}到{image}的变换,则{camera}到{pixel}的变换矩阵K为
K = [ 1 / d x 0 0 0 1 / d y 0 0 0 1 ] [ f 0 x 0 0 f y 0 0 0 1 ] = [ f x 0 u 0 0 f y v 0 0 0 1 ] K=\begin{bmatrix}1/d_x&0&0\\0&1/d_y&0\\0&0&1\end{bmatrix} \begin{bmatrix}f&0&x_0\\ 0& f& y_0 \\ 0& 0& 1\end{bmatrix} =\begin{bmatrix}f_x&0&u_0\\0&f_y&v_0\\0&0&1 \end{bmatrix} K=⎣⎡1/dx0001/dy0001⎦⎤⎣⎡f000f0x0y01⎦⎤=⎣⎡fx000fy0u0v01⎦⎤
其中, f x = f / d x f_x=f/dx fx=f/dx, f y = f / d y f_y=f/dy fy=f/dy,称为相机在u轴和v轴方向上的尺度因子。
相机主点为 ( u 0 , v 0 ) T = ( x 0 / d x , y 0 / d y ) T (u_0,v_0)^T=(x_0/dx,y_0/dy)^T (u0,v0)T=(x0/dx,y0/dy)T
四个坐标系的变换过程: w o r l d : P w = ( x w , y w , z w ) T world:P_w=(x_w,y_w,z_w)^T world:Pw=(xw,yw,zw)T-----> c a m e r a : P c = ( x c , y c , z c ) T camera:P_c=(x_c,y_c,z_c)^T camera:Pc=(xc,yc,zc)T-----> i m a g e : m = ( x p , y p , 1 ) T image:m=(x_p,y_p,1)^T image:m=(xp,yp,1)T-----> p i x e l : P i x = ( u , v , 1 ) T pixel:Pix=(u,v,1)^T pixel:Pix=(u,v,1)T,
矩阵表示为:
z c [ u v 1 ] = K ⋅ [ R T 0 1 ] [ x w y w z w 1 ] z_c\begin{bmatrix}u\\ v\\ 1\end{bmatrix}=K·\begin{bmatrix} R&T \\0&1\end{bmatrix} \begin{bmatrix}x_w\\y_w\\z_w\\1\end{bmatrix} zc⎣⎡uv1⎦⎤=K⋅[R0T1]⎣⎢⎢⎡xwywzw1⎦⎥⎥⎤
径向畸变(桶形畸变和枕形畸变)产生原因:光线在远离透镜中心的地方偏折更大。矫正公式:
x c o r r e c t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) x_{corrected}=x(1+k_1r^2+k_2r^4+k_3r^6) xcorrected=x(1+k1r2+k2r4+k3r6) y c o r r e c t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y_{corrected}=y(1+k_1r^2+k_2r^4+k_3r^6) ycorrected=y(1+k1r2+k2r4+k3r6)
切向畸变产生原因:透镜不完全平行于图像平面。矫正公式:
x c o r r e c t e d = x + [ 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) ] x_{corrected}=x+[2p_1xy+p_2(r^2+2x^2)] xcorrected=x+[2p1xy+p2(r2+2x2)] y c o r r e c t e d = y + [ p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y ] y_{corrected}=y+[p_1(r^2+2y^2)+2p_2xy] ycorrected=y+[p1(r2+2y2)+2p2xy]
由此得到相机的5个畸变参数: D ( k 1 , k 2 , k 3 , p 1 , p 2 ) D(k_1,k_2,k_3,p_1,p_2) D(k1,k2,k3,p1,p2)
综上,16个单目相机的参数:
推导:
1.【旋转矩阵】https://www.cnblogs.com/caster99/p/4703033.html
旋转矩阵是一个完美的矩阵——正交矩阵。它的行列式为1,且每个列向量都是单位向量且相互正交,它的逆等于它的转置。
2.【平移矩阵】http://frankorz.com/2017/09/24/matrix-transformation-2/ 平移矩阵,比较平移旋转及旋转平移,说明先旋转后平移的好处
3.【反射矩阵推导】https://www.cnblogs.com/wantnon/p/5630915.html
4.【相机畸变详细推导 】https://blog.csdn.net/waeceo/article/details/51024396
5.【6个参数 旋转平移下坐标变换】https://blog.csdn.net/xuelabizp/article/details/50314633
参考:
1.https://blog.csdn.net/xuelabizp/article/details/50314633
2.https://blog.csdn.net/u010128736/article/details/52850444
3.https://www.cnblogs.com/Jessica-jie/p/6596450.html?tdsourcetag=s_pctim_aiomsg
4.https://blog.csdn.net/yangdashi888/article/details/51356385
5.https://blog.csdn.net/a083614/article/details/78579163
6.https://blog.csdn.net/lql0716/article/details/71973318?locationNum=8&fps=1)