基于OpenCV的丝印机定位系统研究

2018-10-10 02:19李金子崔来中
吉林大学学报(信息科学版) 2018年5期
关键词:哈希像素电机

李金子, 黄 坤, 崔来中

(1. 深圳职业技术学院 计算机工程学院, 深圳 518000; 2. 深圳大学 计算机与软件学院, 深圳 518000)

0 引 言

丝印机对印刷材料上标记点的定位是丝印机印刷过程中的一道重要工序, 也是难点工序[1]。它需要在印刷材料的正确位置进行印刷[2]。丝印机定位系统主要包括2个部分: 1) 视觉定位问题: 柔性印刷材料通过拉料运动控制后, 印刷平台下方的相机捕捉到带有标记点的图像, 利用OpenCV中的模板匹配、 平滑处理、 图像二值化处理、 以及研究的一种图片相似度的方法对匹配的图片进行相似度判断处理, 最终得到图片中标记点的中心坐标, 再经过像素与毫米以及毫米与脉冲的单位换算, 得到对位平台电机的运动参数; 2) 根据1)得到的4个运动参数, 对其进行速度匹配, 使对位平台顺畅稳定的运动到目标位置, 实现高精度的对位。前者是丝印机定位系统的核心, 定位到了正确的标记点位置, 才能实现正确的、 精确的定位。

现有OpenCV模板匹配能实现丝印机的定位[3], 但存在模版图像不在搜索图中也能得到匹配结果的问题。针对该问题, 提出了基于相似度的模板匹配方法, 以解决模版图像不在搜索图中也能得到匹配结果的问题, 同时不会增加算法的时间复杂度, 满足丝印机定位系统的要求。

1 系统结构

丝印机工作流程及其系统体系结构如图1所示。首先放置好材料, 取得模板图片以及目标位置。再进行视觉定位, 定位成功即能得到偏移的结果, 偏移结果传送至对位执行机构进行对位印刷[4]。如果得不到偏移值, 则不进行对位, 程序终止运行。

2 软件设计

图1 定位系统体系结构图Fig.1 Positioning system architecture

系统可分为图2所示的几个模块。图像获取模块主要有3个作用: 1) 得到相机取得的材料图像信息; 2) 转化为OpenCV可以进行图像处理的IplImage格式; 3) 选取模板图片, 以及目标位置(模板图片的中心点位置)。数据保存模块主要是保存电机运动的参数(运动的速度、 运动的位置等)和视觉定位的参数(定位的精度、 图像的相似度等)。视觉定位模块主要是进行图像的识别和匹配, 匹配后的图像经过相应的处理, 根据相似度识别出是否定位成功。运动控制模块主要是视觉定位得到的偏差值转化为脉冲, 再经过速度的匹配, 实现最终的定位。

图2 丝印机定位系统结构图Fig.2 Screen printer positioning system structure

2.1 图像获取模块

该模块的主要功能是获取相机上的图片数据, 并转化为OpenCV的IplImage类型的图像, 实时显示在picture控件上, 再从显示的图像中框选模版图片以及模版图片的中心坐标, 该模版图片的中心坐标即为目标位置坐标。

笔者使用德国映美精相机, 并附带相应的相机库调用相机。首先通过InitLibrary函数对相机库进行初始化, 通过showDevicePage函数打开相机列表, 列表中可选择相机获取图像的大小为1 280×960像素。选择好相机后, 将相机的信息通过saveDeviceStateToFile函数保存在文件中, 通过loadDeviceStateFromFile函数从文件中启动相机。最后即可用startLive函数捕获图像。除了启动相机捕获图像, 还可用函数showVCDPropertyPage打开相机的属性页面, 对相机的亮度, 曝光率等参数进行调节。最后关闭系统时需停止捕获以及关闭相机, 都提供相应的函数功能实现。

