利用OpenCV初步实现张正友标定法对棋盘格进行标定并校正图片
王晨
进行张正友标定法需要拍摄照片,既然说到拍摄,那就离不开相机。在计算机视觉和机器人领域中,我们需要将现实世界的三维物体“翻译”成相机捕获的二维图像。相机坐标系是这个过程中的核心桥梁,它帮助我们建立起“三维空间”与”二维像素“之间的数学映射关系。 首先为大家介绍一下相机模型中的四个坐标系,分别是:像素坐标系、图像坐标系、相机坐标系和世界坐标系。
像素坐标系
如图1所示,像素坐标系u-v的原点为O0,横坐标u和纵坐标v分别是图像所在的行和列,在视觉处理库OpenCV中,u对应x,v对应y。
图像坐标系
如图1所示,像素坐标系x-y的原点为O1,为像素坐标系的中点。

图像坐标系与像素坐标系关系图
从上图可知,O1在u-v坐标系下的坐标,假设dx和dy分别表示每个像素在横轴x和纵轴y的物理尺寸,单位为毫米/像素,O1在图像坐标系和在像素坐标系的坐标的关系是:
$$ u = \frac{x}{d_x} + u_0 $$$$ v = \frac{y}{d_y} + v_0 $$利用线性代数的知识把方程用矩阵表示出来:
$$ \left[ \begin{array}{c} u \\ v \\ 1 \end{array} \right] = \left[ \begin{array}{ccc} \frac{1}{d_x} & 0 & u_0 \\ 0 & \frac{1}{d_y} & v_0 \\ 0 & 0 & 1 \end{array} \right] \left[ \begin{array}{c} x \\ y \\ 1 \end{array} \right] $$相机坐标系
相机坐标系与图像坐标系的关系如下图:

相机坐标系与图像坐标系关系图
通过三角形相似我们可知:
$$ \frac{AB}{c\mathrm{O}} = \frac{X_c}{x}, \quad \frac{AO_c}{c\mathrm{O}_c} = \frac{Z_c}{f}, \quad \frac{PB}{c\mathrm{O}} = \frac{Y_c}{y} $$将上述式子与图像坐标系的两个式子联立可得:
$$ u = f_x \frac{X_C}{Z_C} + v_0 $$$$ v = f_y \frac{Y_C}{Z_C} + v_0 $$其中,fx、fy是相机焦距f除以dx、dy得到的值,dx、dy单位为毫米/像素,dx、dy表示感光芯片上的像素实际大小,是连接像素坐标系和真实坐标系的,将上述公式写成矩阵可得:
$$ \left[ \begin{array}{c} u \\ v \\ 1 \end{array} \right] = \left[ \begin{array}{ccc} f_x & 0 & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1 \end{array} \right] \left[ \begin{array}{c} \frac{X_c}{Z_c} \\ \frac{Y_c}{Z_c} \\ 1 \end{array} \right] $$世界坐标系
相机坐标系和世界坐标系都是右手坐标系,从相机坐标系到世界坐标系属于刚体变换,物体不会发生变形,主要依靠旋转变换和平移变换,世界坐标系与相机坐标系之间的关系是:
$$ \left[ \begin{array}{c} X_C \\ Y_C \\ Z_C \end{array} \right] = \mathrm{R} \left[ \begin{array}{c} X_W \\ Y_W \\ Z_W \end{array} \right] + \mathrm{T} $$.
其中,Xc,YC,Zc为相机坐标,Xw,Yw,Zw为世界坐标,R为旋转矩阵,T为平移矩阵,两者共同组成相机的外参。
综上,我们可以看出四个坐标系之间存在以下关系:

坐标系之间的关系
相机标定
介绍完相机模型以后接下来我们开始进行实际操作,我们将棋盘格固定,并且测量出棋盘格每个方块的实际边长,然后移动相机在多个不同的角度进行拍摄得到一系列棋盘格图像,这里我用到的是我自己的手机,拍摄的棋盘格图片如下图所示:

棋盘格图片
我们利用python程序对棋盘格内角点标定,并且得到相机的内参矩阵K及畸变系数D:

棋盘格标定图

相机的内参矩阵及畸变系数
当我们用镜头拍摄物体时,会产生畸变,畸变是由镜头的曲率引起,越靠近图像边缘,畸变越明显。我们利用程序得到了相机的内参矩阵以及畸变系数,于是我们便可以用所得的结果对拍摄的图像进行处理,使图像呈现出原本该有的样子,以下是消除畸变后的图片:

消除畸变后的的棋盘格照片
对于所得图片进行校正以后,去除镜头带来的畸变,然后利用我们对每张图片进行处理得到每张图片所对应的旋转矩阵R与平移矩阵T,利用这两个矩阵对斜着拍摄的图片进行处理,可以使倾斜的视角变为正视的视角,最终得到的棋盘格的正视图片如下图所示,对应的旋转矩阵R与平移矩阵T结果图10所示:

校正为正视图后的的棋盘格照片1

校正为正视图后的的棋盘格照片2

图片所对应的旋转矩阵与平移矩阵
张正友标定法是机器视觉领域的经典相机标定方法,它以低成本的平面棋盘格为标定物,操作简单,能同时估计内参、外参及畸变系数,精度适中,兼顾了易用性与实用性,广泛适用于工业检测、摄像头校准等中等精度需求场景,成为相机标定的”行业标准“之一。