肖金辉,项新建
(浙江科技学院 自动化与电气工程学院,杭州 310023)
钢尺在现代生产、生活、学习中作为一种测量标准而广泛使用,因此对钢尺自身精度的要求就十分严格。根据国家计量标准JJG 1-1999《钢直尺检定规程》,长度小于或等于300 mm的钢尺,端边直线度公差要求在0.04 mm之内,两端边的平行度公差要求在0.25 mm之内,端边相对于侧边的垂直度公差在0.06 mm。企业根据生产经验,在实际检测钢尺质量的过程中,很多情况下是通过检测两端边的长度以及两端长度的差值来衡量钢尺是否合格。传统工业生产中,针对钢尺端边尺寸检测主要以人工检测为主,这种检测方式虽然能够达到检测目的,但效率低、速度慢,耗费大量的人力物力,并且当工人长时间做检测的工作后,会出现不同程度的视疲劳,导致测量误差增大,不能保证准确性[1-3],因此急需一种新检测方式来改变存在的问题。近年来随着机器视觉的快速发展,视觉检测技术引入工业实际生产检测中[4-6]可以实现对工件尺寸的高精度、非接触实时在线检测,这种非接触式测量法满足流水线生产过程中检测的节拍[7]。因此,笔者利用机器视觉技术,通过调用机器视觉软件Halcon中的算法包对钢尺图像进行一维测量,最终快速实现钢尺端边检测和分类。
图1 钢尺端边测量系统示意Fig.1 Schematic diagram of measurement system
机器视觉系统的基本流程为图像采集、图像识别、分类处理。本文以Halcon软件为开发平台,首先对摄像机进行标定,设置相机为外部触发[8-9],在传送带上采集钢尺的图像,然后通过blob分析定位出感兴趣区域(region of interest,ROI),再调用Halcon中相关的一维测量算子测量出钢尺端边的尺寸,最后通过C#和Halcon混合编程完成自动控制下位机对钢尺的分捡工作。钢尺端边测量系统如图1所示。
相机的标定是整个测量系统的基石,保证测量的精度。相机的标定是为了求得像素坐标系与世界坐标系的转换关系,从而将摄像机成像平面上的像点和现实世界中的实际点形成对应。其中像素坐标系(u,v)与世界坐标系(XW,XW,ZW)的转换公式为:
(1)
由式(1)可知,相机标定实际是为了确定相机的内外参数,从而得到像素坐标系与世界坐标系的转换关系。Halcon为相机的标定提供了比较直观的能通过界面操作的标定助手,在进行相机标定之前要做以下准备:
1)选择标定板的材质和合适的标定板尺寸,标定板的大小一般占相机视野的1/3左右[11],本系统选用光源打光,选择透光性较好的玻璃材质标定板,60 mm×60 mm。
2)通过算子gen_caltab获得生成标定板的描述文件,描述文件要与标定板的大小尺寸对应。
本系统选择某公司提供的面阵CCD相机,选择固定焦距镜头,标定完成如图2所示。
图2 标定完成Fig.2 Calibration completion
标定系数如下:
CameraParameters:=[0.015 304 9,0.318 736,8.199 89e-006,8.3e-006,-178.172,-545.22,2 456,2 058]
CameraPose:=[0.151 239,0.138 71,0.185 711,359.488,0.092 882,229.698,0]
图3 钢尺打光Fig.3 Lighting diagram
标定系数中含有相机的内外参数,在Halcon中通过调用该系数可完成像素尺寸到实际物理尺寸的转换,需注意的是相机完成标定之后,相机和镜头的位置都不能发生改变,一旦位置发生改变必须进行重新标定,标定成功后才能对钢尺进行图像采集。
1.2.1 光源的选型
本研究测量的钢尺长度为20 cm,宽度为24~26 mm,由于钢尺表面反光较大,故采用2个条形光源对钢尺进行打光,如图3所示。
1.2.2 相机的外部触发
相机的触发方式有软件触发和外部硬件触发,因为是在传送带上采集图像,所以本研究选择设置为上跳变外部硬件触发,硬件触发器是光电开关。
整个图像处理分3步:1)通过图像分割选出钢尺的ROI区域。2)在原图中扣除钢尺区域,为使每次的测量结果误差小,通过仿射变换把钢尺图像转换到水平位置。3)进行一维测量,分别测出两条边的长度。
图像分割的目的是从图像中把目标区域和背景区域分开。本研究选用的全局阈值分割法在阈值分割之前首先进行图像灰度化处理;Halcon中全局阈分割值法的算子为threshold,阈值分割之后得到的是区域图像,然后调用connection算子断开连通域将图像分成不同的区域块,再调用select_shapes算子进行区域特征选择;最后找到钢尺感兴趣区域(ROI),为了使钢尺的边缘都包括在ROI内部,对ROI进行dilation_rectangle1矩形膨胀运算,ROI定位如图4所示。
图4 ROI定位Fig.4 ROI positioning
腐蚀和膨胀是2个最基本的也是最重要的形态学运算,矩形膨胀算法是由膨胀算法演变而来,膨胀算法的数学形式为:
A⊕B={x|B(x)∩A≠Ø}。
(2)
式(2)中:B为结构元素;A为输入图像。用结构元素B扫过整幅输入图像A,一旦结构元素的原点遇到二值图像中值为1的像素,则将输入图像上与结构元素对应的像素置为1并输出,矩形膨胀运算的结构元素是一个矩形。
在一维测量之前,为了使每次都能快速、高精度地测量钢尺的两端,测量之前将钢尺图像仿射变换到水平位置。Halcon中有很多仿射变换相关的算子,本研究中首先用vector_angle_to_rigid算子得到图像变换到水平方向的二维矩阵,然后通过affine_trans_image算子将二维矩阵作用到图像上实现钢尺图像的转正,最后通过区域对原图像进行抠图,区域转正和图像分割如图5所示。
图5 区域转正和图像分割Fig.5 Regional correction and image segmentation
像素坐标(u,v)仿射变换到(x,y)坐标下的一般表达式为:
(3)
式(3)中:仿射变换矩阵为A。仿射变换主要包含平移变换、比例变换和旋转变换。本研究中主要用到平移变换和旋转变换。图像的平移变换就是将图像中的所有像素点按照要求进行垂直、水平方向移动。平移过程中只改变图像的位置,内容不会发生改变。表达式为:
(4)
式(4)中:x0和y0分别为x和y的坐标平移量。
图像的旋转是指图像按照某点为原点旋转某个角度,图像旋转后只是发生位置变化。表达式为:
(5)
式(5)中:θ为旋转角度。
图6 感兴趣区域Fig.6 Region of interest
钢尺的一维测量分2步:1)在已经摆正的图像上调用gen_measure_rectangle2算子形成一个矩形的测量对象(ROI)。2)调用measure_pairs算子,得到一维测量的结果。
由于本研究测量的是钢尺的两端,所以会调用2次gen_measure_rectangle2形成2个矩形的测量对象(ROI)。一维测量核心算子gen_measure_rectangle2。该算子前面7个参数是为了形成一个矩形,通过这个算子会产生一个矩形的测量对象,在矩形的测量对象内每间隔一个像素建立一条投影的线段,线段的长度等于矩形的宽度,这些线段称为等距线。在每条等距线上取线段中点并连接起来,形成带有方向的线段,称作剖面线(profile line),线段的方向代表矩感兴趣区域的方向[13],如图6所示。
通过计算每条等距线的平均灰度值,可以得出轮廓线的灰度直方图。如果等距线不是垂直或水平的,那么等距线经过的就不是一个完整的像素,需要进行插值处理。参数Interpolation可以决定插值的方法,设置Interpolation=’nearest_neighbor’则取最近像素的灰度值,这种方法速度最快但精度低;设置Interpolation=’bilinear’采用双线性插值法,这种方法精度最高但速度最慢。测量矩阵的各个属性值通过MeasureHandle句柄调用。一维测量另外一个核心算子测量算子measure_pairs,测量算子通过调用MeasureHandle句柄,然后改变平滑系数Sigma的值,对轮廓线进行高斯滤波,最后得到轮廓线的一阶灰度差分直方图。再回过来分析gen_measure_rectangle2中矩形的中心点坐标如何确定,矩形中心点是要测量的钢尺中心点,通过图像分割之后得到钢尺的区域,经过摆正之后在该区域上调用一个外接矩形算子,可以得到钢尺区域的具体坐标,通过中心点平移得到钢尺两端的中心点坐标,由此就可以完成对钢尺两端的一维测量。测量实现如图7所示。
图7 测量的实现Fig.7 Measurement implementation diagram
图8 测量系统软件界面Fig.8 Software interface of measurement system
本系统软件设计包含图像采集模块、图像识别模块、数据显示模块、串口通信模块。图像采集模块通过调用相机自带的SDK,完成图像的采集、触发模式设置。图像识别模块图像处理的算法部分是在Halcon中完成,将Halcon中的算法程序导出为含有HDevelopEeport类的.cs格式文件,然后在C#窗体界面编程中创建HDevelopEeport类的实例,通过该实例调用HDevelopEeport类的图像处理函数,完成本系统软件对图像识别模块的编程。数据显示模块通过调用C#窗体界面中自带Label,TextBook控件来显示图像识别和逻辑处理的结果。串口通信模块通过调用C#窗体界面中自带的SerialPort控件来完成与下位机的通信[14]。主界面如图8所示。
图9 分捡系统流程Fig.9 Flow chart of bifurcation system
钢尺端边的图像经过上位机进行图像识别和处理之后,会把结果显示到界面上,同时在软件内部会把测量的结果和录入的标准进行逻辑上的对比和运算,然后把结果以指令的方式传递给下位机分捡系统,下位机根据不同的指令,对应I/O口置0或置1使继电器吸合来间接控制分捡电机工作[15]。本系统下位机分捡系统把80C51单片机作为主控芯片,分捡系统流程如图9所示,下位机分捡原理如图10所示。
图10 下位机分捡原理Fig.10 Principle diagram of slave computer sorting
为了验证本测量系统在实际生产检测过程中的应用效果,本研究采取2种方法对其进行验证:少量重复测量钢尺的端边和大批量测量钢尺端边。重复测量是为了验证重复精度,重复精度从最大、最小误差的绝对值进行评价,大批量测量钢尺端边是为了验证检测系统的检测精度、误检率、漏检率。
检测精度:
(6)
误检率:
(7)
漏检率:
(8)
式(6)~(8)中:TP为被正确检测出合格品的数量;TN为被正确检测出次品的数量;P为合格品;N为次品;FP为合格品被误检的数量;FN为次品没有被检测出来误认为合格品的数量。
验证设定的录入标准为:1)钢尺两端的长度不超过25.00 mm;2)钢尺两端的长度不低于24.00 mm;3)钢尺亮度的长度差值不超过0.20 mm。
为了验证本系统的重复精度,对一个已知实际尺寸的钢尺重复检测10次,钢尺长度为20 cm,由于钢尺有两端,故在测量的过程中对两端进行标记,以保证测量的数据不混淆。表1为钢尺两端重复测量结果。
表1 钢尺两端重复测量结果Table 1 Repeated measurement results at both ends of steel ruler mm
为了验证该系统在实际使用过程中的性能,钢尺分3组,每组100只,长度为20 cm,端边在24~26 mm,对其检测,结果见表2。
表2 大批量检测结果Table 2 Large batch test results
对长度为20 cm,端边长度在24~26 mm的钢尺进行重复精度验证和大批量检测精度验证,结果显示,对钢尺端边检测的测量最大绝对值误差在0.070 mm,总检测精度为99.33%,完全满足工业生产的检测需求。
本文以Halcon软件为平台,针对钢尺两端的尺寸测量以及分类,进行了完整的系统设计。这个系统中包括钢尺在流水线上的图像采集、图像处理及测量,最后到分类。从实际测量的数据来看,其检测结果值与标准值的偏差小于0.1 mm,分类结果满足工业要求,从而在很大程度上解决了钢尺检测不准确等问题,促进了机器视觉技术在工业生产中的应用。未来除了增加样本的数量和更改测试的光线外,还打算提高检测精度,同时利用机器视觉技术对钢尺的缺陷进行检测。