,, ,,
(1.浙江工业大学 计算机科学与技术学院,浙江 杭州 310023;2.杭州网新闻中心,浙江 杭州 310041)
目前,传统的图像二维条码(如DM码、QR码等)由于其信息量大、可靠性高、成本低廉、准确度高、容错能力强等众多优点已经被广泛的应用于各种领域[1].随着二维条码在手机上的广泛应用,字符二维条码营运而生.字符二维条码不同于传统图像二维条码,条码信息是以字符信息组成条码矩阵,这种以文本方式构建的二维条码可以极大地降低通信成本,方便手机终端的信息发送和接收,是移动增值业务中的一个重要部分.
传统的扫描枪并不支持字符二维条码的识别,因此针对Honeywell扫描枪设计、开发针对扫描枪的字符二维条码识别算法.采用扫描枪进行字符二维条码拍摄时,往往会存在光照不均或者光线不佳的情况;同时,由于扫描枪自带的内存空间有限,运行速度较慢,都使得一些传统的图像分割算法、识别算法无法直接应用于扫描枪.因而,笔者主要研究来自扫描枪的字符二维条码图像分割方法、字符二维条码定位方法以及字符分割和识别算法,提出了采用全局阈值化与局部阈值化相结合的方法进行阈值化处理,并采用形态学方法对二值化后的图像去噪,接着提出了一种改进的圆检测技术,以十字法为基础,通过形状角和圆形度值检测,找出定位符,拟合出字符区域;再采用投影方法进行字符分割,提出了基于特征融合的识别方法实现字符识别.
由于扫描枪获得的字符二维条码图像是灰度图(图1),可直接通过对图像的分割获取字符二维条码.考虑到扫描枪有限的内存容量和运算速度,采用阈值化和去噪两个过程提取字符二维条码图像.在现有的阀值化方法中主要有两类,即全局阈值化方法与局部阈值化方法.其中,在全局阈值分割算法中有一维OTSU算法、Kittler算法和最大熵法等,基于二维灰度直方图的有二维OTSU算法等.局部阈值化方法则是将图像按照一定的规则分割成多个区域,然后对每个区域采用特定的方法选取合适的阈值T进行分割.经典的局部阈值分割方法有:Bersen算法和Wellner算法.
图1 字符二维条码
但总体来讲,全局阀值化方法运算开销大,尤其当光照不均导致,存在对临界像素分割的模糊性,会导致在后期的特征提取中存在一定误差,影响识别率.因此提出一种基于全局阈值与局部阈值相结合的阈值化方法,考虑到扫描枪内存和运行速度的限制,笔者采用基于一维OTSU算法作为全局阈值,局部采用Bradley[2]算法进行阈值化,具体算法过程为
1) 遍历分割出来的字符图像f(x,y),通过一维OTSU算法取阈值T1.
2) 将明显大于T1的值设置为白色,明显小于T1的设置为黑色,而在T1临近领域内的值采用Bradley算法进行局部阈值化,根据实验数据,设置阈值取值范围为[0.8T1,1.2T1]效果比较好.
3) 对于局部区域,采用Bradley算法来获取阈值,记w为Bradley算法的处理宽度,字符条码图像中w取为3,其阈值计算式为
(1)
4) 通过阈值分割后,灰度图像二值化的图像为g(x,y),则全局分割结果为
(2)
5) 局部分割结果为
(3)
针对几种局部与整体相结合的阈值化分割算法在PC端做了相应测试,将笔者算法与文献[3]和文献[4]进行比较,如表1所示,文献中的算法效果不够理想,条码区域中还混有噪声,文献[4]效果清晰,但是引入了许多噪声,笔者算法既能分割条码区域,又能避免噪声的产生.
一般来讲,二值化后的图像会产生一些椒盐噪声,为了提高字符分割的准确率,需对图像进行去噪.常用的图像去噪算法有均值滤波、中值滤波等,这些算法对于不同类型的噪声有一定的去噪效果,但是会引起图像在细节上的一些损失,导致去噪后的图像并不能达到人们预期的效果.采用数学形态学方法的开运算方法[5].开运算数学形式可表示为
X∘B=(XΘB)⊕B
(4)
该运算是一个先腐蚀后膨胀的过程,即X被结构元素B作开运算的结果.其作用主要是消除图像中一些孤立的小物体、在纤细点处分离物体及平滑较大物体的边界,同时并不明显改变其位置和面积.
闭运算数学形式可表示为
X·B=(X⊕B)ΘB
(5)
闭运算与开运算相反,是一个先膨胀后腐蚀的过程,即X被结构元素B作闭合运算的结果.作用主要用来填平物体内细小空洞、连接邻近物体及平滑物体边界,同时并不明显改变其位置和面积.
通过开运算、闭运算来对实现二值化图像去噪.
表1 几种全局与局部阈值结合算法比较
目前,常用的条码定位方法(图2)主要有针对QR码的回形标记、DM码的L型标记等方法,文献[6-7]所提出的字符二维条码的定位符是三角形标记,但是由于回形标记、L型标记和三角形标记定位前期需要找出所有连通区域,然后根据回形标记或L型标的特征进行筛选出定位符,而扫描枪内存有限,无法存放过多连通区域,因此字符二维条码采用实心圆作为定位符,需针对圆的几何特征进行定位.针对圆形自动检测技术主要有基于传统的Hough变换及相应的改进算法[8]、几何参数法.近年来,Chen等[9]提出一种新的随机圆检测算法,该方法对理想图像效果比较好,而对于复杂的图像,就难以获得好的效果.
图2 不同条码定位符
由于提出的字符二维条码是以三个实心圆为定位符,所以,如何定位这些实心圆就成为本算法的一个重要研究内容.根据圆的几何特性,比较常用的方法有形状角、圆形度值等.形状角Dα的定义为
(6)
圆形度值计算式为
(7)
式中S和L分别为圆的面积和周长,理论上,一个标准的圆对应的圆形度值为1.根据这个定义,所有多边形的圆形度值范围在[0,1]之间,当图形越接近圆形时,其圆形度值才能越接近1,因此圆形度值的大小能反映出被检测图形的圆形程度.这个方法具有算法复杂度低、计算速度快和占用内存小等优点,正满足扫描枪对于内存和时间的限制,同时该方法具有很强的鲁棒性.
首先采用十字法获取圆心,十字法的原理是圆心到边缘距离相等,因此如果一个点到上下左右边缘距离相等或者四个距离之差在某个阈值ω中,这里ω取5,就把该点划分为圆心.然后通过这个圆心点,获取一个连通区域.由于扫描枪获得的条码图像可能因图像倾斜导致字符及圆形定位法形变,即圆形定位符会呈现椭圆形.一般来讲,若这种形变不太大,仍可认定为圆形定位符.通过实验验证,若椭圆形的高宽比设在[0.8,1.2]范围内,能够取得比较好的效果.其表达式为
H(Ri)∶W(Ri)<=1.2&&H(Ri)∶W(Ri)>=0.8
(8)
式中H(Ri)和W(Ri)分别为连通域的高度和宽度,Ri为第i个连通区域.
在这些定位方法的基础上,字符二维条码的整个定位过程如下:
1) 先进行几何特征筛选,过滤一些明显不规则的背景连通区域.
2) 对筛选出的连通域进行边缘检测,计算连通域质心,计算形状角Dα,理想的圆Dα为0,因此对于Dα≤ε的图性可判断为圆,这里取ε=π/6.
3) 通过反腐蚀运算计算连通域周长Li和统计连通域像素点的个数获取面积Si,根据这两个值可得到每个连通域的圆形度值Ti,即
(9)
如果最终获得的连通区域大于三个,则对这些候选连通域的圆形度值进行排序,因为在所有封闭图形中,圆的圆形度值是最大的,因而,找出排在前面的三个最大圆形度,即对应着三个定位符.
4) 定位出实心圆后,需找出三个实心圆相应的圆心.计算出圆心,就可以根据圆心坐标和圆的半径来确定字符条码区域的坐标范围.这里的圆心坐标计算式为
(10)
(11)
(12)
式中:(xi,yi)为圆心坐标;ri为第i(i=0,1,2)个圆的半径;Ai为第i个实心圆的面积;Ri为第i个实心圆连通域.
5) 由于字符二维条码形状是对称矩形结构,在已知条码区域的三个顶点坐标情况下,根据几何对称原理可确定第四个顶点D1的坐标,计算式如为
xD1=xA1-xB1+xC1
(13)
yD1=yA1-yB1+yC1
(14)
最后根据四边形A1B1C1D1和圆半径ri最终得出条码区域ABCD,如图3所示.图4给出了字符二维条码的定位过程.
图3 字符二维条码的定位区域
若字符二维条码图像存在倾斜问题,还需对图像进行校正,校正过程如图5所示.
图4 字符二维条码的定位过程
图5 字符二维条码图像校正
字符分割技术就是将单个字符从图像中分割出来.主要的字符分割技术有投影法和模板匹配法.文献[10]使用了一种模板匹配与垂直、水平投影法结合的算法对船名标志牌上的各字符进行分割,该方法可以对噪声较多的图像做出精确的分割,但是模板匹配算法逻辑设计复杂、循环迭代次数过多从而导致计算速度慢.这里,字符分割主要采用了简单常用的投影法.投影法是对字符图像进行逐行扫描,统计像素点的投影,即像素点在列上的个数,根据投影图像中出现的波峰和波谷,字符为波峰,字符间隙为波谷,找到这些波谷就找到了分割点.该算法简单易行,但对字符图像要求比较高,对于一些定位不够精确或者倾向校正不好图像,将难以进行分割.由于条码字符均为全角,行列等宽且对齐的,因此采用投影法进行粗分割,然后再统计像素点的位置进行细分割,具体算法如下:
1) 遍历分割出的条码图像,统计在垂直方式像素点个数,获取字符图像垂直投影值.
2) 然后设置一个平衡窗口w,对投影图像进行均值平滑.
3) 对平滑后的投影图像找出波峰和波谷,并根据波谷划出垂直分割线.
4) 对字符图像进行水平投影.
5) 设置一个平衡窗口h,对投影图像进行均值平滑.
6) 对平滑后的投影图像找出波峰和波谷,并根据波谷划出水平分割线.
7) 根据垂直和水平分割线,将字符划分为N块,对每块进行处理,统计每块中的字符像素点位置.
依据上述的字符分割算法可以得到图6的分割结果.
图6 字符分割图
对分割后的字符进行归一化处理后,即可进行字符特征提取.笔者选取了字符的三种特征:1) 网格特征:字符的网格特征依据指定的维度4×6将每个字符区域分成24个子区域,每个子区域大小为5×5(宽度和高度都为5个像素),统计每个子区域中黑像素点个数作为特征.2) 穿透特征:穿透特征是在字符图像中统计行和列中黑白像素变化次数.3) 内部距离特征:内部距离特征是在字符图像中统计行和列中内部的像素距离,即逐行(列)扫描字符区域,从左至右(从上至下)从遇到第一个由黑变白的像素点开始统计,直到遇到第一个由白变黑的像素为止,作为当前行(列)的内部像素距离,如图7所示.
图7 内部距离特征
将上述这三种结构特征方法融合作为字符的特征.其中,网格特征维数为24,穿越特征的维数为50,字符内部距离特征维数为50,融合后的总维数为124.建立了字符特征后,可以采用多种方式进行字符识别.常用的方法有模板匹配法、人工神经网络法、AdaBoost法及支持向量机(SVM)法.其中人工神经网络法其学习能力好、自适应性强与容错性高,但是需要通过经验和反复的实验来确定,训练花费时间长;AdaBoost法适应性较弱,容易发生退化现象,训练所需的时间也较长;SVM法训练后生成的模板过大,扫描枪内存无法加载运行.因此采用更为灵活的基于模板匹配方法进行识别[11].即事先建立相应的26个字母的模版库,通过字符特征进行匹配,实现字符识别.例如:在图8中,通过分割处理、归一化后获得的四个字符,表2是该四个字符的三个特征值.
图8 归一化后的字符
表2 字符特征值
表2所示的数值表示该字符在各个维度上的特征值,将每个维度上特征值与模板库中每个模板对应的维度上特征值进行差平方运算,计算得到值作为两者之间距离,如将图8中各个字符的特征值分别与模板库中字符特征值进行差平方计算,其中,图8中所示字符与模板库“P”的距离分别为231,252,1 681,1 786,与模板库中“F”的距离分别为1 705,1 811,138,179.由于距离值越小,则字符与模板越相似,可以看出图8(a,b)与“P”最相似,图8(c,d)与“F”最相似.对300幅字符二维条码图像在计算机上进行识别,并与采用SVM识别方法进行比较,笔者的识别率能达到98%以上,如表3所示.
表3 实验结果对比
笔者的方法在识别率上虽然比SVM方法略差,但是识别速度上明显优于SVM的方法.由于利用SVM识别方法,在训练后会产生庞大的模板库,无法运行在扫描枪中.因而,笔者采用了基于特征融合的模板匹配识别方法.该方法由于充分利用了字符的形态特点和排列规律,具有较好的抗干扰能力.
首先分析了字符二维条码的结构特征,研究了基于圆定位符的字符二维条码定位算法,通过形状角和圆形度值算法来实现字符二维条码定位符的定位,进而实现整个条码区域的定位.然后通过基于投影法的字符分割技术,通过二次平滑后进行粗分割,再用像素统计方法进行细分割,以此实现字符分割.通过基于特征融合的模板匹配方法,实现条码字符的识别.该方法不仅速度快,实时性好,而且得到的分割效果也令人满意.
参考文献:
[1] 吴佳鹏.二维条码识读技术及其应用研究[D].天津:天津大学,2010.
[2] BRADLEY D, ROTH G. Adaptive thresholding using the integral image[J]. Journal of Graphics Tools,2007,12(2):13-21.
[3] 杨朔,尚振宏.一种新的二维条码图像二值化算法[J].昆明理工大学学报:理工版,2008,3(1):43-51.
[4] 何振芬.字符二维条码识别技术研究[D].杭州:浙江工业大学,2012.
[5] 谢俊喜.基于数学形态学的二维条码识别[J].计算机工程与技术,2009,38(2):35-39.
[6] 徐彩虹,刘志,冯晓斐.一种字符二维码的设计与实现[J].浙江工业大学学报,2012,40(5):518-523.
[7] 刘志,姜帆,冯晓斐.字符二维条码编码方法研究[J].浙江工业大学学报,2013,41(4):444-451.
[8] 秦开怀,王海颖,郑辑涛.一种基于Hough变换的圆和矩形的快速检测方法[J].中国图象图形学报,2010,15(1):109-115.
[9] CHEN Hai-feng, LEI Hua, KONG Yan-bo, et al. An improved randomized algorithm for detecting ellipses based on least square approach[J]. Journal of Zhejiang University:Engineering Science,2008,42(8):1360-1364.
[10] 古辉,王益义.一种基于模板匹配的船铭牌字符分割方法[J].浙江工业大学学报,2010,38(1):33-40.
[11] 陈玮,曹志广,李剑平.改进的模板匹配方法在车牌识别中的应用[J].计算机工程与设计,2013,34(5):1808-1811.