其中在相机库的回调函数中有图像的数据imageData, 以及图像的width、 hight以及channel信息, 需要对其进行转化, 转化为IplImage格式的图像。再将IplImage图像转化为CvvImage类型的图像进行显示。转化步骤如下。

第1步从相机上获取得到的宽和高, 通过长和宽的值确定图像的大小。即确定变量size的值。

第2步用OpenCV的cvCreateImage函数创建size大小的IplImage格式图像, 此时无图像数据。

第3步通过memcpy函数把相机中获取的pImageData数据复制到IplImage对象所指向的图像数据imageData指针中。此时有相机获取的图像数据。

第4步将IplImage图像数据转化为HighGUI中CvvImage对象, 利用CvvImage对象的CopyOf函数把IplImage格式的图像信息转化CvvImage格式的图像信息。

第5步利用CvvImage对象的DrawToHDC函数将图像数据显示在MFC程序的图像控件中。

2.2 数据保存模块

该模块的主要功能是保存软件中设定的参数, 以及软件启动时读取保存的参数。保存的参数主要有印刷和拉料的速度、 长度及框选模板图片的中心位置, 即目标位置。为实现这两个功能, 设计了一个保存文件的类, 实现了该类的SaveParam()和LoadParam()方法。该方法将要保存的数据赋值到主程序的结构体成员变量中, 再将结构体保存在软件目录的Params.data中。

2.3 视觉定位模块

针对OpenCV模版匹配中模版图像不在搜索图中也能得到匹配结果的问题, 设计了基于相似度的视觉定位系统。丝印机定位模块流程图如图3所示。

图3 丝印机定位模块流程图Fig.3 Screen printer positioning module flow chart

首先, 放好材料, 架好丝网板, 使材料上的标记点跟丝网板上的标记点完全重合。然后在相机显示的实时图像中抓取模版图像。得到模版图像和模版图像在搜索图像中的中心位置。用cvMatchTemplate函数[5]得到搜索图中与模版图像一样的图像, 然后设计一种图像相似度的判断方法, 首先, 因为光线细微的动态变化, 匹配结果图像和模板图像必须进行自动阈值化处理, 才能得到标记点的二值化图像。其次, 这两者尺寸还需分别缩小为10×10像素, 再分别遍历两者的像素值相等个数, 像素相等个数作为一种相似度度量标准。最后, 如果获取到的两张图像的相似度大于设定的相似度值, 则为定位成功, 否则定位失败。

2.3.1 模版匹配

模板匹配是属于图像匹配问题, 首先需要知道两点概念, 模版和搜索图。模版在本文中具体是指标记点图像, 比搜索图小很多。也就是需要识别的图像。而搜索图是相机显示的整幅图像。模版匹配就是要在搜索图中识别到模版(标记点图像)并且找到模版中心点在搜索图中的位置。目前人们已对模版匹配[6]提出了很多方法。

在OpenCV中, 模版匹配的函数是cvMatchTemplate。其工作原理主要是利用模版匹配算法将模版在搜索图中从左到右、 从上到下每个像素的间隔比较重叠区域的相似度, 需要比较(W-w+1)(H-h+1)次。并将每次的比较结果存储在(W-w+1)(H-h+1)尺寸大小的图像中, 输出一个匹配的结果图像。然后从得到的结果图像结合cvMinMaxLoc函数得到搜索图中的模版左上角位置。因为模版的尺寸大小是已知的, 从而能计算出模版中心点在搜索图中的位置。也就能算出与目标位置坐标的X轴偏差值与Y轴偏差值。该函数匹配的精度为像素级, 满足高精度要求。下面分别对函数中的模版匹配算法进行分析。

平方差匹配算法。通过模版与模版在搜索图重叠区域的差值的平方和进行匹配, 计算公式为

(1)

标准平方差匹配算法。通过模版与模版在搜索图重叠区域的标准平方差进行匹配, 计算公式为

(2)

相关匹配算法。通过模版与模版在搜索图重叠区域的乘积也就是互相关进行匹配, 计算公式为

