刘祎爽,黄理瑞,魏敏捷
(1.上海电力大学 电子与信息工程学院,上海 200135;2.光力科技股份有限公司,河南郑州 450001;3.上海电力大学 电气工程学院,上海 200135)
数显式仪表显示界面可以通过七段数码管字符来传达信息[1]。在部分核电站、井下环境中,其仪表设备老旧,无通信接口,工作人员在该环境下采集数据时,可能会面临突发的危险状况[2-3]。而利用摄像头采集图像,并传输到上位机处理,可以避开人身危险且利于获取实时数据[4-5]。在现阶段的研究中,基于传统穿线法和SVM+HOG 法识别数码管字符,效果良好但未考虑识别小数点[6-7]。模板匹配法耗费时间较长[8]。采用神经网络方法效果良好,但算法复杂且需要先验知识确定隐含层神经元数[9]。采用投影法进行识别时,因数码管种类多样,移植性不强[10]。利用LSSVM 对数码管字符进行读数,识别率较高但处理过程较复杂[11]。
针对以上问题,文中融合了改进穿线法与KNN算法,能够识别多种数码管的字符及小数点。该识别算法简单、速度快。实验结果表明,实现了可实际应用的效果。
图像预处理的目的是通过一系列的处理后,得到清晰完整的单个二值化数码管字符图像。图像预处理流程如图1 所示。
图1 图像预处理流程
灰度化是指将采集到的R、G、B 三通道的彩色图像变为单通道图像的过程。通过灰度化以减少图像的大小,加快处理速度。常用的灰度化方法有如式(1)所示的分量法、如式(2)所示的最大值法和如式(3)所示的平均值法。通过ImageWatch 查看不同环境下数码管发光时,红色通道的值比较高,因此采用加权平均值法,如式(4)所示,得到合理的灰度图,如图2 所示。
图2 图像灰度化
在图像的成像与传输过程中,会产生高斯、椒盐噪声的干扰[12]。在目标点3×3 的区域采用中值滤波的方法,使得图像中孤立的噪声点被其邻域内灰度值的中值所取代,同时还能保留图像的边缘细节。
由于摄像头与被测仪器摆放角度的差异,采集到的图像存在倾斜的情形。通过采用Hough 直线检测,得到如图3(a)所示的直线段,其中仅保留角度为0~30°之间的直线段,之后通过图像仿射变换对图像进行旋转操作,旋转角度为上述直线段角度的平均值,如式(5)所示,αˉ为所有直线与水平线的平均夹角,αi为当前直线与水平线的夹角,n为上述直线段的数量。式(6)中[uv1]和[xy1]为仿射变换的前后的向量,将旋转后的空缺使用黑色填充,如图3(b)所示。
图3 水平校正
二值化指将上述灰度化后的图像转换为只有0和255 两种灰度值的图像处理方法。二值化过程中恰当的阈值既能保留目标区域的完整又能把背景区域屏蔽,通过选取大津阈值法(OTSU 算法)[13-14]对图像进行二值化操作,如图4 所示。
图4 二值化图像
图像的行x和列y的像素点灰度值为f(x,y),图像的边缘是指图像的灰度值导数f′(x,y)突然变大的部分。常见的边缘提取算子中,Sobel 算子对图像较弱的边缘提取效果较差,Robert算子受图像噪声的干扰较大,Canny 算子能够识别图像中的强边缘与弱边缘,并且不容易受到噪声的影响[15]。通过Canny 算子对图像进行边缘检测,之后进行形态学操作将数码管字符相互连接,标记显示区域中面积最大的最小外接矩形,进而定位数码管字符所在区域,如图5 所示。
图5 边缘检测
将上述标记的矩形以外区域的像素值置0,以消除还可能存在的微小连通域的影响。经过实验,对剪裁后的二值化图像采取5×3 的卷积核开运算方法,可以将数码管的段与段连接在一起,同时有效减少非字符连通域的影响,如图6 所示。
图6 字符定位及形态学处理
图像预处理的最后一步是对数码管字符进行分割。投影法是将数码管字符进行垂直方向投影与水平方向的投影,记录白色像素的数量。投影后会出现多个波峰与波谷,以此判断字符位置,如图7所示。
图7 投影直方图
为了消除存在的噪点的影响,设置一定的阈值:当垂直投影中每个波的白色像素个数达到此阈值时,才会将此波的位置记录为单个数码管字符的左右边界。通过ImageWatch 证实,当水平投影中波的白色像素数量大于70 时,即可认为该波为数码管字符的上下边界,分割后的字符如图8 所示。
图8 分割字符
七段数码管的每段都相等,横向与竖向数码管分别互相平行,根据数码管的这一特点,传统的三线穿线法用分割线进行穿线,如图9 所示。通过判断经字符分割处理后的每段数码管与a、b、d分割线相交处的255 像素值数量,来确定被点亮的数码管段,进而识别出数码管字符。根据数字1 的特点,只需要判别该区域的宽高比即可。但传统的利用三线穿线法无法进行小数点的识别。
图9 传统穿线法示意图
针对传统的三线法所存在的问题,在三线穿线的基础上提出了五线穿线法,如图10 所示。
图10 五线穿线法示意图
在接近数码管最右侧和底部的位置增加两条线,来判断数码管是否倾斜及存在小数点。分割线e与a、b至少有一个相交处有值为255 的像素点,则为水平数码管,反之为倾斜数码管。
对小数点的识别部分,在判断数码管是否倾斜后的基础上,分为以下两种情形:
1)对于水平数码管,小数点被单独分割出来,通过判别字符分割后的二值化图像宽高比大小和分割线a上的灰度值为255 的像素点数量,有下述三种情况:
①若宽高比小于0.35,且分割线a上有255 像素点时,图像为“1”。
②若宽高比大于0.35 同时小于0.8,应用传统穿线法即可。
③若宽高比大于0.8,图像为小数点。
2)对于倾斜数码管,小数点与数字被分割到同一张图像中。对于分割后宽高比小于0.35 的二值化图像,有以下三种情形:
①分割线c与e相交处和分割线a上皆有灰度值为255 的像素点,则字符为“1.”;
②分割线c与e相交处有、分割线a上没有灰度值为255 的像素点,则字符为小数点;
③分割线c与e相交处没有、分割线a上有灰度值为255 的像素点,则字符结果为“1”。
若宽高比大于0.35,通过判别分割线c与e相交处的邻域内是否有灰度值为255 的像素点,如果有该像素点则该图像存在小数点,反之则没有,之后对图像应用传统穿线法进行字符识别。
受数码管自身质量、传输过程与字符预处理过程等种种因素的影响,分割后的数字0、2~9 的宽高比可能小于0.35,造成识别错误。在此基础上,对字符分割后宽高比小于0.35 的图像进行KNN 算法识别。
KNN 是机器学习中有监督的分类算法[16],KNN中的K 是指被测试对象与经过训练后的样本中最靠近的K个“邻居”,通过查看邻居的类别进而来判断被测试对象的属于哪一类。对于样本X=(x1,x2,…,xn)和被测对象Y=(y1,y2,…,yn)使用欧氏距离来定义被测对象与训练样本的距离,如式(7)所示:
在使用KNN 算法时,为了消除样本和被测对象之间特征值量级的影响,使用标准差法进行标准化,如式(8)所示:
该文的字符识别程序语言为C++,实验用计算机CPU 为AMD-4600H,实验平台环境为Windows10+LabVIEW2018+OpenCV4.5.0。通过编写LabVIEW程序以及对其CLN 节点对基于OpenCV 和KNN 的字符识别程序动态链接库DLL 的调用,达到了调取原图片、显示读取字符的结果和程序运行时间等关键实验数据的目的,如图11 所示。该文随机选取了300张含有倾斜与水平数码管字符的图像。
图11 实验平台
该文对单独使用改进穿线法和同时使用改进穿线法+KNN 方法的实验结果进行了对比,因为数字1被分割后的二值化图像宽高比小于0.35,故以1 为变量,把测试样本分为两组,每组的图像皆为200 张,以考察不同算法的准确率以及程序识别平均时间的影响。一组含有数字1,其占比为25%,实验结果如表1 所示。
表1 含有数字1的对比结果
另一组不含数字1,实验结果如表2 所示。
表2 不含数字1的对比结果
实验表明,改进穿线法+KNN 法的准确率更高,即提高了经图像预处理后宽高比小于0.35 的字符识别准确率。但是在识别含有数字1 的组别时,该方法的运行时间较长。为了确定KNN 算法识别字符的时间影响,选取了30 张皆含有数字1 的图像,同样用上述的两种方法做对比实验,结果如表3 所示。
表3 只有数字1的对比结果
通过增加对比实验后表明,使用改进穿线法+KNN 方法比单独使用改进穿线法的识别率高。由表2 可以看出,在模拟实际环境中使用改进穿线法+KNN 法的识别时间只比单独使用改进穿线法慢约10 ms,在实际环境下使用改进穿线法+KNN 法识别率达到95%以上。
该文从实际场景出发,在传统使用三根线的穿线法基础上进行了改进,提出了用五根线进行穿线,提高了对小数点的识别精度。在改进穿线法基础上,将机器学习KNN 方法与改进穿线法相融合,保证了识别系统的高准确率以及运行速度,得到了较好的实验结果,对提升数码管仪表的自动检测效率及精度具有参考价值。