基于图像处理的条形码定位与识别技术研究

2020-07-12 13:16
科技视界 2020年35期
关键词:条形码条纹黑色

王 颢

(南京邮电大学通达学院,江苏 扬州225127)

0 引言

目前常用的条形码识别方法是通过人工的方式将激光扫描装置对准待识别的条形码[1],这种识别方法的准确率较高,但是识别结果会受到条形码印刷质量的影响,当条形码数量较多时也只能逐个识别,识别效率较低[2]。基于图像处理的条形码识别技术是采用图像处理算法自动搜索条形码的位置、定位条形码的边界并完成条形码的识别。如果一张图片包含多个条形码,可以同时定位并识别图片中的所有条形码,提高了条形码识别的效率,而且条形码的定位与识别过程不需要人工干预,真正做到了条形码的自动定位与识别。

1 条形码的搜索定位

在复杂场景中,丰富多样的图案对条形码的定位产生了极大的干扰,如何快速、准确地搜索条形码的位置及边界是条形码自动识别技术的关键问题[3]。在条形码的搜索定位过程中,既要排除相似图案的干扰,又要保证图像中所有条形码区域都能被搜索到,因此要提取条形码的特征,作为与其他图案相区分的关键因素。

1.1 条形码的图像特征

EAN-13码是目前应用范围最广的条形码之一,标准的EAN-13码图像是由一系列黑、白相间的竖直条纹构成,因此水平方向存在明显的灰度变化,但竖直方向的灰度基本保持不变,这一特征就是条形码区别于其他图案的关键特征[4]。另外,条形码具有明显的矩形特征,条形码的宽度与高度之比约在2∶1到4∶1之间,这个特征可以用于进一步排除相似图案的干扰。而且条形码的左右两侧各有一部分空白区域,也可以为条形码的定位提供参考信息。

1.2 条形码的特征提取

由于条形码的水平方向存在黑、白颜色的突变,如果对同一行的相邻像素进行灰度差分,求得的横向差分值会很大;而竖直方向的灰度几乎保持不变,如果对同一列的相邻像素进行灰度差分,求得的竖向差分值几乎为零,而横向差分值与竖向差分值的比值将会更大,因此选择横向差分值与竖向差分值的比值作为特征参数,完成待识别图像的特征提取。

如果单独对图像的每个像素进行特征提取,得到的结果容易受到噪声的影响而产生较大的误差,因此可以将整幅图像划分为若干个子块,子块的大小与图像中条形码所占的比例有关。

1.3 条形码区域的定位

对包含条形码的图像进行特征提取后,可以得到以子块为单位的横纵差分比值,将各像素的特征参数作为该像素的像素值,则可以重构出一幅与原始图像大小相同的比值图像。比值图像中较亮的区域就是横纵差分比值较大的区域,有可能就是条形码所在的区域。

为了将条形码区域准确的分割出来,需要选择一个合适的阈值对比值图像进行二值化处理[5]。阈值的选择是二值化处理的关键步骤,直接决定条形码定位的效果。为了适应不同的图像类型,本文基于统计学中的“3准则”[6]将二值化的阈值确定为其中和分别为比值图像中所有像素灰度值的平均值和方差。

对比值图像进行二值化处理后,再根据条形码图像的几何特征进行二次筛选,排除宽度与高度之比在2∶1到4∶1以外的区域,剩下的区域即为条形码区域。

2 条形码的识别

待识别的条形码图像一般存在于复杂背景中,每个条形码所占的比例较小,黑色条纹和白色条纹的边界并不清晰,而且各个条纹并不是完全竖直的,存在一定角度的倾斜,增加了条形码识别的难度。

2.1 条形码的编码规则

EAN-13码对应一组13位的数字序列,除了第一个数字外,每个数字都对应两个白色条纹及两个黑色条纹,每个条纹的宽度可能是1倍到4倍的基本模块宽度,四个条纹的总宽度固定为7倍的基本模块宽度,不同的条纹宽度组合对应不同的数字。

EAN-13码中有三部分的条纹长度明显长于其他条纹,从左到右依次为起始符、中间分隔符和终止符,它们的条纹宽度都是1倍的基本模块宽度。起始符和终止符分别代表条形码的开始和结束,分别由一个白色条纹和两个黑色条纹构成。中间分隔符由三个白色条纹和两个黑色条纹构成,起到分隔左侧数据符和右侧数据符的作用。左侧数据符对应第2个到第7个数字,每个数字都由白色条纹开始,黑色条纹结束,共占42个模块宽度。右侧数据符对应第8个到第12个数字,每个数字都由黑色条纹开始,白色条纹结束,共占35个模块宽度。最后一个数字是校验符,起到校验识别结果的作用,与右侧数据符一样,由黑色条纹开始,白色条纹结束,共占7个模块宽度。

2.2 条形码的倾斜矫正

标准的条形码在竖直方向几乎没有灰度变化,然而实际拍摄的图像中,条形码会存在一定程度的倾斜,竖直方向会存在较明显的灰度变化,如果直接对倾斜的条形码进行识别,很有可能产生识别错误。因此,在对条形码进行识别之前,需要对倾斜的条形码进行矫正。Hough变换是常用的图像矫正算法,如果图像的倾斜角度统一,Hough变换能够得到较好的矫正效果。然而,实际拍摄的图像中,即使是同一个条形码图像,倾斜角度也并不一致,因此不能用单一的角度对整个条形码图像进行方向矫正。本文将条形码图像分为宽度相等的三个区域,分别求出三个区域的倾斜角度,并根据各区域的倾斜角度分别进行方向矫正,以降低图像倾斜对条形码识别结果的影响。

2.3 条形码的识别

条形码识别的关键是准确确定条形码图像中各个条纹的宽度,因为条形码的编码规则是由条纹的宽度决定的。标准的条形码图像中,黑色条纹和白色条纹的边界清晰,易于确定各个条纹的宽度。然而,在包含复杂背景以及多个条形码的图像中,条形码区域所占的比例很小,黑色条纹和白色条纹之间的灰度处于渐变的过程,无法用统一的阈值进行二值化处理。

为了降低噪声的影响,对条形码图像求取竖直方向的灰度平均值,由此获得一组投影序列,这组序列反映了条形码图像在水平方向的灰度变化情况。由于实际拍摄的条形码图像中,黑色条纹和白色条纹的差异并不明显,灰度值相差不大,难以区分它们之间的边界。本文采用线性拉伸的方法提高白色条纹和黑色条纹的对比度,把白色条纹和黑色条纹中间位置的灰度值分别拉伸为255和0,其他位置的灰度值进行线性拉伸。最后,用统一的阈值对拉伸后的投影序列进行二值化处理,得到黑色条纹和白色条纹的宽度,完成条形码的识别。

3 结语

基于图像处理的条形码定位与识别技术真正实现了条形码的自动化识别,为条形码识别技术的发展指引了新的方向。然而,该项技术对图像质量的要求较高,对一些模糊的条形码图像识别率有所降低。随着图像采集技术以及图像处理技术的发展,基于图像处理的条形码定位与识别技术将会日益完善,应用范围将会逐步扩大。

猜你喜欢
条形码条纹黑色
创意条形码
谁是穷横条纹衣服的人
从条形码到二维码
从条形码到二维码
别急!丢了条纹的斑马(上)
别急!丢了条纹的斑马(下)
黑色
条形码大变身
黑色星期五
那个黑色的夜晚