(3)

标准相关匹配算法。通过模版与模版在搜索图重叠区域的标准化互相关进行匹配, 计算公式为

(4)

相关系数匹配算法。通过模版与模版在搜索图重叠区域的均值相关性进行匹配, 计算公式为

(5)

标准相关系数匹配算法。通过模版与模版在搜索图重叠区域的标准化均值相关性进行匹配, 计算公式为

(6)

匹配方法式(2)、 式(4)、 式(6)分别是方法式(1)、 式(3)、 式(5)的归一化形式。其中T是模版图像,I是搜索图像,R是匹配的结果值,x′(0~w-1)是模版图像的宽度范围, 范围为,y′(0~h-1)是模版图像的高度范围,x(0~W-w+1)是匹配结果图像的宽度范围,y(0~H-h+1)是模版图像的高度范围。相机采集到的图像受外部光源的影响, 光源的闪烁, 亮度变动都能对图像造成一定的影响。而归一化的方法能帮助消除光源变化而带来的影响。笔者选用的匹配方法是标准相关系数匹配算法。匹配的效果相对其他匹配算法要好。

2.3.2 基于相似度的模版匹配

感知哈希算法[8-11]的原理[12-14]如图4所示。首先缩小图像的尺寸[15], 将模版图像缩小到合理的范围, 该算法选定的范围为8×8像素尺寸的图片。主要作用是可以比较不同尺寸的图像, 并提高图像处理的速度。第2步是将图像转化为灰度图像[16], 灰度图像较彩色图像更易于计算。然后计算灰度平均值。第3步依次遍历灰度图像像素的灰度与该灰度图像灰度平均值比较, 大于或等于该灰度平均值的设值为1, 否则设为0。即可得到一个64位的0或1组成的整数, 也是该图片的判定结果。最后设定一个阈值, 在64位中不相同的数据位数不超过设定的阈值, 则判定两张图片相似, 否则, 判定两张图片不相似[15]。

类感知哈希算法是在感知哈希算法的基础上发展的, 它跟感知哈希算法的思想不同, 其主要作用是判断两张缩小至10×10像素大小后二值化图像的相似度。关键是将两张二值化图像的相似度值与设定的阈值进行对比。相似度的计算式为

SSimilarity=∑f(w,h)(9)

其中SSimilarity代表相似度的值,w1,w2代表的是两张缩小处理后的二值化图像的宽, 取值范围是0~9,h1,h2代表的是两张缩小处理后二值化图像的高, 取值范围也是0~9。w与h也是0~9的变量。两张二值化图片分为从左上角至右下角一一进行对比, 对比的每个像素的二值。该点的值同为255或同为0时, 该点的值置为1, Similarity是将所有对比后的值进行求和, 得到相似度的值。由式(2)~式(10)可知, Similarity的取值范围是0~100。值越高, 说明越相似。由于材料上mark点占整个图像的比值一般都在80%左右, 背景占整个图像的20%左右。笔者设定相似度的判定阈值为90。不把阈值设定为80的原因为它可以避免只有mark点的图像和整张图像都是跟mark点的二值相同的图像进行对比时所造成的误判。

类感知哈希算法的原理如图5所示。即直接把图像经过模版匹配得到匹配的图像后, 分别对模版图像跟匹配的图像进行平滑处理[17,18]、 二值化处理[19-22]、 膨胀处理, 最后将处理后的模版图像跟匹配的图像进行缩小处理, 将对比的模版图像跟匹配图像分别缩小至10×10像素大小的图像, 因为对比的模版图像跟匹配图像都是二值化图像, 其值为255或0, 所以分别遍历对比的模版图像跟匹配图像的像素, 遍历的值相等, 相似度加一。再设定90为相似度临界值, 相似度超过90即表示匹配的图像跟模版图像相似, 否则匹配的图像跟模版图像不相似。

