馬 玲,羅曉曙,蔣品群
廣西師范大學(xué) 電子工程學(xué)院,廣西 桂林541004
食品、藥品的生產(chǎn)日期及有效期一般是使用點陣字符打印在包裝袋上,當(dāng)發(fā)生安全事故時,很容易溯源,并找出故障原因并追責(zé),因此研究與開發(fā)自動點陣字符識別系統(tǒng)不僅可以有效保證食品、藥品安全,而且可以減少質(zhì)量控制過程中所需的勞動力成本。
目前針對基于點陣字符的識別研究,主要分為三種方法:基于人工神經(jīng)網(wǎng)絡(luò)的方法、基于統(tǒng)計學(xué)識別的方法和基于匹配識別的方法[1-3]。由于人工神經(jīng)網(wǎng)絡(luò)一般需要大量樣本,很難在樣本數(shù)據(jù)有限及識別環(huán)境復(fù)雜的情況下取得很好的識別效果。例如,文獻[1]采用卷積神經(jīng)網(wǎng)絡(luò)對易拉罐點陣字符進行識別,文獻[2]采用基于HALCON的乳制品箱體點陣字符進行識別,這兩種方法都只針對原始采集到的圖像,且只包含點陣字符,而不包含其他非點陣字符信息,但是實際生活中產(chǎn)品外包裝上的信息一般包括點陣字符信息和非點陣字符信息,因此這兩種方法有一定局限性。那么,基于統(tǒng)計學(xué)識別的方法和基于匹配識別的方法就成為目前點陣字符識別研究的熱點。文獻[3]提出了一種針對LED點陣文本檢測與識別的方法,考慮了復(fù)雜背景下的點陣字符識別,對本文有一定的參考價值,但是該方法的總體識別率不高。與以上方法不同的是,本文提出了一種基于模板匹配和支持向量機(Support Vector Machine,SVM)的組合識別方法。本文方法與傳統(tǒng)字符識別方法相比考慮了兩點實際問題:第一,充分利用點陣字符的離散性質(zhì),在包含其他非點陣字符信息的圖像中自動定位出點陣字符區(qū)域,這對于復(fù)雜背景下的點陣字符識別具有一定意義。第二,考慮到點陣字符識別不同于一般的連續(xù)字符識別,單一方法對點陣字符識別率的提高效果甚微,故提出組合方法。
傳統(tǒng)的點陣字符識別方法,對于圖像中包含連續(xù)字符等情況考慮得較少,一般采集到的圖像只包含點陣字符信息,如文獻[1]和文獻[2],這不符合實際情況。本文考慮點陣字符的非連續(xù)性質(zhì),通過采用組合識別方法,不僅提高了字符定位的準確性,而且提高了復(fù)雜環(huán)境下的字符識別率,且識別結(jié)果的魯棒性較好。實驗結(jié)果表明:在保證實時性的前提下,該組合算法的識別率達到96.10%,基本滿足工業(yè)場合的應(yīng)用要求。
本文提出的組合點陣字符識別方法主要流程如圖1所示,以伊利盒裝純牛奶頂面的字符圖像為例進行研究。首先讀取伊利盒裝純牛奶頂面的字符圖像,因為讀取的圖像會有噪聲、非均勻光照、傾斜等問題,所以先要對其進行預(yù)處理。然后,對預(yù)處理后的圖像進行點陣字符的定位和分割。最后,分割后得到的圖像分別進行灰度模板匹配判定和特征模板匹配判定,繼而得到兩個判定結(jié)果。若判定結(jié)果相同,則輸出字符識別結(jié)果;若判定結(jié)果相異,將這兩個結(jié)果送給SVM進行判定,得到最終識別結(jié)果。下面介紹具體識別過程。
對采集到的伊利盒裝純牛奶頂面的RGB圖像轉(zhuǎn)換為灰度圖像,如圖2(a)所示。由于采集的圖像存在非均勻光照影響,則需要在灰度圖像上進行底帽變換,以便獲得的二值圖像不丟失點陣字符信息。底帽變換定義為閉操作圖像減去圖像本身,即:
圖1 識別流程圖
其中,f為原始圖像,b為結(jié)構(gòu)元素,Bhat為經(jīng)過底帽變換后的圖像。
得到底帽變換后的圖像,如圖2(b)所示。然后,本文采用最大類間方差法(Otsu),得到二值圖像如圖2(c)所示。該算法是基于自適應(yīng)閾值的二值化方法,利用灰度特征將圖像劃分為目標和背景。如果類間方差較大,則目標與背景之間的差異更大。因此,使用Otsu算法在圖像二值化中獲得顯著效果[4]。圖2(c)中待識別點陣字符的白色像素為目標像素。該二值圖像較好地保留了點陣字符的完整性,為后續(xù)的字符分割工作做好了準備。
圖2 預(yù)處理圖像
對于得到的二值圖像,需要提取包含點陣字符信息的圖像區(qū)域,以便提取單個字符。分割的準確性越高,字符識別效率就越高。本文圖像的分割按以下兩步進行。
3.2.1 帶有噪聲的圖像行分割
一個點陣字符是由一個個離散小點組成的,具有離散性質(zhì),與一般的連續(xù)字符相比,相鄰的點陣之間有一定的空隙,如圖3紅色方框中的感興趣區(qū)域所示。一般采用的連通分量分析、滑動窗口、基于水平或垂直投影等方法都不能直接用于分割點陣字符圖像,因為這些方法都是假定字符是具有整體性的。
文中提出使用點陣字符的離散性質(zhì)來解決其定位及分割問題。如圖3所示,圖像中有點陣字符、連續(xù)字符和噪聲,這里將非點陣字符部分視為噪聲??紤]點陣字符是由一個個離散小點按照一定規(guī)律排列而成的字符,可以看到,組成點陣字符的離散小點的連通面積在小噪聲連通面積S1和連續(xù)字符連通面積S2之間。故將連通面積在(S1,S2)之外的像素進行刪除,得到的圖像如圖4所示。這一步操作可以減少提取目標像素點時的噪聲影響。
圖3 點陣字符區(qū)域
圖4 進行連通域處理后的圖像
如圖4所示,非目標像素中也有一些具有與點陣字符類似的區(qū)域。因此,需要進一步處理,以分割出最終點陣字符區(qū)域。因為任何字符通常都是在水平方向上展開,所以先使用3×24的水平結(jié)構(gòu)元素對二值圖像進行膨脹。這樣,白色像素區(qū)域就會連接起來,形成多個連通域,如圖5所示。較小的矩形區(qū)域?qū)儆诜屈c陣字符信息,是需要刪除的噪聲。然后,對圖5中的矩形區(qū)域進行連通域面積計算,連通域面積較高的兩個區(qū)域作為字符點陣區(qū)域,其他區(qū)域可視為噪聲刪除,如圖6所示。
圖5 膨脹連通域圖像
圖6 兩個較大連通域
考慮牛奶盒上的點陣字符在打印過程中會發(fā)生隨機角度傾斜的現(xiàn)象,如圖7紅色方框中的點陣字符所示。對于此類圖像,在找到兩個連通域面積最高的區(qū)域后,采用Hough變換[5]進行直線傾斜角度計算,然后采用雙線性插值算法將傾斜的點陣字符區(qū)域矯正為水平方向。接著,采用兩個連通區(qū)域的最小矩形的方法,找到這兩個連通域的邊界框。最后,使用計算出的邊界框從圖2(c)中裁剪包含完整點陣字符的原始二值點陣字符,得到行分割點陣字符圖像,如圖8所示。
圖7 點陣字符傾斜
圖8 點陣字符行分割圖像
3.2.2 字符分割
經(jīng)過以上處理步驟以后,可以得到兩行待識別的點陣字符圖像。由于點陣字符的離散性,及在打印過程中點陣字符會出現(xiàn)少量點缺失、少量墨水滲出等現(xiàn)象,這些會對字符正確識別產(chǎn)生影響,因此需要將得到的圖像進行形態(tài)學(xué)處理。形態(tài)學(xué)的基本思想就是用具有一定形態(tài)的結(jié)構(gòu)元素,去度量和提取圖像中的對應(yīng)形狀,以達到對圖像分析和識別的目的[6]。本文實驗中使用3×1的垂直元素來膨脹圖8點陣字符行分割后的圖像,以增加字符質(zhì)量。
然后,使用垂直投影法對膨脹后的行分割圖像進行單個字符分割。垂直投影可以簡單地定義為一個列向量,包含每行中存在的白色像素的數(shù)量,即:
圖9展示了圖2(a)中點陣字符行分割后膨脹的垂直投影。
圖9 行字符垂直投影
可以發(fā)現(xiàn)字符之間用空格分隔,因此該區(qū)域中的垂直投影為0。從圖9中可以看到有11個谷,利用這種特性進行逐個字符分割,得到10個單個字符。分割后得到的字符大小不一,將其統(tǒng)一大小為42×24,如圖10所示。
圖10 分割后單個字符圖像
3.3.1 字符庫的建立
模板匹配是基于測試圖像和模板圖像之間的某些相似性來識別字符的方法。首先為每個類別建立標準模板庫,模板的數(shù)量可以是一個或多個,這樣可以增加模板特征的差異性。然后將測試字符與每個類別的標準模板進行比較,以獲得基于相似距離或相關(guān)系數(shù)的最佳匹配模板[7]。本文的模板庫是提取實驗中分割后得到的單個字符圖像,其大小也為42×24,如圖10所示部分字符模板庫。共收集約500個字符,分為14類:數(shù)字“0~9”,特殊字符“:”,字母“A~C”。
3.3.2 基于灰度的模板匹配判定方法
基于灰度的模板匹配方法是采用統(tǒng)計相關(guān)的方法來求待識別字符和模板庫字符的匹配相關(guān)程度,通過相關(guān)函數(shù)R確定[8],將待識別字符和存儲在模板庫中的字符進行如式(3)的計算。選擇具有最相關(guān)值的字符作為該字符的最佳匹配字符,得到識別結(jié)果Out1。
3.3.3 基于特征的模板匹配判定方法
基于特征的模板匹配方法,一般提取的特征有點特征、線特征等,將這些特征與模板庫中的字符進行特征匹配,得出識別結(jié)果。文中的實驗是將字符分割成由40個網(wǎng)格組成的形式,橫向上分為8份,縱向上分為5份,取每個網(wǎng)格中字符像素的個數(shù)即白色像素的個數(shù),將所有值排成一列形成40維[9]特征向量,如圖11所示。根據(jù)網(wǎng)格特征判定待識別字符,得到識別結(jié)果Out2。
圖11 網(wǎng)格特征
支持向量機是一種監(jiān)督機器學(xué)習(xí)算法,能找到全局最優(yōu)解,很好地避免了過擬合的發(fā)生[10],主要用于模式分類和非線性回歸。本文采用支持向量分類模型(CSVM for Classification,C-SVC),它是一種比較常見的二分類支持向量機模型。具體形式如下:
(1)設(shè)已知訓(xùn)練集:
其中,xi∈Rn,yi∈{1,-1},i=1,2,…,l;l為訓(xùn)練樣本總數(shù);n為樣本空間維數(shù)。
(2)選取適當(dāng)?shù)暮撕瘮?shù)K(x,x′)和適當(dāng)?shù)膮?shù)C,構(gòu)造并求解最優(yōu)化問題:
使得:
得到最優(yōu)解:α?=(α。本文核函數(shù)采用徑向基函數(shù):K(x,x′)=exp(-γ‖ x-x′‖2),γ>0。
(3)選取α?的一個正分量0<α?i<C,并據(jù)此計算閾值:
(4)構(gòu)造決策函數(shù):
SVM的二分類模型是先制作訓(xùn)練集,并將每個樣本對應(yīng)的類別號做成類別集,輸入訓(xùn)練樣本和類別號,進行SVM訓(xùn)練,得到每種組合的SVM的二分類模型。在基于灰度模板匹配和特征模板匹配判定結(jié)果相異情況下,即Out1≠Out2,將相異識別結(jié)果送給SVM進行識別。SVM將待識別字符分類為最接近的匹配類,并返回類標簽,為最終識別結(jié)果Out。
輸入:原始采集圖像In。
輸出:原始圖像中每一個待識別點陣字符的識別結(jié)果Out。
(1)將原始采集圖像In進行灰度化、底帽變換、Otsu二值化處理,得到預(yù)處理后的圖像I1,其中目標像素為白色像素點。
(2)將I1圖像中聯(lián)通面積小于S1且大于S2的噪聲去除,得到圖像I2。
(3)用3×24結(jié)構(gòu)元素對圖像I2進行膨脹處理,取出兩個連通域面積較大部分的圖像I3。
(4)采用Hough變換進行傾斜角度α計算,并給定閾值α,若|α|>θ,則進行傾斜校正,得到圖像I4。
(5)計算I4圖像中兩個聯(lián)通面積的矩形邊界坐標,按照坐標位置從I1圖像中分割出兩行點陣字符I5、I6。
(6)采用垂直投影法,將行字符I5、I6進行單個字符切割,得到一個個的單個字符。
(7)將單個字符采用基于灰度的模板匹配算法進行識別,得到識別結(jié)果Out1。
(8)將單個字符采用基于特征的模板匹配算法進行識別,得到識別結(jié)果Out2。
(9)若Out1≠Out2,則將Out1和Out2送給SVM進行判定,得到最終識別結(jié)果Out。若Out1=Out2,則識別出單個字符。
如圖12所示的識別結(jié)果,藍色方框內(nèi)的字符是識別結(jié)果Out1,綠色方框內(nèi)的字符是識別結(jié)果Out2,紅色方框內(nèi)的為最終識別結(jié)果Out。通過觀察可以看到,一般正常點陣字符可以得到正確識別,例如數(shù)字“2、1、8”等。但數(shù)字0,由于在噴碼過程中出現(xiàn)點陣字符少量的點缺失,采用本文方法,先使用基于灰度的模板匹配識別結(jié)果為“C”,再使用基于特征的模板匹配識別結(jié)果為“0”,最后使用SVM識別結(jié)果為“0”,做出正確識別。這表明本文方法對點陣字符圖像識別的魯棒性較強。
對于模板匹配算法而言,假設(shè)圖像尺寸為n×n,那么循環(huán)的次數(shù)由圖像的大小決定,對整幅圖像的所有像素完成一次遍歷,故需要執(zhí)行n×n次循環(huán)操作,總體的算法復(fù)雜度為O(n2)。標準支持向量機的時間復(fù)雜度為O(n3)[11]。故本文提出的算法時間復(fù)雜度是:
圖12 識別結(jié)果
由上式可以看出,本文提出的組合算法相比于目前常用的單一模板匹配算法復(fù)雜度略高,相比于SVM算法并沒有增加其時間復(fù)雜度,且本文提出的算法識別準確率均高于這兩種單一算法。
本文所有算法都是使用Matlab R2016a進行仿真實驗的。不同牛奶外包裝盒點陣字符設(shè)計規(guī)則不同,但是一般的規(guī)律為第一行字符為產(chǎn)品的生產(chǎn)日期和生產(chǎn)流水號,第二行字符為生產(chǎn)時間及序號。生產(chǎn)日期和生產(chǎn)時間為“0~9”和特殊字符“:”,共11類字符。由于生產(chǎn)廠商不同,生產(chǎn)流水號則不同,一般為“A~C”中任意字母。
實驗中采集150幅牛奶外包裝盒頂面圖像,每個圖像點陣字符共20個字符左右,共計3 000個字符。這150幅圖像,包含外包裝盒點陣字符在不同背景、不同角度傾斜及拍攝到的原始圖像具有不同尺寸等情況下收集,如圖13所示。
圖13 測試圖像部分示例
4.2.1 點陣字符定位結(jié)果對比
點陣字符的定位是實現(xiàn)點陣字符正確識別的關(guān)鍵步驟。目前,字符定位的主要方法有:基于投影的方法、基于邊緣檢測的定位方法、基于數(shù)學(xué)形態(tài)學(xué)與連通域的定位方法等[11]。本文利用Matlab R2016a軟件按照圖14所示的流程圖進行點陣字符定位。
圖14 點陣字符定位方法流程圖
圖15是本文方法與其他兩種定位方法的定位結(jié)果對比圖。從圖15中可以觀察出,第二列是文獻[12]的定位結(jié)果,定位圖像中帶有噪聲,且定位位置錯誤。第三列是文獻[13]的定位結(jié)果,結(jié)果中帶入了其他不需要的連續(xù)字符和噪聲。以上兩種方法均給下一步進行點陣字符的準確識別帶來困難。第四列是本文方法的定位結(jié)果,定位準確且未帶有噪聲。
圖15 點陣字符定位結(jié)果對比
對于本文實驗中所有點陣字符的定位效果,使用定位準確性來進行評價。
由圖16的對比結(jié)果可以看出,采用本文提出的定位方法,定位準確性均高于其他兩種方法。因此,本文提出的利用點陣字符離散性質(zhì)的定位方法能夠在復(fù)雜背景下很好地自動定位到點陣字符位置,定位準確性高。
圖16 不同方法字符定位準確性比較圖
4.2.2 點陣字符識別準確率對比
為了驗證本文組合識別方法的有效性,采用文獻[14]和文獻[15]的字符識別方法,與本文方法進行對比,字符識別準確率如圖17所示。
圖17 不同方法的字符識別準確率比較圖
前兩種算法都僅考慮了連續(xù)字符的特征,而本文采用的三種識別方法的組合方法,綜合考慮了點陣字符的離散性質(zhì)及經(jīng)過形態(tài)學(xué)處理以后的字符的連續(xù)性質(zhì),從而有效地提高了整體識別率。
4.2.3 運算耗時比較
運算耗時通常也是評價算法優(yōu)劣性的一個重要指標。現(xiàn)將本文方法與文獻[6]提出的方法進行對比,其對比結(jié)果如表1所示。實驗表明,本文方法相比文獻[6]的方法在識別22個字符時,識別時間節(jié)省了約40 ms。文獻[6]采用4次不同結(jié)構(gòu)元素閉運算填寫細小空洞,而本文采用了一個垂直元素1次填寫細小空洞,故而節(jié)約了一定時間。
表1 兩種識別方法識別耗時比較
本文提出了一種基于模板匹配和SVM組合的點陣字符識別方法,研究了復(fù)雜背景下點陣字符的識別問題。相比于傳統(tǒng)的字符定位和識別方法,本文通過考慮點陣字符的離散性質(zhì)提高了點陣字符的定位準確性,通過組合識別的方法不僅提高了點陣字符的識別準確率,并且具有較高的字符識別魯棒性,研究結(jié)果對保證食品與藥品安全具有較好的應(yīng)用價值。