张正友 99年发表的论文 "Flexible Camera Calibration by Viewing a Plane from Unknown Orientations",在 2013年获得 ICCV 的 Helmholtz Prize,便是对其影响的认可
1 相机标定
1.1 定义
求解:相机的内参和畸变系数
$\qquad s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} r_{11} & r_{12} & r_{13} & t_1 \\ r_{21} & r_{22} & r_{23} & t_2 \\ r_{31} & r_{32} & r_{33} & t_3 \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w\\ 1 \end{bmatrix} $
1.2 二维展开
开个脑洞,类比《三体》中的质子展开过程:高维度的相机标定问题,如果展开到二维空间,就是一个曲线拟合的问题,如下图,参见 Ceres Solver 的曲线拟合例程
2 特征提取
选 1/3 英寸(对角线6mm CIS芯片,同样根据最佳实践原则 #3,推测出镜头的理想焦距为 12~24mm
这意味着,如果提取的特征点偏差 1个像素,造成的尺寸偏差为 0.08mm,因此,特征提取的精度非常重要
2.1 标定板图案
常用标定板的图案,有棋盘格、圆、非对称圆、圆环,以及 ChArUco 等,Halcon 公司有特定图案的 Halcon 标定板
2.1.1 特征提取精度
参考[2]中,对三种图案标定板的各五张合成图像(非相机拍摄,添加相同的径向畸变,比较不同图案的特征提取精度
2 圆标定板,特征为圆心,定位误差次小,为 2.6pixel
对于0.08mm/pixel 的机器视觉系统,当镜头确定时(畸变系数固定,不同标定板对应的特征,提取精度最大相差 4.3pixel,约 0.34mm
2.1.2 反投影误差
而用相机拍摄的三种图案的实际图像,进行标定后,得到反投影误差的 RMSE 分别为 0.139,0.135 和 0.115
2.2 迭代标定法
2.2.1 偏差原因
2.2.2 方法步骤
2)相机标定,得到标定参数
3)畸变校正和透视校正(转换为平行正对图像
5)根据标定参数(每次迭代更新,将特征点转换回原始位置
选相机真实拍摄的图像,采用该方法标定,得到反投影误差的 RMSE,如下:
以上结果,是参考[2]中所列,本人未实践过,但在一家公司公众号的文章中 (参考[4],发现了类似迭代标定法的动图,如下:
3 优化方法
3.1 RANSAC 标定法
对于特征中离群点的剔除,常用的一种方法是 RANSAC:以反投影误差 $E_{reproj}$ 做阈值,小于的为内点,大于的为外点,不断迭代使选定的内点都满足 $<E_{reproj}$
3.1.1 方法步骤
2)计算所有特征点的反投影误差 $E_{reproj}$
重复步骤 2 和 3,直到所有的内点都满足 $E_{reproj} < T_{reproj}$ (文中 T 取 2
5)将提取的特征点,在像素位置坐标中画十字线,均分成四组 (避免四点共线
7)如果本次筛选的 $S_{in}^i$,比之前筛选的内点数量多,则更新 $N$ 值为 $S_{in}^i$ 的内点数
9)对每一幅图像,都执行步骤 5 6 7 8,获取每一幅图像的最大内点集 $S_{con}$
以上步骤,和 OpenCV 中的 findHomography( 函数,在求解单应性矩阵时所用的 RANSAC 法类似,可参考之
3.1.2 测试效果
3.2 目标函数
3.2.1 2d 和 3d
考虑镜头的畸变,相机标定是一个非线性优化的过程,对于张氏标定法,目标函数在 2d 像平面上,如下:
$\quad\displaystyle\sum_{i=1}^{N} \sum_{j=1}^{L}|| m_{u,i,j}^d - \hat{m}_{u,i,j}^{d}(f_x, f_y, u_0, v_0, k_1, k_2, R_i, t_i||^2$
$\quad\displaystyle\sum_{i=1}^N \sum_{j=1}^L || m_{c,i,j}(R_i, t_i - \hat{m}_{c, i, j}(f_x, f_y, u_0, v_0,k_1, k_2, R_i, t_i||^2$
3.2.2 $E_1$ 和 $E_2$
$\quad E_1 = \begin{split}\frac{1}{n}\displaystyle\sum_{i=1}^{n}\sqrt{||M_{c,i} - \hat M_{c,i}||^2} \end{split}$
$\quad E_3 = \begin{split}\frac{1}{m}\displaystyle \sum_{i,j=1}^{n}\sqrt{(|| M_{w,i} - M_{w,j}|| - ||\hat M_{c,i} - \hat M_{c,j}||^2} \end{split}$
参考
Accurate Camera Calibration using Iterative Refinement of Control Points,2009
计算机与机器视觉中的高精度相机标定 (下
Camera Calibration Toolbox for Matlab,Jean-Yves Bougue
A novel optimization method of camera parameters used for vision measurement,2013
Automatic machine vision calibration using statistical and neural network methods,2005