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