基于LabVIEW开发的摄像机标定方法
2010-07-17罗智文林建龙于修洪
罗智文, 林建龙, 于修洪
(北京工商大学 机械工程学院, 北京 100048)
摄像机标定是指在三维机器视觉领域中,确定摄像机内外参数的过程. 摄像机内参数包括摄像机畸变系数及有效焦距,外参数包括摄像机坐标系和世界坐标系之间的旋转矩阵和平移矩阵. 本文采用Tsai两步标定法,以Matlab语言为工具编写主要程序,完成标定过程[1].
LabVIEW是一种基于图形编程语言的开发软件,具有开发方便、效率高等优点;对于底层的软件驱动及复杂运算,其他高级语言如Matlab具有更大优势[2]. 因此,本文利用LabVIEW提供的对Matlab程序接口,充分发挥Matlab语言的数学运算功能,使得以LabVIEW开发的火车轮缘动态检测系统[3-4]界面简洁,易操作,且具有快速的执行和计算能力.
1 摄像机模型
摄像机模型包括以下几个坐标系:摄像机坐标系oxyz,以像素为单位的图像坐标系ouv,毫米为单位的图像坐标系oxy和世界坐标系owxwywzw.
1.1 摄像机基本模型
摄像机模型采用小孔成像模型,如图1. 图像平面上的点(u,v)与世界坐标系中的点(xw,yw,zw)对应关系如式(1):
图1 摄像机模型透视投影关系Fig.1 Perspective projection of pinhole model
(1)
式(1)中,s为标量,α为u轴上的尺度因子,β为v轴上的尺度因子,γ为u轴和v轴的不垂直因子,(u0,v0)为摄像机光轴与图像平面的交点,这些参数只与摄像机内部参数有关,称为摄像机内部参数. [RT]由摄像机相对于世界坐标系的方位决定,称为摄像机外部参数.
1.2 摄像机畸变校正
实际上,由于实际的镜头并不是理想的透视成像,而是带有不同程度的畸变,使得空间点所成的像并不在线性模型所描述的位置(xu,yu),实际成像点的坐标应由下面考虑了位置误差的模型取代:
(2)
式(2)中,δx、δy是畸变值,与点在图像中的位置有关.
理论上镜头会同时存在径向畸变、切向畸变等两种畸变.
径向畸变由距图像中心的径向距离的偶次幂多项式模型来表示,即:
(3)
式(3)表明,x方向和y方向的畸变相对值与径向半径的平方成正比,即在图像边缘处的畸变较大. 对一般计算机视觉,一阶径向畸变已足够描述非线性畸变,此时可写成:
(4)
图2 图片读取模块程序Fig.2 Program layout of image reading module
切向畸变是指由于透镜复合镜头中光学镜片组合装配时各镜片的节点不严格在一直线上所产生的像点差异,其在图像坐标系中表达式为:
(5)
由于透镜切向畸变通常可以忽略,因此,我们通常只考虑径向畸变.
1.3 Tsai两步标定法
(6)
解由式(6)组成的超定方程组即可求得焦距f.
令畸变系数k初始值为0,解式(7)非线性方程组,进行优化搜索即可得到畸变系数k,焦距f的精确解.
(7)
两步标定法简洁明了,易于Matlab语言实现.
2 LabVIEW对标定的实现
LabVIEW实现的摄像机标定,分三个模块. 第一模块,实现对标定图片,火车轮缘图片的读取;第二模块,利用Harriss算法实现对标定图片角点的提取;第三模块,根据提取到角点相应的像素坐标,在世界坐标系中计算摄像机内外参数.
2.1 图片读取模块
图片读取模块程序[1-2]如图2.
主要节点说明如下:
1)“path to BMP file”:读取BMP图片路径.
2)“BMP”:创建必要的数据文件.
3)“图片”:由接收得到的数据在窗口显示图片.
4)“DrawAreaSize”:控制显示图片窗口的大小.
2.2 角点提取模块
角点提取模块程序如图3.
图3 角点提取模块程序Fig.3 Program layout of corner extraction module
Harris角点提取算法[5-7]由Matlab语言编制完成,利用LabVIEW提供的Matlab脚本节点(Matlab Script Node)来调用Matlab语言程序,实现Labview与Matlab的接口,通过这种方式在LabVIEW中使用Matlab强大的数值计算功能.
图3中BMP文件路径通过“路径至字符串转换”节点,把路径值赋予字符节点“path”,由Harris角点算法调取待处理标定图片,提取后的角点像素坐标(u,v)及世界坐标(x,y)值赋予“uvxy”显示节点给予显示.
2.3 摄像机内外参数计算模块
摄像机内外参数模块程序如图4.
图4 摄像机内外参数计算模块程序Fig.4 Program layout of CCD parametric computation module
基于径向约束的两步标定法,由Matlab语言编写完成,调用LabVIEW与Matlab接口,将其嵌入程序模块中.
模块以“uvxy”节点作为输入变量,其值为角点提取模块中角点像素坐标及世界坐标矩阵. 定义4个显示节点,分别显示求解后的旋转矩阵R,平移矩阵T,畸变系数K,焦距f.
2.4 摄像机标定软件界面
摄像机标定软件界面如图5,图中显示图片为现场拍摄的火车轮缘照片.
图5 摄像机标定软件界面Fig.5 Program interface of camera calibration
3 实验设计与计算结果
实验采用DH-HV1303UM-T CCD相机,输出分辨率为656×494,像素间距为7.4 μm,清晰度为750线,帧率为15帧/s,采用标准阶梯形5×5标定块.
通过Harris角点提取,得出一组角点相关数据,如表1.
表1 一组Harris提取角点后相关数据
实验求得摄像机旋转矩阵为:
平移矩阵为:
畸变系数:k=0.013 7,有效焦距f=8.177 5 mm.
摄像机标定界面显示结果如图6.
4 结束语
利用LabVIEW开发的摄像机标定技术,其主要程序由Matlab语言编写,利用LabVIEW提供的Matlab脚本节点来调用,实现Labview与Matlab之间的通信. 充分利用了LabVIEW图形化设计语言的优点和Matlab的强大数据处理能力,使其开发的摄像机标定技术具有更强的数据处理能力.
实验现场及结果表明,以此开发的摄像机标定技术具有原理清晰,过程简便,响应速度、计算速度快等优点,检测精度0.1 mm,能够达到铁路客车轮对检修规则标准.
图6 摄像机标定界面显示结果Fig.6 Result of camera calibration