针孔相机模型是实际研究中最常用的模型。针孔是一个中间有一个小孔的假想墙壁,光只能从小孔通过。
f f f是摄像机焦距, Z Z Z是摄像机到物体的距离, X X X是物体长度,是图像平面上的物体长度。由相似三角形可得:
− x = f X Z -x = f\frac{X}{Z} −x=fZX
可将上图等价转换为如下所示系统,图像平面防止在针孔前方的摄像机模型(数学上等价,形式更简单)。
经过转换得到
x p = f x c z c y p = f y c z c ⟺ z c [ x p y p 1 ] = [ f 0 0 0 f 0 0 0 1 ] [ x c y c z c ] \begin{aligned} x_p = f\frac{x_c}{z_c}\\ y_p = f\frac{y_c}{z_c} \end{aligned}\iff z_c\begin{bmatrix} x_p\\ y_p\\ 1 \end{bmatrix}= \begin{bmatrix} f&0&0\\ 0&f&0\\ 0&0&1 \end{bmatrix} \begin{bmatrix} x_c\\y_c\\z_c \end{bmatrix} xp=fzcxcyp=fzcyc⟺zc⎣⎡xpyp1⎦⎤=⎣⎡f000f0001⎦⎤⎣⎡xcyczc⎦⎤
物体投影到成像平面之后由采样器件采样后转换为数字信号,成为像素图像。 d x , d y dx,dy dx,dy分别为一个像素占据的成像平面的物理尺寸(x方向,y方向)。
由于像素坐标系的原点和图像坐标系的原点不同,建模时需要加上两者原点的偏移和 c x c_x cx和 c y c_y cy,像素坐标系两个轴的夹角 θ \theta θ。
u = x p d x + c x − y p cot θ d x v = y p d y sin θ + c y ⟺ [ u v 1 ] = [ 1 d x − cot θ d x c x 0 1 d y sin θ c y 0 0 1 ] [ x p y p 1 ] \begin{aligned} u &= \frac{x_p}{dx}+c_x-\frac{y_p\cot\theta}{dx} \\ v &= \frac{y_p}{dy\sin\theta}+c_y \end{aligned}\iff \begin{bmatrix} u\\v\\1 \end{bmatrix}= \begin{bmatrix} \frac{1}{dx}&-\frac{\cot\theta}{dx}&c_x\\ 0&\frac{1}{dy\sin\theta}&c_y\\ 0&0&1 \end{bmatrix} \begin{bmatrix} x_p\\y_p\\1 \end{bmatrix} uv=dxxp+cx−dxypcotθ=dysinθyp+cy⟺⎣⎡uv1⎦⎤=⎣⎡dx100−dxcotθdysinθ10cxcy1⎦⎤⎣⎡xpyp1⎦⎤
于是
[ u v 1 ] = 1 z c [ 1 d x − cot θ d x c x 0 1 d y sin θ c y 0 0 1 ] [ f 0 0 0 f 0 0 0 1 ] [ x c y c z c ] = [ f d x − f cot θ d x c x 0 f d y sin θ c y 0 0 1 ] [ x c z c y c z c 1 ] \begin{aligned} \begin{bmatrix} u\\v\\1 \end{bmatrix}&=\dfrac{1}{z_c}\begin{bmatrix} \frac{1}{dx}&-\frac{\cot\theta}{dx}&c_x\\ 0&\frac{1}{dy\sin\theta}&c_y\\ 0&0&1 \end{bmatrix} \begin{bmatrix} f&0&0\\ 0&f&0\\ 0&0&1 \end{bmatrix} \begin{bmatrix} x_c\\y_c\\z_c \end{bmatrix}\\ &= \begin{bmatrix} \frac{f}{dx}&-\frac{f\cot\theta}{dx}&c_x\\ 0&\frac{f}{d_y\sin\theta}&c_y\\ 0&0&1 \end{bmatrix} \begin{bmatrix} \frac{x_c}{z_c}\\ \frac{y_c}{z_c}\\ 1 \end{bmatrix} \end{aligned} ⎣⎡uv1⎦⎤=zc1⎣⎡dx100−dxcotθdysinθ10cxcy1⎦⎤⎣⎡f000f0001⎦⎤⎣⎡xcyczc⎦⎤=⎣⎡dxf00−dxfcotθdysinθf0cxcy1⎦⎤⎣⎡zcxczcyc1⎦⎤
为了获得好的成像效果,通常在相机的前方加上透镜。透镜的引入会对成像过程中光线的传播产生新的影响:一是透镜自身的形状会对光线的传播产生影响,二是在机械组装过程中,透镜和成像平面不完全平行,这也会֯得光线穿过透镜投影到成像面时的位置发生变化。
由透镜形状引起的畸变称为径向畸变 。在针孔模型中,一条直线投影到像素平面上还是一条直线。可是,实际拍摄的照片中,摄像机的透镜往往使得真实环境中的一条直线在图片中变成了曲线。越靠近图像的边缘,这种现象越明显。由于实际加工制作的透镜往往是中心对称的,这使得不规则的畸变通常径向对称。它们主要分为两大类:桶形畸变和枕形畸变,如下图所示。
桶形畸变图像放大率随着与光轴之间的距离增加而减小,而枕形畸变则恰好相反。在这两种畸变中,穿过图像中心和光轴有交点的直线还能保持形状不变。
除了透镜的形状会引入径向畸变,由于在相机的组装过程中不能使透镜和成像面严格平行,所以也会引入切向畸变。
通常选用较为规则的图形例如黑白棋盘格进行相机标定,标定效果较好。使用OpenCV中摄像机标定的相关函数定得出相机内参数 c x , c y , f x , f y c_x, c_y, f_x, f_y cx,cy,fx,fy以及畸变校正系数 k 1 , k 2 , k 3 k_1, k_2, k_3 k1,k2,k3。
对于径向畸变,可以用一个多项式函数来描述畸变前后的坐标变化:这类畸变可以用与距中心的距离有关的二次及高次多项式函数进行校正。考虑归一化平面上任意一点 p \bm{p} p,其坐标为 [ x ˉ , y ˉ ] T [\bar{x},\bar{y}]^T [xˉ,yˉ]T,是未校正的点的坐标,也可以写成极坐标的形式 [ r , θ ] T [r,\theta]^T [r,θ]T,其中 r r r表示点与坐标原点之间的距离, θ \theta θ表示与水平轴的夹角。
x ˉ d i s t o r t e d = x ˉ ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y ˉ d i s t o r t e d = y ˉ ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \bar{x}_{distorted} = \bar{x}(1 + k_1r^2 + k_2r^4 + k_3r^6) \\ \bar{y}_{distorted} = \bar{y}(1 + k_1r^2 + k_2r^4 + k_3r^6) xˉdistorted=xˉ(1+k1r2+k2r4+k3r6)yˉdistorted=yˉ(1+k1r2+k2r4+k3r6)
其中 [ x ˉ d i s t o r t e d , y ˉ d i s t o r t e d ] T [\bar{x}_{distorted}, \bar{y}_{distorted}]^T [xˉdistorted,yˉdistorted]T是校正后的点的归一化坐标。上述校正模型中,对于畸变较小的图像中心区域,畸变校正主要是 k 1 k_1 k1起作用;对于畸变较大的边缘区域,主要是 k 2 k_2 k2起作用。对于切向畸变,可以使用另外的两个参数 p 1 p_1 p1, p 2 p_2 p2来进行校正:
x ˉ d i s t o r t e d = x ˉ + 2 p 1 x ˉ y ˉ + p 2 ( r 2 + 2 x ˉ 2 ) y ˉ d i s t o r t e d = y ˉ + p 1 ( r 2 + 2 y ˉ 2 ) + 2 p 2 x ˉ y ˉ \bar{x}_{distorted} = \bar{x} + 2p_1\bar{x}\bar{y} + p_2(r^2 + 2\bar{x}^2) \\ \bar{y}_{distorted} = \bar{y} + p_1(r^2 + 2\bar{y}^2) + 2p_2\bar{x}\bar{y} xˉdistorted=xˉ+2p1xˉyˉ+p2(r2+2xˉ2)yˉdistorted=yˉ+p1(r2+2yˉ2)+2p2xˉyˉ
联合上式,对于相机坐标系中的一点P ( x c , y c , z c ) (x_c,y_c,z_c) (xc,yc,zc),能够通过5个畸变系数找到这个点在像素平面上的正确位置:
张正友标定法利用棋盘格标定法,在得到一张标定板的图像之后,利用相应的图像检测算法得到每一个角点的像素坐标(u,v)。将世界坐标系固定于棋盘格上,则棋盘格上任一点的物理坐标W=0,由于标定板的世界坐标系是人为事先定义好的,标定板上每一个格子的大小是已知的,可以计算得到每一个角点在世界坐标系下的物理坐标(U,V,W=0)。
利用每一个角点的像素坐标(u,v)和每一个角点在世界坐标系下的物理坐标(U,V,W=0),来进行相机的标定,获得相机的内外参矩阵、畸变参数。
张正友标定法