图4 感知哈希算法原理流程图 图5 类感知哈希算法原理流程图 Fig.4 Perceptual hash algorithm principle flow chart Fig.5 Class-aware hash algorithm principle flow chart

跟感知哈希算法不同的地方就在于几点: 1) 缩小的尺寸不一样, 缩小为10×10像素尺寸, 对于相似度匹配更加精确, 并且更利于以百分比的方式对比图像; 2) 转为灰度图像之后直接转为二值化图像, 二值化图像是每个像素都是0和255构成, 利于比较; 3) 感知哈希算法得到的是64位的指纹, 是比较指纹的位数, 以不相同的位数个数作为判断标准, 消耗时间。而类感知哈希算法是直接在比较二值的时, 得到一个范围在0~100之间的相似度。计算得到的相似度, 即为图片相似的百分比, 认为相似度在90%以上为相似, 低于90%为不相似。综上所述, 类感知哈希算法相对于感知哈希算法判定图像相似更加直观、 精确。

2.4 运动控制模块

笔者使用型号为1014B的雷赛运动控制卡控制步进电机运动, 本程序设计了运动控制类, 重新封装了雷赛运动控制卡里的功能函数, 以便于程序调用。雷赛运动控制卡的运动控制功能主要包括: 位置控制、 速度控制以及对输入/输出端点的控制。

图6 脉冲速度与时间曲线 Fig.6 Pulse speed and time curve

速度与时间曲线1) 位置控制。本系统主要使用的位置控制有3类, 一是绝对位置运动, 二是相对位置运动, 三是回原点运动。以及回原点运动。回原点运动主要的作用是电机复位的功能, 回到原点之后脉冲清零, 当前位置就是起始位置。回原点运动完成后, 即可运行绝对位置运动。绝对位置运动的作用是不管电机运动在哪个位置, 都会往设定的绝对位置运动。而相对位置运动指的是电机按照设定的脉冲值运动, 点击需要运动完相应的脉冲才能停止。其运动过程中脉冲速度与时间的关系如图6所示。

2) 速度控制。雷赛DMC1410B 运动控制卡的速度控制主要表现在对于电机加速跟减速的控制上。主要分为梯形速度控制以及S型速度控制。首先, 需要知道电机的运动过程。电机从静止状态运动到按设定的速度运行以及从设定的速度运行到电机停止运行的过程中都有一段加速跟减速过程。区别就在于对加速跟减速这段时间的速度控制。梯形速度控制就是让电机以固定的加速度加速跟减速运动, 在达到设定速度时, 加速度变为0, 速度出现明显的转折。梯形控制脉冲速度与时间曲线如图7所示。

梯形速度控制相对于S型速度控制简单, 但其速度在整个运动过程中会突变。设置较快速度运行时, 电机会突然猛冲, 导致抖动, 影响整个机器的稳定性,长时间运行会导致电机的损坏以及整个平台的定位精度。本系统没有选择梯形速度控制的方式, 而采用S型速度控制的方式。则速度曲线相应变得平滑, 如图8所示。可知, 加速过程中, 在电机静止状态运动到设定的速度值时, 加速度慢慢地增加, 速度也是慢慢增长。快到设定速度值时, 加速度慢慢地减小, 速度也是平稳地减小。减速过程亦是如此。速度随时间的变化平稳, 有利于电机的稳定运行, 对机器的稳定性提供保障, 定位过程不会受到机器抖动的影响。

图7 梯形控制脉冲速度与时间曲线 图8 S形脉冲速度与时间曲线 Fig.7 Trapezoid control pulse speed and time curve Fig.8 S-shaped pulse speed and time curve

3) 输入/输出端点的控制。雷赛DMC1410B运动控制卡提供了大量的通用数字输入/输出接口。输入/输出接口的主要作用是接收信号以及发送信号。输入端口一般都是接一些开关按钮, 开关的通断信号可以通过输入端口接收, 用于实体按钮开启或者关闭机器的相应功能。输出端口连接一些输出信号, 比如电磁阀的通断信号控制一些零部件的功能。输入/输出的信息通过控制卡转化为0和1的信号量, 方便系统读写。

