摘 要:针对复杂背景下的二维条码定位问题,单一特征提取已很难满足其需要。为此提出一种将图像二值化,然后采用基于数学形态学和kirsch边缘检测的算法滤去图像背景,最后利用投影算法定位条码区域。实验结果表明,该方法简单、快速、准确,很好地满足了实际使用的需要。
关键词:二维条码;kirsch算子;形态学;投影
目前,条码技术在各个行业得到了广泛的应用。但是一维条码受到信息容量的限制,仅仅是对物品的标识,并且它的使用必须依赖数据库的存在。二维条形码是在水平和垂直方向的二维空间存储信息的条码,它不依赖于数据库,信息容量大、可靠性高,因此必将得到广泛的应用。二维条码的种类很多,有QR、PDF417和Maxi code等。
二维条码作为一种应用广泛的自动识别技术,其核心是对条码进行快速、准确地定位。纹理是条码的一个显著特征,目前,主流的算法是基于纹理特征的梯度检测或频域分析[1]来定位二维条码。利用梯度特征进行条码检测与基于频域分析的算法相比较,具有实时性强的特点, 适用于大多数图像。
条码本身纹理特征主要表现为黑白相间且边缘方向一致的矩形块。考虑各种可能出现的复杂背景情况,采用单一的梯度特征很难满足二维码精确定位的需要。本文提出了一种形态学和边缘梯度信息相结合的方法来提取二维码。该方法不同于大多数的条码定位方法,其对条码在图像中的位置以及图像背景的限制很少,而且综合特征定位要比单一特征定位更符合人的视觉要求,因而定位效果更好,应用范围更广。本文将以QR条码为例,进行条码区域的提取。
1 二值形态学基本原理[2]
二值形态学运算是数学形态学的基础,是一种针对图像集合的处理过程。其基本思想是:用具有一定形态的结构元素去度量和提取图像中的对应形状,以达到对图像分析和识别的目的。膨胀(Dilation)和腐蚀(Erosion)是2种最基本、最重要的变换,其他变换都由这2种变换的组合来定义。它们在二值图像和灰度图像中各有特点,还可以推导和组合成各种其他数学形态学算法。
按定义,二值图像上目标边界点是指位于目标内部,且至少有1个邻点位于目标之外的像素。用B(x)代表结构元素,对工作空间A中的每1点x,腐蚀和膨胀的定义分别为:
简单的腐蚀是一种消除边界点的过程,结果是使目标缩小、孔洞增大,因而可有效地消除孤立噪声点。膨胀是将与目标物体接触的所有背景点合并到物体中的过程,结果是使目标增大、孔洞缩小,可填补目标物体中的空洞,形成连通域。
一般情况下,腐蚀与膨胀是不可恢复的运算, 但通过腐蚀与膨胀可以构成开运算和闭运算。开运算和闭运算的定义如下:
先腐蚀后膨胀的过程称为开运算,它具有消除细小物体,并在纤细处分离物体和平滑较大物体边界的作用;先膨胀后腐蚀的过程称为闭运算,它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。
2 条码区域定位算法
2.1 图像灰度化和对比度增强
条形码本身是黑白条码,不需要颜色信息,而且灰度图像的处理速度快,占用空间少,因此首先将图像进行灰度转换。大部分采集二维码的摄像设备性能一般,图像的灰度可能会集中于某一小区间内,如图像过亮或过暗,所以需要根据直方图对图像灰度进行拉伸使之覆盖较大的区间,从而提高了图像的对比度尤其是二维码的黑白对比度,便于对图像二值分割。图1为所处理图像的灰度化。
2.2 基于阈值选取的图像分割
在使用阈值法进行图像分割时,阈值的选取成为能否正确分割的关键,阈值过小容易造成过度分割,过大则不易滤除背景。本文将选用最大方差准则[3]确定最佳阈值,区域间的方差是差异的有效参数。分割后图像如图2所示。
2.3 二值形态学运算
数学形态学是以结构元素为基础对图像进行分析的数学工具。对于结构元素,其中大尺度的结构元素去除噪声能力强,小尺度的结构元素能检测到好的边缘细节。至于窗口尺寸,在边缘提取的形态变换中,一般采用3×3、5×5、7×7的窗口尺寸。本算法中形态学运算既要去噪(如图像中的直线、表格、方方正正的文字及噪点等),又要尽量少地影响边缘细节。结合试验分析,选定2个以中心为原点的3×3结构元素,对图像进行腐蚀和开运算。腐蚀和开运算的结构元素3×3矩阵如下:
对于如图1所示的有复杂背景(如文字等)的条码图像,采用形态学方法消除了影响进一步提取梯度特征的因素,变成了只有少量噪声的图像,而且滤去了毛边,使图像二维码区域的梯度特征更加明显,其运算结果如图3所示。
2.4 利用方向边缘强度确定条码大致区域
条码由黑的条和白的(空)组成, 黑白分界明显,具有很强的边缘强度,利用条码的纹理特征,通过分区域对条码边缘方向的分析,可以滤去大部分的文本、图案以及一些大的黑色块状区域干扰。在此过程中,将分区域进行了分析。
用分块来进行处理,主要是考虑到所获得的图像大小分辨率通常是固定的,先对整幅图像进行分块,图像中的每个块都是一个特征区域,其中特征区域的大小如何确定将是研究的重点。确定的原则是既要尽量细致地反映二维码区域特征,又要兼顾二维码区域边缘分布特征。针对设备的分辨率,把采集得到的灰度图像按网格分割为m×n个子区域,分析每个子区域的边缘强度特征,筛选出可能包含条码的图像子区域。
Kirsch算子具有8个方向的模板,有很好的方向性及很好的精度和抗噪性能。图像中的每个点都用8个掩模进行卷积,每个掩模对某个特定边缘方向做出最大响应。
2.5 水平和垂直投影定位条码区域
经过上述处理以后,所存在的干扰就非常少了,然后对图像进行水平(垂直)投影,确定最后的条码区域。
首先,对图像进行水平投影,其水平像素投影值可看作离散数列,为消除图像中的毛刺或噪声的干扰,可采用加权算术平均法。设Vi表示图像中第i行的原始投影值,V′i-1表示图像中i-1行平滑后的投影值,则1次指数平滑数列[5]的构成为:
平滑后的水平投影如图4(a)所示。由于二维码区域的投影比较大,而在二维码区域上下行附近的投影值也比较大,而且均有谷底存在,因此,找到2个谷底位置,确定上下边界,从而完成第1次分割。
对第1次分割后的图像做垂直方向的投影,平滑后的投影如图4(b)所示。由于二维码区域峰值比较集中,此时采用从两头寻找条码区域的方法,即从两头分别先找到大于一定阈值的点,然后分别向下找到谷底,即为找到的条码左右边界,这样就得到第2次分割结果。
通过2次投影分割,便确定了条码区域的位置,实现了区域定位。若条码区域发生旋转或倾斜,可以进一步采用双线性插值[1]将条码旋转至水平,从而实现条码的精确定位。
采用形态学腐蚀、开运算和求取梯度特征的方法, 最终通过投影算法从有复杂背景的条码图像中分割出条码区域,为识读软件定位了二维条码区域,达到了条码自动识别的目的。实验表明,同传统的算法相比,该算法对图像背景要求较少,简单实用,不仅提高了定位速度,也提高了定位准确率,有效地满足了二维条码识别系统实时性的要求。
参考文献
[1] 刘宁钟,杨静宇.基于波形分析的二维条码识别[J].计算机研究与发展,2004,41(3):463-469.
[2] 李俊山,李旭辉.数字图像处理[M].北京:清华大学出版社,2007.
[3] 刘卫光.图像信息融合与识别[M].北京:电子工业出版社,2008.
[4] 郑翔,黄艺云.Kirsch边缘检测算子的快速算法[J].通信学报,1996,17(1):131-134.
[5] 郭捷,施鹏飞.基于颜色和纹理分析的车牌定位方法[J].中国图像图形学报,2002,7(5):473-476.