怎样进行机器视觉的像素校准?
扫描二维码
随时随地手机看文章
摘要:描述了一种机器视觉校准的方法。在基于小孔成像相机模型的基础上,使用平板拍取若干张照片进行校验。采用几何坐标变换,并且结合齐次图形学,考虑相机镜头畸变的情况下,计算出相机的内参和外参。此类方法可以广泛御用使用于机器视觉的相机的校准。
1. 引言
机器视觉,主要是指使用相机,自动通过CCD或者CMOS获得图像,之后对于图像进行分析,此类分析可以是自动或者人工判断。随着如今工业自动化程度的提高,越来越多的机器视觉被用在工业生产之中,可以说近二十年里,机器视觉得到了飞速的发展。
在机器视觉的使用中,尺寸或者形状的测量会被大量应用到,和普通测量工具一样,此类机器视觉在使用前需要进行像素校准。
2. 机器视觉的像素校准介绍机器视觉的像素校准,是指由把由相机拍摄的图片和实物进行比较计算,获得两者之间的数学关系,并可通过此关系来矫正图片,以此消除图片拍摄时由多种误差产生的形变。对于用来测量的机器视觉,尤其是高精度测量的视觉系统,像素校验是必不可少的一环。
一张相机拍摄的图片,是通过像素为单位来存储所有信息的。像素校验使用了数学方法,把以像素为单位的图片还原为我们常用的测量单位,如毫米,英尺等。
和普通摄影一样,当知道了焦距,CCD或者CMOS的大小等硬件参数后,我们可以初略计算出其比例关系。如,1个像素对应1毫米,那100个像素就对应100毫米。但是,在相机拍摄图像时候,由于CCD或者CMOS的微小形变,以及镜头的畸变,外加拍摄角度的问题,其比例不是完全线性的。这个时候就需要用到像素校验,它通过复杂计算,系统的产生整个图像于真是世界的映射关系。如下常见的形变图片,需要通过像素校验还原:
由于拍摄距离产生的形变图片
由于拍摄角度产生的形变图片
由于CCD或者CMOS以及镜头产生的形变图片
由于实物三维的高低/前后/上下产生的形变图片
3. 机器视觉的像素校准的步骤以及计算方法1) 制作带圆点的长方形校准板,其中板的颜色为白色,圆点颜色为黑色。
2) 使用相机拍摄校准版,可以得到形变后的图像
3) 使用数学方法,得到两个图像的映射关系
通过比较图片和实物,圆点中心点的水平差值dx和垂直差值dy。
数学公式表示如下:
1) 基于物理特性的数学映射方法如下:
常见的畸变分为辐射畸变和正切畸变。
辐射畸变,是由于镜片的偏差产生的,可以用如下图表示:
其中: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. 结论
通过考虑常见畸变,相机内参和相机外参的影响,建立坐标系模型,可以较为准确的给予机器视觉进行像素校准。对于不同校验板以及多维度的校验板,需要进一步实验确认其精确度。
参考文献 (References)
[1] Sonka, M., Havac, V. and Boyle, R. (2011) Image Processing, Analysis, and Machine Vision. 4th EdiTIon, Cengage Learning, New York.
[2] Bradski, G. and Kaehler, A. (2008) Learning OpenCV: Computer Vision with the OpenCV Library. O’Reilly, Sebastopol.