相机标定(张正友标定算法)解读与实战一

参考论文:

https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr98-71.pdf

针孔相机模型

世界坐标系
相机坐标系
归一化平面坐标系
像平面坐标系
像素坐标系

关于相机模型的文章太多了,要搞清楚,首先要弄清楚这5个坐标系,以及他们之间的转换关系。我这里开始由世界坐标系一步一步推导到像素坐标系进行讲解。

  • 世界坐标系到相机坐标系

    实际上是两个三维坐标系之间的转换关系,属于刚体变换,也就是说只有旋转R和平移t变换。旋转矩阵R是正交矩阵的单位矩阵,并且R的转置等于R的逆。 X c X_c Xc相机坐标系的点, X w X_w Xw世界坐标系的点。
    .
    X c = [ x c y c z c ] , X w = [ x w y w z w ] X_c = \left[ \begin{matrix} x_c \\ y_c \\ z_c \end{matrix} \right], X_w=\left[ \begin{matrix} x_w \\ y_w \\ z_w \end{matrix} \right] Xc=xcyczc,Xw=xwywzw

X c = R X w + t R T = R − 1 X_c = RX_w + t \\ R^T=R^{-1} Xc=RXw+tRT=R1
R表示旋转矩阵,t表示平移向量,如果把 X c , X w X_c, X_w Xc,Xw写成齐次向量的形式,那么他们之间的变换关系就可以写成矩阵相乘的形式。

[ x c y c z c 1 ] = [ R t 0 T 1 ] [ x w y w z w 1 ] \left[ \begin{matrix} x_c \\ y_c \\ z_c \\ 1 \end{matrix} \right]=\left[ \begin{matrix} R & t \\ 0^T & 1 \end{matrix} \right] \left[ \begin{matrix} x_w \\ y_w \\ z_w \\ 1\end{matrix} \right] xcyczc1=[R0Tt1]xwywzw1

相机坐标系和世界坐标系之间可以互相转换,其中最常用的就是如何确定相机中心在世界坐标系中的位置
X w = R − 1 ( X c − t ) = R − 1 X c − R − 1 t = R T X c − R T t X_w = R^{-1} (X_c - t) \\ = R^{-1}X_c - R^{-1}t \\=R^TX_c-R^Tt Xw=R1(Xct)=R1XcR1t=RTXcRTt
由于相机在相机坐标系的坐标为原点 X c = [ 0 0 0 ] Xc =\left[\begin{matrix} 0 & 0 & 0 \end{matrix} \right] Xc=[000]
所以相机在世界坐标系中的坐标为:
X w c = − R T t X_w^c = -R^Tt Xwc=RTt

相机坐标系到像平面坐标系
在这里插入图片描述
根据三角形相似
x = f x c z c y = f y c z c x = f \frac{x_c}{z_c} \\ y = f \frac{y_c}{z_c} x=fzcxcy=fzcyc

写成矩阵的形式
[ x y 1 ] = [ f 0 0 0 f 0 0 0 1 ] [ x c / z c y c / z c 1 ] 1 z c [ f 0 0 0 f 0 0 0 1 ] [ x c y c z c ] \left[ \begin{matrix} x \\ y \\ 1 \end{matrix} \right] =\left[ \begin{matrix} f & 0 & 0 \\ 0 & f & 0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} x_c/z_c \\ y_c/z_c \\ 1 \end{matrix} \right] \\ \frac{1}{z_c} \left[ \begin{matrix} f & 0 & 0 \\ 0 & f & 0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} x_c \\ y_c \\ z_c \end{matrix} \right] xy1=f000f0001xc/zcyc/zc1zc1f000f0001xcyczc

这里 f f f表示焦距,单位是m, [ x c / z c y c / z c 1 ] T \left[ \begin{matrix} x_c/z_c & y_c/z_c & 1 \end{matrix} \right]^T [xc/zcyc/zc1]T归一化平面坐标
像平面坐标系到图像坐标系
由于图像坐标系是用像素表示的,像平面坐标系都是m为单位的,所以要进行转换,
焦距f转换为像素, d x , d y d_x,d_y dx,dy 分别表示x和y方向每个像素占多大。 f x , f y fx, fy fx,fy 的单位是像素
f x = f d x f y = f d y f_x = \frac{f}{d_x} \\ f_y = \frac{f}{d_y} fx=dxffy=dyf
在这里插入图片描述

由于像平面的原点在中心,而像素坐标的原点在左上角,因而需要在x和y方向分别平移 c x , c y c_x, c_y cx,cy个像素

[ u v 1 ] = [ 1 d x 0 c x 0 1 d y c y 0 0 1 ] [ x y 1 ] \left[ \begin{matrix} u \\ v \\ 1 \end{matrix} \right] = \left[ \begin{matrix} \frac{1}{d_x}& 0 & c_x \\ 0 & \frac{1}{d_y} & c_y \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} x \\ y\\ 1 \end{matrix} \right] uv1=dx1000dy10cxcy1xy1