丝印机在进行对位印刷时, 首先要在印刷板面上放置好材料, 尽量把材料放置在印刷板中间水平线的位置, 架好丝网, 调节丝网上的x轴和y轴微调旋钮, 使得丝网上的mark点和材料上的mark点重合, 此时材料上的mark点就是定位的目标位置。然后移动两个相机的位置, 使材料上的mark点在相机视野的中间位置。此时通过取样, 得到材料上mark点的模版图像以及mark点的中心坐标, 设定为定位的目标位置。这样就把FPC的机械定位转化为了相机的像素级坐标定位问题。通过拉料执行机构拉动下一张材料时, 相机上出现mark点的图像, 再应用模版匹配得到mark点的中心坐标, 就能得到mark点与设定的定位目标位置的x轴与y轴的像素偏差, 在把图像的像素坐标转为机械坐标, 传送到4轴的定位机构, 移动印刷板实现定位。传送给定位执行机构的值能决定其运动方式。

传统的运动方式为直接传值运动, 笔者使用雷赛运动控制卡的定长函数来对位, 定长函数的第1个参数是指定的电机轴, 第2个参数是电机运动的脉冲值, 第3个参数是电机运动的速度, 第4个参数是电机运动的加速度。直接传值运动就是将定位之后转化的脉冲值直接赋值给第2个参数, 其他的参数是根据设定的运行参数值赋值的。这种运动方式简单, 在材料没有发生角度偏移时, 能正常运行。但是定位执行机构是个矩形布局的一个整体。材料与实际的位置出现角度偏差的时候, 定位的4个参数值就各不一样。此时按照一样的速度运行, 就会有先后结束的电机轴, 发生定位执行机构的拉扯现象, 即4个步进电机不同步运动。这样会导致定位执行机构在定位过程中的卡顿现象。

图9 速度匹配流程图Fig.9 Speed matching flowchart

针对直接传值运动出现的卡顿现象, 提出了一个速度匹配的方法。速度匹配的过程如图9所示, 即把一个设定的速度值复制给最大偏移参数, 其他参数的速度根据该参数与最大参数的值进行计算得出。这样偏移量大的轴, 速度也越快, 偏移量小的轴, 速度就慢。使4个轴的步进电机近似同步的运行, 对位平台就能顺畅运行而不卡顿。对位平台定位后, 印刷步进电机按照设定的印刷长度脉冲值运动, 进行印刷。完成印刷后, 拉料步进电机根据设定的固定长度脉冲值进行拉料, 进行下一次的定位印刷。

3 实际运行测试

本视觉定位系统是在Microsoft Visual C++ 6.0集成开发环境, 利用MFC框架开发而成。实际定位运行成功的界面如图10所示, 此界面中, 标记点都在搜索图当中, 图像相似度都在90%以上, 标记点都到达目标位置, 定位成功。运行失败界面如图11所示, 此界面中左搜索图中并没有标记点, 此时的图像相似度为66%, 低于设置的相似度值, 系统界面显示失败。

图10 丝印机定位运行成功界面 图11 丝印机定位运行失败界面 Fig.10 Screen printer positioning Fig.11 Screen printer positioning operation successful interface operation failed interface

类感知哈希算法实际的相似度输出以及定位平均耗时如表1所示。从表1中可知, 选定定位50次为一项测试数据。每项基于相似度的模版匹配得到的图像相似度平均值是92.5%, 匹配过程中最大的相似度是99%, 最小的相似度是91%。50次定位的总耗时除以次数得到的平均耗时, 最快的平均用时在193 ms, 最慢的平均用时在215 ms。范围在193~215 ms之间, 满足实际生产效率。

表1 类感知哈希算法相似度输出以及耗时表

