摘 要:数字指示秤LCD显示屏数字的快速准确识别可提高数字指示秤作弊性的检测效率。传统方法实现代价较高,应用场景受限。针对此问题,通过分析数字指示秤LCD显示屏数字的七段码数字图像特性,基于图像数字边缘灰度轨迹,计算图像中数字的倾斜角,基于穿线法数字识别机制,建立数字识别关系,给出了数字指示秤LCD屏幕图像中的数字识别方法。实验搭建了作弊数字电子秤检测平台,利用摄像头拍摄了原始LCD显示屏图像。实验结果表明,该方法能够有效识别数字电子秤的LCD显示屏图像数字。该方法在数字识别过程中不需要大量样本的训练,在兼顾识别率和识别速度方面优于支持向量机和K最近邻方法,具有一定的优势,为作弊数字电子秤的准确检测提供了可靠的技术基础。
关键词:数字指示秤;LCD显示屏;数字识别;七段码;穿线法
0 引 言
目前,使用液晶显示屏(liquid crystal display,LCD)显示七段码数字的数字指示秤,由于其成本低、结构简单、易被改装等特点,导致其成为农贸市场的主要作弊秤。针对这些LCD显示屏作弊秤进行执法检测,识别其作弊性,能够有效维护集贸市场的公平公正。目前,数字电子秤的作弊检测过程中主要使用人工进行数字的读取,这种方式效率低、易出错,利用图像识别方法进行图像数字的识别读取可大大提高数字电子秤读取的准确性和效率。
目前,针对图像中的数字进行识别读取的主要方法有基于支持向量机(support vector machines,SVM)的识别方法[1-3]、基于K最近邻(K nearest neighbor,KNN)的识别算法[4-6],以及其他机器学习领域方法[7-8]。这些方法主要是通过对数据集的训练,将其分类能力泛化至新的测试数据来实现分类识别,其学习能力以及泛化能力都比较强,具有高效精准的优点,但需要大量的样本数据支撑,且易受训练函数的影响,实现代价较高,应用场景受限。除此之外,穿线法在七段码数字识别方法中,应用较为广泛。该方法通过建立数字识别表,对数字特征进行匹配,达到识别的目的。该方法简单、速度快,但需对具体的七段码数字字符信息要求完整,并重建字符表。由于数字电子秤的生产厂商较多、其数字显示不统一,通过采集大量的图像建立图像训练集显然成本过高,因此,该文针对数字指示秤LCD显示屏的七段码数字特性,分析数字图像特征,基于穿线法数字识别机制,利用数字图像的边缘灰度值轨迹,计算七段码图像的倾斜角,建立数字识别表,完成对LCD显示屏数字指示秤的七段码数字的识别。
1 数字指示秤LCD显示屏图像特性分析
为了获得清晰的数字指示秤LCD显示屏图像,需要对电子秤的外壳进行拆除,再利用摄像头捕获LCD显示屏图像,其内容包括数字显示区域和电子秤中LCD显示屏的外围电子器件部分。数字显示区域是一块矩形LCD显示屏,其上显示含有小数点的七段码黑色数字,背景光为不均匀分布的灰色背光。显示数字由七段发光二极管点亮、呈黑色,数字形态略微倾斜且规范。黑色数字与背景光呈现灰度效果,其显示效果与光照强度相关,图像效果如图1所示。
图1 数字指示秤LCD显示屏图像
针对数字指示秤LCD显示屏图像中七段码数字的提取与准确识别,首先对该图像进行边缘检测与处理,截取LCD显示屏区域图像;其次,对显示屏区域图像进行灰度化、二值化、图像去噪等处理,获得清晰的数字显示图像;最后,通过图像中像素点的灰度值对图像进行分割处理,再利用七段码笔画边缘处的灰度值计算数字的倾斜角,结合穿线法对数字进行识别处理,最终获得图像的数字。
2 图像处理
2.1 有效区域边缘检测
数字指示秤的LCD显示屏图像内容包括数字显示区域和该区域外的数字指示秤其他区域,两处区域像素灰度有明显的阶跃变化。图像区域边缘分阶跃性边缘和屋顶状边缘两种,阶跃性边缘两边的像素灰度值具有明显不同分布,屋顶状边缘指边缘处的灰度值从增加到减少的变化转折点。数字指示秤的LCD显示屏图像中的数字显示区域和其他区域是典型的阶跃性边缘。为了更加准确地识别出LCD显示屏中的数字,需要准确地识别出图像中的阶跃性边缘,提取出LCD显示屏的数显区域,用于数字的识别。这里使用基于Sobel的边缘检测方法[9-10]进行边缘检测。
Sobel算子是一种离散型差分算子,它根据当前像素周围(上下或左右)相邻的像素点的灰度值加权差,在该处是否达到极值以确定是否为边缘来进行检测。Sobel算子考虑了包括水平、垂直以及两个对角共4个方向对的梯度加权求和,中心位置数值表示当前像素的位置和权值,是一个3×3的矩阵。
使用该矩阵分别与LCD显示屏图像G作如式(1)与式(2)的平面卷积,可得出横向和纵向的亮度差分近似值,Gx和Gy分别用来表示经横向和纵向边缘检测的图像灰度值,则有:
(1)
(2)
得到Gx和Gy后,通过式(3)获得图像中每一个像素的综合灰度值,再与设置的阈值相比较,来确定该点是否为边缘点。
|G|=|Gx|+|Gy|
(3)
令LCD显示屏图像中任意坐标(a,b)处的像素值为f(a,b),则该点经横向和纵向边缘检测的灰度值为:
Gx(f(a,b))=f(a+1,b-1)+2f(a+1,b)+
f(a+1,b+1)-f(a-1,b-1)-
2f(a-1,b)-f(a-1,b-1)
(4)
Gy(f(a,b))=f(a-1,b+1)+2f(a,b+1)+
f(a+1,b+1)-f(a-1,b-1)-
2f(a,b-1)-f(a+1,b-1)
(5)
利用上述公式,将f(a,b)的横向和纵向灰度值结合,得该点的梯度|G(f(a,b))|的值,通过与阈值比较,即可确定(a,b)是否为边缘点。
之后可提取出LCD显示屏的数显区域,用于进一步的处理。
2.2 灰度化
边缘检测后提取到的LCD数字显示区域图像由于光照不均匀,导致图像的颜色饱和度和亮度不均,不能准确反映图像的形态特征,不利于对图像中黑色七段码数字的识别,影响图像中数字的识别结果。因此,需要对图像进行进一步的灰度化和二值化处理,以获得更加明显的色差图像。
边缘检测后提取到LCD数字显示区域图像为RGB三通道彩色图像,需要将R(红)、G(绿)、B(蓝)三个分量的值灰度化,转换为同一个灰度值Gray,这里采用加权平均法对图像的每一个像素进行灰度化[11],如式(6):
Gray=0.299*R+0.587*G+0.114*B
(6)
2.3 二值化
灰度化后的图像减弱了不均匀光照对图像识别的影响,但导致了LCD显示屏中的七段码数字色彩反差不明显。这里采用OTSU大津法[12-13]对图像进行二值化处理,增强图像中七段码的颜色反差程度。
设图像G的数字显示部分的前景色与背景色的分割阈值为T,根据T将LCD显示屏图像中的像素点划分为前景色和背景色两部分,像素点数量分别为N0和N1,其在整幅图像G中的比例分别为ω0和ω1,平均灰度为μ0和μ1,则ω0+ω1=1,μ0+μ1=1。令图像G尺寸为M×N,则N0+N1=M×N,整体灰度值为μ,两部分方差为g,则有:
g=ω0ω1(μ0-μ1)2
(7)
其中,
ω0=N0/(M×N)
(8)
ω1=N1/(M×N)
(9)
μ=μ0ω0+μ1ω1
(10)
通过遍历图像G中的像素,可确定阈值T,使得方差g最大,即此时图像的二值化效果最好。那么,LCD显示屏图像G任意像素(a,b)处的灰度值Gray(a,b)可二值化为灰度值Gray'(a,b),即:
(11)
二值化后的LCD显示屏图像G中的数字呈白色,背景呈黑色,数字与背景色黑白分明,有利于图像中的数字识别。
2.4 图像去噪
经过二值化处理后的LCD显示屏图像,由于包含了较多白色颗粒噪点,使得图像背景不够纯净,且数字的边缘会出现断裂情况,影响了数字识别,因此,需要对LCD显示屏图像进行进一步的形态学处理以消除图像背景中的白色噪点。这里使用开运算对图像进行形态学处理,包含腐蚀和膨胀两种组合操作[14]。具体方法如下:
腐蚀:选定一个3×3的矩阵作为结构元素B,用结构元素B依次遍历二值化处理后LCD显示屏图像G,以B的中心点为中心,检验图像G中在B周围的像素是否与结构元素完全重合。若没有,该点像素值则被设为0。
膨胀:用结构元素B依次遍历二值化处理后LCD显示屏图像G,检验B是否与屏幕图像G有所重叠,若有,则将该点像素值设为255。
通过开运算,有效地去除了LCD显示屏图像中孤立的噪点,同时在一定程度上弥补了数字边缘的缺失和断裂,得到一个清晰度高的屏幕图像。
由于图像中的小数点位置固定,为避免小数点对后续图像数字识别过程的影响,将腐蚀掉图像中的小数点。
3 数字识别方法
3.1 数字分割
为了对图像中的数字进行识别,首先对图像中的数字区域进行分割操作,将数字字符区域分割为独立的数字图像。具体分割方法如下。
对图像G从上到下按行进行像素点遍历,记录每行中白色像素点的灰度值和,形成N个白色像素点灰度和数集合R。同理,对图像G从左至右按列进行像素点遍历,记录每列中白色像素点的灰度值和,形成M个白色像素点灰度和数集合C。设有阈值rt,依次扫描集合R,若有ri>rt,1≤i≤N,ri∈R,则i为数字区域的上边界高度值;继续扫描集合R,若rj>rt,1≤j≤N,i<j,则j为数字区域的下边界高度值。则可确定数字区域的高度区间为从i到j。同理可确定数字区域的宽度区间。经过数字分割处理后,得到多个独立数字图像,是一组较为整齐的七段数码管式数字。
3.2 数字识别
经过数字分割处理后,得到多个独立数字图像。数字指示秤的数字为七段数码管式数字,笔画相对较直,对于图像中的数字识别传统的穿线法可用于识别规则的七段码数字[15]。然而数字指示秤的七段数码管式数字在垂直方向上具有一定的倾斜角,导致数字在识别过程中产生混乱,文中针对此问题,利用数字图像的边缘灰度值轨迹,对倾斜数字进行修正,减少数字的倾斜对识别过程的干扰。
设数字图像的高度为h,横向数码管宽度为l,倾斜角为θ,在图像的h/4和3h/4处,分别绘制两段l/2长度的线段,在过图像中心的l/2处,分别绘制垂直高度为h/4,h/2,h/4,倾斜角为θ的线段,形成七条相交的线段,如图2所示,其编号为七段数码管的编号。
图2 穿线法原理
通过线段的绘制,可得线段与图像中数码管前景色的重叠部分,这里使用线段与数码管前景色重复的像素点数与整个线段的像素点的比例,判断该段数码管是否在图像中显示。
设线段与数码管前景色重叠部分的重叠比例为p,s为判断相应的数码管是否显示的比例阈值,若有p>s,则该段数码管被点亮,即该段数码管可被识别,可识别标识flag被置为true(1),否则置为false(0)。这里给出不同各段数码管阈值s取值,编号为1-6的数码管的阈值为40%,7号数码管的阈值为20%。
对于数字的识别,这里使用数字图像的宽度和数码管状态组合相结合的方法进行数字的确定。经过数字图像的分割,单个数字的图像宽度w与横向数码管宽度l、高度h的关系,有以下几种情况:
(1)若w=l+h*tan θ,数字图像中包含数字0、2、3、5、6、8和9;
(2)若w=l+h/2*tan θ,数字图像中包含数字4;
(3)若w=l,数字图像中包含数字7;
(4)若w<l,数字图像中包含数字1。
在情况(1)中,可根据每个数字的不同编号的数码管状态组合可识别相应的数字,其对应关系见表1。
结合数字指示秤LCD显示屏的七段数码管式数字的倾斜特点,这里使用以下方法进行倾斜角θ 的估算。
在图2中,数字8的七段码图的编号①、②与④、⑤所在的数码管线段为平行的直线,过编号③与⑥的数码管所在的直线,分别过其l/2处的点。以其图像的左下角处为原点,建立如图2的坐标系。
为了准确地绘制垂直方向上的倾斜线,需要准确获得数字的宽度l和倾斜角θ。
表1 状态与数字对应关系
l值的计算过程如下:
(1)分别在图像h/4处和3h/4处对图像的像素点进行遍历,记录第一个与最后一个灰度颜色Gray(i,j)≠0的坐标点,获得坐标点(x1,h/4)、(x2,h/4)、(x3,3h/4)、(x4,3h/4);
(2)通过坐标点可以计算数码管的宽度分别为l1=x2-x1,l2=x4-x3;
(3)则数码管的宽度l=(l1+l2)/2。
由此可获得图像宽度l的值。
倾斜角θ的计算从横坐标l处根据像素点灰度值开始扫描笔画在其纵坐标处的边缘,记录笔画边缘轨迹,并计算其斜率。计算过程,忽略0到l处的坐标点。
根据以上图形,计算过程如下:
(1)令i=l,j=0,即从坐标l处,开始扫描坐标(i,j)处的灰度值Gray(i,j),l≤i≤w,0≤j≤h;
(2)若坐标(i,j)处的灰度颜色Gray(i,j)=0,则令j=j+1;若Gray(i,j)≠0,记录坐标(i,j),(i,j)∈C,C为坐标集合,令i=i+1;
(3)重复步骤(2),直到i=w;
(4)获得坐标集合C;
(5)根据集合C,获得该集合中坐标点的分布,通过坐标点进行线性拟合,或者直线y=kx+b,其斜率为k;
(6)根据斜率k,可计算倾斜角θ。
获得倾斜角后,在图2中进行穿线法线段与数字的识别。
对于小数点的识别,主要考虑了数字电子秤的数字显示特性,其小数点位置固定,因此,经过数字识别,在右侧第三位数字前加小数点即可。
4 实验结果与分析
为了验证上述数字指示秤LCD显示屏数字识别方法的可行性,实验搭建了作弊数字电子秤检测平台,对检测平台所拍摄的数字指示秤LCD显示屏的图像根据上述方法进行数字识别检测。实验所用PC机环境为:CPU i5-8300H,RAM 8G,Microsoft Windows 10操作系统,数字指示秤型号为津鹰219,其拍摄的原始LCD显示屏图片如图1所示。
对图1中的图像进行处理和边缘检测,获得图像中的边缘部分,LCD屏幕的显示区域为规则的矩形。经图像裁剪后,经过灰度化、二值化、图像形态学处理,后进行数字分割,分别按行和列进行像素的灰度值之和统计,得到的灰度值之和的分布情况如图3所示。
图3 灰度值和分布
图3中的实线条表示水平投影,其在0~24像素点的灰度值和为0,表明此部分为图像的上边界的黑色区域,24~145之间为数字显示区域,其最低值出现在像素点90处,灰度值和约为12 000,145~165为图像的下边界的黑色区域。因此,上下部分的图像分割的阈值设置为小于12 000,即可分割上下边界的黑色部分,分割效果如图4(a)所示。
图3中的虚线条表示垂直投影,其在0~180的灰度值和为0,表明此部分为图像左侧黑色部分,180~460处为灰度值波动部分,为数字显示区域,大于460像素部分为图像右侧黑色部分,为需要分割部分。在约210处,有一处波峰,灰度值约为2 000,表明此处为小数点显示部分,因此对垂直方向的切割阈值选在小于2 000,避免分割小数点部分,分割效果如图4(b)所示。
(a)水平分割
(b)垂直分割
图4 数字分割
数字部分的图像分割完后,利用3.2节的数字识别方法对数字进行识别。首先计算横向数码管宽度l和倾斜角θ。这里使用数字0的图片进行计算。
分别在图像h/4处和3h/4处对图像灰度值进行遍历,灰度值轨迹如图5所示。
图5 灰度值轨迹
图5中显示了在图像h/4处和3h/4处的灰度值轨迹,可以准确地获得两处数字的宽度,经计算,l=49。对数字0的图片从l处开始统计其灰度值为255的坐标点,其坐标分布如图6中的点,通过这些分散点拟合直线如图6中的虚线,经计算得倾斜角θ=5.7°。
图6 斜率计算示意图
通过以上过程,即可识别图像数字为1.240。
为了进一步分析基于倾斜角穿线法的数字识别算法(threading method with tilt angle,TMTA),选取常用的KNN与SVM方法进行对比,从识别准确率与识别速度方面进行算法的比较分析。实验随机采集从100到1 000张图片,使用上述三种方法进行数字识别,三种方法的识别率与识别速度如图7和8所示。
图7 识别率对比
从图7可以看出,TMTA方法与KNN在识别率方面基本相同,保持在95%左右,而SVM方法准确率在92%左右。这是由于KNN和SVM方法都需要大量的样本进行训练,以提高识别误差,样本的质量以及选用的训练方法参数等直接决定了识别率,其识别结果不稳定。而在数字指示秤的作弊检测过程中又无法保障样本的质量,因此KNN和SVM的识别结果存在偶然性。
从图8可以看出,TMTA方法和SVM的方法在识别速度上处于较低的水平,而KNN方法识别速度较大,这与KNN方法在识别过程中需要进行大量计算相关。综合图7和8的结果,表明文中的TMTA在兼顾识别率和识别速度方面优于KNN和SVM方法。
图8 识别速度对比
5 结束语
论文分析了数字电子秤LCD显示屏图像数字的特性,利用数字图像的边缘灰度值轨迹,对数字倾斜角进行计算,快速获得整体图像中数字的倾斜角,引入穿线法的识别过程中,使得数字电子秤LCD显示屏图像数字识别率得到提高。
实验结果表明,该方法能够有效识别数字电子秤的LCD显示屏图像数字,且在综合考虑识别率和识别速度方面有一定的优势,为作弊数字电子秤的准确检测提供了可靠的技术基础。