郝學(xué)智 張愛梅 姚鵬威 黃 曉 吳國棟
(鄭州大學(xué)機械工程學(xué)院 鄭州 450001)
數(shù)字字符識別是光學(xué)字符識別(OCR)的一個重要分支[1],在車牌號碼、名片、身份證號碼、銀行卡號、快遞號、支票號碼、郵政編碼以及其他編號識別方面具有重要的實用價值和廣闊的市場潛力。因此吸引了大量的研究人員進(jìn)行深入的研究,并提出了不少識別算法。在有關(guān)數(shù)字識別的大型系統(tǒng)中,數(shù)字識別大部分采用BP算法[2](神經(jīng)網(wǎng)絡(luò)算法)或者SVM算法(支持向量機算法),但這些方法計算量比較大,為實現(xiàn)高效率對硬件要求較高,實現(xiàn)起來還非常復(fù)雜,且在純數(shù)字識別的系統(tǒng)中顯得大材小用,而很多純數(shù)字識別算法需要大量的預(yù)處理運算,包含二值化、去噪、均衡化、細(xì)化、規(guī)整、輪廓提取、字符切割、模板匹配、分類器訓(xùn)練[3]等,使得識別的運算量成倍增加。
數(shù)字字符的識別是光學(xué)字符識別中比較簡單的一種[4],因為字符個數(shù)少,只有10個,可以利用字符間不同的特征對其進(jìn)行分類,按類型逐級識別,直到識別出單個字符。因此只要找出一種能將10個字符分別區(qū)分開的特征組合,就可以將數(shù)字字符識別出來。作者提出了一種基于字符投影特征進(jìn)行數(shù)字字符定位識別算法。該算法只需對圖像進(jìn)行簡單的預(yù)處理,就可提取特征進(jìn)行識別。識別過程的框圖如圖1。
這里進(jìn)行的預(yù)處理,主要便于后面特征提取中進(jìn)行字符特征的提取和區(qū)分向量的分類[5]。分兩步:
1)讀取圖像并對字符圖像進(jìn)行二值化處理,由于字符圖像的前景與背景相差比較大,可以直接設(shè)定閾值進(jìn)行二值化;
2)使用Hough變換對圖像進(jìn)行傾斜校正[6],使用高斯平滑濾波器進(jìn)行濾波,去除噪聲。
圖1 數(shù)字識別原理框圖
經(jīng)過預(yù)處理后,數(shù)字字符圖像顯示結(jié)果如圖2所示。
2.2.1 圖像投影
圖像對應(yīng)方向上的投影[7],就是在該方向取一條直線,垂直于該直線(軸)的圖像上的表示字符像素在該軸該位置的射線積分。圖像投影的數(shù)學(xué)關(guān)系如圖3所示,令 f( )x,y表示圖像函數(shù),穿過的一條線稱為射線。沿某一射線的積分稱為射線積分,而射線積分的集合則組成投影。從坐標(biāo)原點向射線做一垂線,以此垂線作為新坐標(biāo)軸t,并構(gòu)成新坐標(biāo)系(t,s),(t,s)坐標(biāo)系由(x,y)坐標(biāo)系旋轉(zhuǎn)Θ角得到,兩坐標(biāo)系關(guān)系如式(1):
圖3 圖像在角度為Θ方向的投影PΘ(t)
射線積分表達(dá)式如式(2):
圖4 字符垂直投影
圖5 字符水平投影
基于圖像投影的數(shù)字字符定位就是將預(yù)處理后的圖像映射成這種特征[8]后,基于這種特征判定圖像中的字符位置(坐標(biāo))。這樣就完成了字符的定位工作,便于下一步識別。
2.2.2 “區(qū)分向量”識別
區(qū)分向量定義為,特定向量與字符相交并將相交次數(shù)作為統(tǒng)計特征,對數(shù)字字符進(jìn)行區(qū)分辨別的向量稱之為區(qū)分向量。
關(guān)于區(qū)分向量基于字符投影特征對字符進(jìn)行辨別,在數(shù)字圖像處理中,左上角為坐標(biāo)原點,水平向右記為X軸正方向,豎直向下記為Y軸正方向。在垂直方向Xmax位置,沿Y軸正方向,第i次顏色變換記為 yi,i=1,2,3,4……2n-1,2n;在水平方向Ymax位置,沿X軸正方向,第j次顏色變換記為xj,j=1,2,3,4……2n-1,2n。其中 y2i-1,y2i即第i行字符所在行的豎直方向的位置,x2j-1,x2j即第i行、第j個字符的水平方向的位置。假設(shè)第i行第j個字符是數(shù)字5,如圖6所示為字符位置。字符位置確定即定位完成后便于進(jìn)行后續(xù)字符的識別。
圖6 第i行第j個字符位置示例
第i行、第j個字符的識別需要三個區(qū)分向量,則區(qū)分向量所在位置的表達(dá)式分別為
其中,式(4)、(5)中 γ1(i,j)、γ2(i,j)為第i行、第j個字符水平方向的區(qū)分向量,式(6)中γ3(i,j)為第i行、第j個字符豎直方向的區(qū)分向量。對每個數(shù)字字符同時使用水平、垂直區(qū)分向量與字符進(jìn)行相交次數(shù)統(tǒng)計,相交次數(shù)統(tǒng)計結(jié)果分將數(shù)字字符為五類,如表1第二列所示:若水平相交次數(shù)分別為2、2,而豎直相交次數(shù)為2,則為數(shù)字為0,單獨一類,直接可得出識別結(jié)果;若水平相交次數(shù)分別為1、1,而豎直相交次數(shù)為1,則數(shù)字為1或7,精確識別結(jié)果待后續(xù)辨識;若水平相交次數(shù)分別為1、1,而豎直相交次數(shù)為3,則數(shù)字為2、3、5其中之一;若水平相交次數(shù)為2、2,而豎直相交次數(shù)為3,則直接識別為數(shù)字8;若水平相交次數(shù)分別為2、1,而豎直相交次數(shù)為3,則直接辨別為數(shù)字9;通過這個結(jié)果可以直接辨別出數(shù)字字符0、8和9,對于剩余兩類同時記錄水平方向區(qū)分向量γ1(i,j)、γ2(i,j)與字符穿越顏色奇數(shù)次變換位置的分別記為X1(2i-1,k)、X2(2i-1,k)其中k=1、2(區(qū)分向量與字符相交顏色奇次變換最多兩次),并用 X1(2i-1,k)、X2(2i-1,k)與 γ3(i,j)作比較,得出相交位置在γ3(i,j)左側(cè)還是在γ3(i,j)右側(cè)。即用如下表達(dá)式進(jìn)行辨別:
在1,7這一類其中 X1(2i-1,k)、X2(2i-1,k)與 γ3(i,j)相減均小于0的確定為數(shù)字1,X1(2i-1,k)、X2(2i-1,k)與 γ3(i,j)相減均大于0的確定為數(shù)字7;同樣2、3、5用此方法也可以輕易辨別。
至此,10個數(shù)字字符已經(jīng)全部辨識出來。區(qū)分向量結(jié)合 X1(2i-1,k)、X2(2i-1,k)與γ3(i,j)大小比較進(jìn)行 辨 識 ,過 程 見 表 1( 在 X1(2i-1,k)-γ3(i,j)、X2(2i-1,k)-γ3(i,j)中,0表示區(qū)分向量與字符的相交位置在左側(cè)即滿足式(7),1表示在右側(cè)即滿足式
(8),對已識別出的字符,不再標(biāo)出)。
2.2.3 識別算法
根據(jù)表1可得字符識別的算法如下。
1)求水平和豎直區(qū)分向量分別與數(shù)字字符的相交次數(shù)
表1 區(qū)分向量進(jìn)行字符識別過程
如果相交次數(shù)為 2、2、2,則為數(shù)字 0,直接退出;
如果相交次數(shù)為1、1、1,,為數(shù)字1或7之一,到第2)步;
如果相交次數(shù)為1、1、3,則為數(shù)字2、3、5之一,到第2)步;
如果相交次數(shù)為 2、2、3,則為數(shù)字 8,直接退出;
如果相交次數(shù)為 1、2、3,則為數(shù)字 9,直接退出;
2)相交位置位于豎直區(qū)分向量γ3(i,j)左右測判斷
區(qū)分向量與字符相交次數(shù)為1、1、1,若相交位置均位于 γ3(i,j)左側(cè),即為0、0,則為數(shù)字1,退出;
區(qū)分向量與字符相交次數(shù)為1、1、1,若相交位置均位于 γ3(i,j)右側(cè),即為1、1,則為數(shù)字7,退出;
區(qū)分向量與字符相交次數(shù)為1、1、3,若相交位置均位于 γ3(i,j)右側(cè),即為1、1,則為數(shù)字3,退出;
區(qū)分向量與字符相交次數(shù)為1、1、3,若 X1(2i,k)小于 γ3(i,j),而 X2(2i,k)大于 γ3(i,j),即為0、1,則為數(shù)字5,退出;
區(qū)分向量與字符相交次數(shù)為1、1、3,若 X1(2i,k)大于 γ3(i,j),而 X2(2i,k)小于 γ3(i,j),即為1、0,則為數(shù)字2,退出。
數(shù)字圖像,是以二維數(shù)組形式表示的圖像,其數(shù)字單元為像元[9]。又稱數(shù)碼圖像或數(shù)位圖像,是二維圖像用有限數(shù)字?jǐn)?shù)值像素的表示。由數(shù)組或矩陣表示,其光照位置和強度都是離散的。數(shù)字圖像是由模擬圖像數(shù)字化得到的、以像素為基本元素的、可以用數(shù)字計算機或數(shù)字電路存儲和處理的圖像。對圖像的處理的根本就是對二維數(shù)組的換算過程。
原圖像經(jīng)過預(yù)處理后變?yōu)橐粋€僅有0、1兩個元素的二維數(shù)組,對圖像的所有操作轉(zhuǎn)變?yōu)閷σ粋€數(shù)組或者矩陣的操作[14],從根本上簡化了圖像的后續(xù)處理過程。
水平投影,對于預(yù)處理后的圖像,進(jìn)行從上到下地掃描[10],如果像素點的像素值為零(經(jīng)過二值化后,代表字符的像素點的像素值為零,如若為一,則反之),則相對應(yīng)列的投影位置零像素加一,本質(zhì)就是旋轉(zhuǎn)角Θ=π時圖像的射線積分。轉(zhuǎn)化為數(shù)字問題,就是對一個矩陣的操作,遍歷矩陣每一列,尋找所對應(yīng)列數(shù)值為0的個數(shù),然后在對應(yīng)位置重新繪制投影的過程,即Θ=π時圖像的射線積分外在表現(xiàn)形式。
1)單行統(tǒng)一大小的字符
對預(yù)處理后的圖像,對整行數(shù)字字符直接進(jìn)行垂直方向和水平方向的投影[11],水平投影直接可以判定每個字符的水平位置,垂直投影確定該行字符的豎直位置,即該行每個字符所在的豎直位置,水平和垂直投影相互配合即可判別出字符的位置。
2)單行非統(tǒng)一大小的字符
對預(yù)處理后的圖像,數(shù)字字符首先進(jìn)行水平方向的投影,根據(jù)水平方向投影,確定每個字符的所的水平位置,進(jìn)而對每個字符再進(jìn)行單獨垂直投影,每個字符水平投影和垂直投影相互配合即可判別出該字符的精確位置,即轉(zhuǎn)變?yōu)?)所述的情況。
3)多行統(tǒng)一大小的字符
對預(yù)處理后的圖像,數(shù)字字符首先進(jìn)行垂直方向的投影,確定字符所在行的位置,對每行字符再進(jìn)行水平方向投影,然后就轉(zhuǎn)變?yōu)?)所述情況進(jìn)行后續(xù)處理。
4)多行非統(tǒng)一大小的字符
對預(yù)處理后的圖像,數(shù)字字符首先進(jìn)行垂直方向的投影,確定字符所在行的位置,對每行字符再進(jìn)行水平方向投影,然后就轉(zhuǎn)變?yōu)?)所述情況進(jìn)行后續(xù)處理。
5)雜亂無章的字符
此算法對于雜亂無章的數(shù)字字符,還不能有效的精確定位字符的位置,所以此算法還具有一定的局限性,并不適用于此種情況的數(shù)字字符識別。
區(qū)分向量為本文定義的一個量,定義為特定向量與字符相交的次數(shù)作為特征[12],對數(shù)字字符進(jìn)行區(qū)分辨別的特殊向量稱為區(qū)分向量。目的是為了用更加簡單明了的方式識別數(shù)字字符,提高程序的魯棒性[13]。
1)區(qū)分向量的位置計算
經(jīng)過大量的統(tǒng)計分析,排除不同字體的干擾,豎直區(qū)分向量位置確定在字符所在水平位置的二分之一處;水平區(qū)分向量位置分別確定在字符所在豎直位置的四分之一和四分之三處。
2)區(qū)分向量與字符相交次數(shù)及位置
在字符定位完成,區(qū)分向量的位置確定后,在每個字符相應(yīng)位置、確定的方向分別做區(qū)分向量,區(qū)分向量與相應(yīng)字符相交,每相交一次便計數(shù)一次。區(qū)分向量與字符相交的本質(zhì),即遍歷區(qū)分向量所在位置的字符相應(yīng)行或列只有0、1兩個元素的一維數(shù)組,形似向量一樣與相應(yīng)字符相交,并且記錄水平區(qū)分向量中像素值由1轉(zhuǎn)變?yōu)?的奇數(shù)次坐標(biāo)位置和垂直區(qū)分向量的坐標(biāo)位置。
水平區(qū)分向量與字符相交的奇數(shù)次坐標(biāo)位置的橫坐標(biāo),與垂直區(qū)分向量的橫坐標(biāo)作比較,如果水平區(qū)分向量與字符相交的奇數(shù)次坐標(biāo)位置的橫坐標(biāo)小于垂直區(qū)分向量的橫坐標(biāo),即水平區(qū)分向量與字符相交位置位于垂直區(qū)分向量左側(cè),否則位于右側(cè),這就實現(xiàn)了對字符的區(qū)分和辨別。
作者使用Visual Studio調(diào)用Intel的開源視覺庫Open Source Computer Vision Library(OpenCV)對該算法進(jìn)行了模擬[14],通過對大量字符的識別,證明了本算法的可行性和正確性[15]。區(qū)分向量的提出和使用提高了程序的魯棒性,降低了數(shù)字字符識別的難度,此算法不僅適用于單行數(shù)字、多行數(shù)字、統(tǒng)一大小或非統(tǒng)一大小的數(shù)字,而且儀表盤數(shù)碼管中數(shù)字字符識別依然適用。因此,本算法也可用于其他的計算機識別中[16]。