感知哈希算法实际的相似度输出以及定位平均耗时如表2所示。可知, 选定定位50次为一项测试数据。每项基于相似度的模版匹配得到的图像相似度平均值是86%, 匹配过程中最大的相似度是97%, 最小的相似度是78%, 相似度的变化波动较大, 不稳定。50次定位的总耗时除以次数得到的平均耗时, 最大平均用时是398 ms, 最小的平均用时是232 ms。范围在232~398 ms之间, 平均用时高于类感知哈希算法。

表2 感知哈希算法相似度输出以及耗时表

在相似度结果上, 因实际的生产环境中, 相机获取的FPC标记点图像的背景跟图案颜色比较接近, 而且感知哈希算法是把图像缩小至8×8尺寸范围, 导致相似度判定没那么稳定, 而类感知哈希算法是直接将对比的图像进行二值化处理, 将背景图案完全分离开, 并且是将图像缩小至10×10像素大小, 对比的图像信息更多, 基于这两点差别, 类感知算法在相似度结果上更具有优势。

在处理速度上, 类感知哈希算法是在比较两张图像二值的时候, 同时进行相似度计算, 比较完成就能得出相似度的值。速度会相对更快一些, 而感知哈希算法是分别计算两张图像的指纹, 每张图像的指纹都需要对比64次才能得到指纹, 两张图像就对比128次。最后还需对比两张图像的指纹不相同的位数, 比较次数较多。

综上结果分析可得, 类感知哈希算法在识别FPC材料上比感知哈希算法更具有稳定性, 处理的速度也比感知哈希算法要快一些。

实际的定位执行机构运行结果是通过每次定位之后, 定位执行机构是否发生卡顿, 运动不到实际定位位置的次数。笔者将速度匹配的运动方式与直接传值的运动方式进行对比。测试是在深圳众匠智能科技有限公司进行的, 分别进行了250次测试, 每50次为一组。定位过程中, 材料是靠滚筒机构拉动指定长度完成的, 所以每次定位得出的结果是不同的, 运动的值也是不一样的。

通过选取5组实验数据做测试, 每组测试次数为50次。进行速度匹配后的具体测试结果如表3所示。可知, 速度匹配的运动方式选定定位执行机构运行50次作为一组测试数据。5组测试数据中都无卡顿情况。

表3 速度匹配方式定位执行机构卡顿与不卡顿情况表

而没有进行速度匹配的直接传值运动方式进行测试的实际运行数据结果如表4所示。每组数据都出现超过10次的卡顿次数, 卡顿最多次数是26次, 频率高, 不卡顿次数为33次。容易造成定位执行机构机械上的磨损, 长时间运行可能导致电机的损坏, 造成机器故障, 缩短机器的寿命。

表4 直接传值方式定位执行机构卡顿与不卡顿情况表

根据实际实验数据结果可得出, 使用提出的速度匹配方式比直接传值的运动方式要好, 可满足实际生产当中需要的效果, 而且具有较高的稳定性, 耐用性。

4 结 语

笔者基于OpenCV开发了丝印机的定位系统, 通过在模版匹配之后增加图像相似度的判定, 当搜索图中没有模版图像时, 就能提醒系统定位失败, 终止系统运行。该方法改进了丝印机定位的效果, 并且没有增加丝印机定位的时间复杂度。因为OpenCV是开源的, 又减少了软件开发的成本。经实验测试, 该定位系统定位精度高, 定位识别度成功率高, 可满足丝印机定位的要求, 具有很好的应用价值。

猜你喜欢
哈希像素电机
像素前线之“幻影”2000
基于特征选择的局部敏感哈希位选择算法
泵用电机水润滑轴承选择与应用
关于电机滚动轴承的选择与计算
哈希值处理 功能全面更易用
瞻望电机的更新换代
文件哈希值处理一条龙
“像素”仙人掌
ÉVOLUTIONDIGAE Style de vie tactile
电机隐忧