1. 引言
机器视觉,主要是指使用相机,自动通过CCD或者CMOS获得图像,之后对于图像进行分析,此类分析可以是自动或者人工判断。随着如今工业自动化程度的提高,越来越多的机器视觉被用在工业生产之中,可以说近二十年里,机器视觉得到了飞速的发展。
在机器视觉的使用中,尺寸或者形状的测量会被大量应用到,和普通测量工具一样,此类机器视觉在使用前需要进行像素校准。
2. 机器视觉的像素校准介绍
机器视觉的像素校准,是指由把由相机拍摄的图片和实物进行比较计算,获得两者之间的数学关系,并可通过此关系来矫正图片,以此消除图片拍摄时由多种误差产生的形变。对于用来测量的机器视觉,尤其是高精度测量的视觉系统,像素校验是必不可少的一环。
一张相机拍摄的图片,是通过像素为单位来存储所有信息的。像素校验使用了数学方法,把以像素为单位的图片还原为我们常用的测量单位,如毫米,英尺等。
和普通摄影一样,当知道了焦距,CCD或者CMOS的大小等硬件参数后,我们可以初略计算出其比例关系。如,1个像素对应1毫米,那100个像素就对应100毫米。但是,在相机拍摄图像时候,由于CCD或者CMOS的微小形变,以及镜头的畸变,外加拍摄角度的问题,其比例不是完全线性的。这个时候就需要用到像素校验,它通过复杂计算,系统的产生整个图像于真是世界的映射关系。如下常见的形变图片,需要通过像素校验还原:
-由于拍摄距离产生的形变图片
-由于拍摄角度产生的形变图片
-由于CCD或者CMOS以及镜头产生的形变图片
-由于实物三维的高低/前后/上下产生的形变图片
3. 机器视觉的像素校准的步骤以及计算方法
1) 制作带圆点的长方形校准板,其中板的颜色为白色,圆点颜色为黑色。

2) 使用相机拍摄校准版,可以得到形变后的图像

3) 使用数学方法,得到两个图像的映射关系

通过比较图片和实物,圆点中心点的水平差值dx和垂直差值dy。
数学公式表示如下:
1) 基于物理特性的数学映射方法如下:
校准板
校准板在相机的投影
-校准板的坐标系为(Xw, Yw, Zw)
-图片坐标系为(Xc, Yc),其中X,Y对应图片中的X和Y轴,而Z则是处于镜片光轴方向,其中Zc = f (焦距)。
-相机坐标系为1、2、3、4点,是校准板在相机平面上的投影
可以使用如下公式描述校准板到相机坐标的变换:

其中
Pw:表示校准版上的实物坐标点;
Px:表示相机坐标上的坐标点;
R:表示实物坐标到相机坐标的一个角度矩阵(为相机的外参);
T:表示实物坐标和相机坐标的平移差值(为相机的外参);
可以使用如下公式描述从相机坐标系到图片坐标系的变换:

其中
Pc:表示图片坐标上的点,用(Xc, Yc)显示;
Px:表示相机坐标上的坐标点,用(Xx, Yx, Zx)显示;
s:表示放大系数;
M:表示相机成像的特性(可以称为相机的内参)。
包含了如下特性参数:
-焦距;
-光轴与成像平面的交点;
-像素大小;
-像素切错系数(pixel skew angle);
为了计算方便,我们使用如下行列式表示M[1] :

其中:
,
;
F:表示焦距;
Sx:表示水平每毫米的像素个数;
Sy:表示垂直每毫米的像素个数;
Cx:表示光轴与成像平面焦点的水平位置;
Cy:表示光轴与成像平面焦点的垂直位置;
a:表示y相对于x的切错,此切错一般因为感光芯片没有放置在光轴垂直位置,通常为0。
2) 畸变的影响:
常见的畸变分为辐射畸变和正切畸变。

辐射畸变,是由于镜片的偏差产生的,可以用如下图表示:
其中:P1A为无畸变情况下,点P1在图像平面上的投影;
P1D:为畸变情况下,点P1在图像平面上的投影;
P2A:为无畸变情况下,点P2在图像平面上的投影;
P2D:为畸变情况下,点P2在图像平面上的投影。
对于辐射畸变可以使用如下公式进行纠正[2] :

正切畸变,是由于CCD或者CMOS安装偏差导致的,可以使用如下图表示:

对于正切畸变,可以使用如下公式进行纠正:

4. 使用软件进行相机像素校验
基于上述理论知识,可以配合视觉软件进行实验。这里选取了使用开源软件OpenCV来进行校验。
基于OpenCV的相机校验:
OpenCV使用方格棋盘做为校验板:
如果要获得相机的内参,外参以及畸变,可以使用OpenCV提供的校验函数:
void cvCalibrateCamera2(
CvMat* object_pointsCvMat* image_pointsint* point_countsCvSizeimage_sizeCvMat* intrinsic_matrixCvMat* distortion_coeffsCvMat* rotation_vectors CvMat* translation_vectors = NULL, int flags = 0
);
使用此函数,至少需要对于校验板使用不同角度,拍取2张图片。如果要获得准确度高的结果,建议使用拍取不同角度的多张图片来进行校准。
校准前:

校准中:

校准后:

对于提高精度,也可以使用圆点校验板,但是这样需要修改一些OpenCV的代码。
使用圆点校验板校验:
校验前:

校验中:

校验后:

由于篇幅有限,这里就不详述其软件代码,有兴趣的读者可以邮件联系我。
5. 结论
通过考虑常见畸变,相机内参和相机外参的影响,建立坐标系模型,可以较为准确的给予机器视觉进行像素校准。对于不同校验板以及多维度的校验板,需要进一步实验确认其精确度。