相机坐标系->像平面坐标->像素坐标
[ u v 1 ] = [ 1 d x 0 c x 0 1 d y c y 0 0 1 ] [ x y 1 ] = 1 z c [ 1 d x 0 c x 0 1 d y c y 0 0 1 ] [ f 0 0 0 f 0 0 0 1 ] [ x c y c z c ] = 1 z c [ f x 0 c x 0 f y c y 0 0 1 ] [ x c y c z c ] \left[ \begin{matrix} u \\ v \\ 1 \end{matrix} \right] = \left[ \begin{matrix} \frac{1}{d_x}& 0 & c_x \\ 0 & \frac{1}{d_y} & c_y \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} x \\ y\\ 1 \end{matrix} \right]\\=\frac{1}{z_c} \left[ \begin{matrix} \frac{1}{d_x}& 0 & c_x \\ 0 & \frac{1}{d_y} & c_y \\ 0 & 0 & 1 \end{matrix} \right]\left[ \begin{matrix} f & 0 & 0 \\ 0 & f & 0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} x_c \\ y_c \\ z_c \end{matrix} \right]\\=\frac{1}{z_c} \left[ \begin{matrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} x_c \\ y_c \\ z_c \end{matrix} \right] uv1=dx1000dy10cxcy1xy1=zc1dx1000dy10cxcy1f000f0001xcyczc=zc1fx000fy0cxcy1xcyczc
其中矩阵为相机内参矩阵,只和相机本身有关 f x , f y f_x, f_y fx,fy为相机焦距,一般情况向两者相等, c x , c y c_x, c_y cx,cy为中心偏移像素,一般情况下为图像的1/2。
K = [ f x 0 c x 0 f y c y 0 0 1 ] K= \left[ \begin{matrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{matrix} \right] K=fx000fy0cxcy1

那么世界坐标系到像素坐标系就可以写成:
[ u v 1 ] = 1 z c [ f x 0 c x 0 f y c y 0 0 1 ] [ R t 0 T 1 ] [ x w y w z w 1 ] = 1 z c K [ R ∣ t ] [ x w y w z w 1 ] \left[ \begin{matrix} u \\ v \\ 1 \end{matrix} \right] =\frac{1}{z_c} \left[ \begin{matrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} R & t \\ 0^T & 1 \end{matrix} \right] \left[ \begin{matrix} x_w \\ y_w \\ z_w \\ 1\end{matrix} \right] \\=\frac{1}{z_c}K[R|t] \left[ \begin{matrix} x_w \\ y_w \\ z_w \\ 1\end{matrix} \right] uv1=zc1fx000fy0cxcy1[R0Tt1]xwywzw1=zc1K[Rt]xwywzw1
其中 [ R ∣ t ] 为 外 参 矩 阵 , 表 示 世 界 坐 标 系 到 相 机 坐 标 系 的 转 换 矩 阵 , K 为 相 机 内 参 矩 阵 [R|t] 为外参矩阵,表示世界坐标系到相机坐标系的转换矩阵, K 为相机内参矩阵 [Rt]K

P = K [ R ∣ t ] P = K[R|t] P=K[Rt]
P为投影矩阵,表示一个4x4的矩阵。
关于针孔相机模型就解释到这里。

相机畸变模型

相机畸变模型一般包括径向畸变和切向畸变

  • 径向畸变是由于透镜的形状导致的,有桶形畸变和枕形畸变。对应的数学模型:

x d i s t = x + x ( k 1 r 2 + k 2 r 4 + k 3 r 6 ) y d i s t = y + y ( k 1 r 2 + k 2 r 4 + k 3 r 6 ) r = x 2 + y 2 x_{dist} = x+x(k_1r^2 + k_2r^4+k_3r^6) \\ y_{dist} = y+y(k_1r^2 + k_2r^4+k_3r^6) \\ r=x^2+y^2 xdist=x+x(k1r2+k2r4+k3r6)ydist=y+y(k1r2+k2r4+k3r6)r=x2+y2

  • 切向畸变是由于安装导致透镜和成像平面不严格平行。对应的数学模型:

x d i s t = x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y d i s t = y + 2 p 2 x y + p 1 ( r 2 + 2 y 2 ) x_{dist} = x + 2p_1xy+p_2(r^2+2x^2)\\y_{dist} = y + 2p_2xy+p_1(r^2+2y^2) xdist=x+2p1xy+p2(r2+2x2)ydist=y+2p2xy+p1(r2+2y2)

同时进行径向畸变和切向畸变矫正,联合在一起:
x d i s t = x + x ( k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y d i s t = y + y ( k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 2 x y + p 1 ( r 2 + 2 y 2 ) x_{dist} = x+x(k_1r^2 + k_2r^4+k_3r^6) + 2p_1xy+p_2(r^2+2x^2)\\ y_{dist} = y+y(k_1r^2 + k_2r^4+k_3r^6) +2p_2xy+p_1(r^2+2y^2) xdist=x+x(k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ydist=y+y(k1r2+k2r4+k3r6)+2p2xy+p1(r2+2y2)

x,y 的值对应的是归一化平面坐标系的值,因而在校正图像的时候需要先把像素坐标转换为归一化平面坐标,然后再校正,最后再把校正后的 x d i s t , y d i s t x_{dist}, y_{dist} xdist,ydist计算到像素坐标。
u = f x x d i s t + c x v = f y y d i s t + c y u = f_xx_{dist} + c_x \\ v = f_yy_{dist} + c_y u=fxxdist+cxv=fyydist+cy

畸变系数涉及 k 1 , k 2 , k 3 , p 1 , p 2 k_1, k_2, k_3, p_1, p_2 k1,k2,k3,p1,p2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值