摘要:該文就自動評閱系統中手寫英文字母的識別問題提出一種簡單高效的識別方法。對預處理之后的圖像進行水平和垂直投影,通過提取相關的特征信息對目標字母進行分類,經過幾次分類完成對字母的識別。實驗證明該方法可以較快的完成識別,并具有較高的準確性。
關鍵詞:手寫;識別;特征提取
中圖分類號:TP341文獻標識碼:A文章編號:1009-3044(2010)21-5842-03
Study of Handwritten English Alphabet Recognition Algorithm in Automatic Judge System
LI Xin-hua
(Shandong Women's University, Jinan 250002, China)
Abstract: Aimed at the Recognition of Handwritten English Alphabet in Automatic Judge System, the paper presents a simple and effective method. Horizontal and vertical project on processed image, target alphabet are classified by the extracted feature information. After several times target is recognized. Experiment results show that the method has high efficiency and accuracy.
Key words: handwritten; recognition; feature extraction
在學生考試、問卷調查等活動中,采用人工的方式對選擇性題目答案進行統計是一項比較繁瑣的工作。當然,在很多考試中,客觀題評閱采用了OMR技術。考試時要求考生根據規定在答題卡上填涂客觀題答案,閱卷時通過提取每個選項中填涂的灰度值判定該選項是否被選中實現客觀題的自動評閱。這種方式要求考生答題時必須使用規定的填涂筆,并嚴格遵守填涂格式的規定,給考生帶來了一定的限制,填涂時間上也消耗較大。并且在問卷調查等活動中,也不適合采用填涂答題卡的方式。因此,本文提出了一種基于手寫英文字符識別算法實現自動評閱的方法,讓被試者靈活、高效的進行答題,而不受答題用筆、填涂格式等限制。
目前,對字符的識別方法很多,如神經網絡(BP)算法、模板匹配[1]等,但大多都需要進行二值化、降噪、歸一化、細化、提取輪廓、模板匹配、訓練學習等大量的運算處理,使得識別的運算量大大增加,實現起來非常復雜,從而降低系統的實時性,并且在純英文字母識別系統中這些方法顯得大材小用。雖然英文字母包括26個,但在考試、問卷調查等活動中,大多只包括A~D四個字符,最多包括E和F,字符個數少,因此,根據字母的結構特征,只要能找出一種能將它們分別區分開的特征組合,就可以將英文字母進行分類,識別出單個字母。本文提出了一種基于圖像歐拉數和特征向量的英文字母識別算法,該算法只需對圖像進行簡單的預處理,就可提取特征進行識別,整個流程如圖1所示。
1 圖像預處理
手寫字符圖像中因為每個人的寫法不規范,存在較大的隨意性,很顯然存在一定的噪聲。對圖像進行預處理就是為了降低噪聲,便于后面對字母的切分和特征的提取,提高最終識別的正確率。這里的預處理分為二值化圖像、濾波除噪和擴展收縮三步。
1.1 圖像二值化
二值化處理是利用圖像中要提取的目標物與其背景在灰度上存在差異的特點,將圖像中的物體和背景以明顯不同的灰度級區別開,以壓縮數據存儲量,簡化后期處理。常用二值化方法有最優閾值法、OTSU法、迭代閾值法、Berson算法及Kamel-Zhao算法等。迭代閾值法是一種基于逼近思想的方法,從路徑規劃的角度上是最優閾值,在圖像目標區域和背景區域存在明顯差異的情況下,這種算法效果非常理想。本文圖像中的英文字母和背景灰度差別較大,并且實現起來較為簡單,因此采用這種方法。首先取圖像灰度取值范圍中值作為初始闕值T0,然后按照下式進行迭代,直到Ti+1=Ti,或者差值小于某一極小數時迭代結束,并取此時的Ti為分割閾值。
使用Ti作為閾值將背景與字符良好地區分。其數學表達式如下:
其中f(x)為圖像的灰度。圖2(a)是對原始圖像二值化后的結果。
1.2 濾波降噪
通過前面的二值化處理,可以去除或減輕部分噪聲,但不能完全濾除。本文采用二值形態學的基本運算來去除字母圖像中殘留的噪聲。首先對圖像進行收縮,收縮的算法是:如果鄰點是0,則將該點從1變為0。通過收縮可以濾除字符中的黑色噪聲;然后再對圖像進行擴展,擴展的算法是:如果鄰點是1,則將該點從0變為1。通過擴展可以濾除背景中的白色噪聲。進行收縮和擴展后還可以有效地填滿不希望存在的空洞,保證下一步歐拉數計算的正確性。圖2(b)是對圖1(a)濾波降噪后的結果。
2 字母分割
2.1 行切分
行切分就是要將一行行字符從圖像中切分出來,形成單行字母文本圖像數據。對輸入的二值化字母圖像從上到下逐行掃描并計算每個掃描行的像素,以獲取圖像的水平投影。字母圖像沿行方向的水平投影中的每個波峰與圖像中的每個文本行相對應,而在相鄰的兩行之間的空白區域存在較寬的投影信息為0。因此通過對整幅圖像在水平方向的投影圖像進行分析,找到投影波峰所對應的文本行的位置,從而可以計算出每行的行距;其次對所有行的行距累加求和后,求出字母圖像的標準行距,以標準行距對圖像進行行的粗切分;最后在每一個粗切分的行附近上下掃描,進行細微調整,選取最合適的分割位置。圖3(a)是行切分的結果。
2.2 字切分
字切分是從切分出的字母圖像行中將單個的字母圖像切分出來,字切分的正確與否直接影響最終識別的結果。與行切分相同,字切分可以利用字與字之間的空白間隙在圖像行垂直投影上形成的空白間隔實現,但與行切分相比,字母之間的間距遠不如行間距明顯,垂直投影上的空白間隔部分不如行與行之間的空白間隔部分寬,分布也不均勻,使得字切分比行切分困難。
利用上一步行切分的結果,可以獲得字母的高度信息,因為字母一般是方形的,從而可以估計出字母的基本寬度并利用它進行粗切分;對粗切分出的每個字母,以此寬度信息進行衡量,以粗切分的起始位置為出發點,向左右兩方向進行搜索,對起始位置進行細微的調整,從而使得字的切分更準確。圖3(b)是進行字切分的結果。
3 字母細化與連接
因手寫字符時可能會出現粘連、斷裂等情況,影響識別的效果,且識別主要依據輪廓形狀而不是線條的寬度,因此對待識別字母進行細化有助于突出形狀特點和減少冗余信息。所謂的細化就是經過一層一層的剝離,從原來的圖中去掉一些點,但仍要保持原來的形狀,直到得到圖像的骨架。26個英文字母中線條都是相連的,沒有獨立的線條,因此進行細化的同時檢查字母的骨架是否線條保持連續性,否則進行插值填充。目前使用最多的細化算法是邊緣侵蝕細化算法,比如Hilditch細化算法、Rosenfeld細化算法[2]等。
本文選擇Rosenfeld細化算法,利用鄰域掃描目標圖像并進行細化。同時,再進行掃描時,將所有連續的像素分在同一個集合,如果最終出現兩個以上的集合,則分別提取該集合中上、下、左、右4個邊緣像素,計算其與另一個集合中同一行(列)的邊緣像素的距離,如果距離小于某個閾值,則在它們之間進行插值,直到所有像素都在同一個集合中為止。
4 字母識別
將每個字母從圖像中切分成單個的圖像后,就可以進行字母的識別。不同的英文字母具有不同的特征,對其進行快速而高效地分類,有助于系統對其做出正確的識別。同時高效的分類,可以大大縮小下一步模板匹配的范圍,進而提升系統的識別速度。本文通過提取英文字母的特征量,對26個英文字母進行分類,將每個待識別字母的匹配范圍盡可能地縮小,以降低識別所需的時間。
4.1 歐拉數計算
歐拉數(Eu)最通常用于測量空間完整性的方法,即對空洞區域內空洞數量的度量,是一種應用廣泛的對物體進行識別的特征。對于二維圖像,歐拉數定義為連接體數與其中的空洞數之差,計算公式為:歐拉數=連接體數-空洞數,Eu=C-H。歐拉數給出的圖像拓撲特征具有平穩、旋轉和比例不變的特性,對輸入圖像的要求不高。根據歐拉數的不同可以將英文字母集合分為3個子集:歐拉數為- 1的是B;歐拉數為0的有A、D;歐拉數為1的有:C、E、F、G。這樣縮小了識別的范圍,便于下一步的識別。
定義行圖段是二值圖像的每一行中被0或圖像邊界所分隔的值為1的單一像素或多個像素,圖段的大小最小是1,最大不超過行的長度。定義行圖段的相鄰數為圖段相鄰行中對應圖段大小范圍內的圖段數,最小是0,最大是N/2+1,N是圖段的大小。由與行圖段相鄰的上一行產生的相鄰數稱為上相鄰數,與行圖段相鄰的下一行產生的相鄰數稱為下相鄰數。如圖4中的第二行的行圖段數為1,大小為5,它的上相鄰數為2,下相鄰數為1。
對圖像按由上而下的方式逐行掃描一次,則計算該圖像歐拉數的公式[3]為:
其中,Vnk表示二值圖像第n行,第k個圖段所對應的上相鄰數。很顯然,當某一行沒有圖段時,則該行對歐拉數沒有任何貢獻,因此當k=0時,Vnk=1,即Vn0≡1。
4.2 特征向量提取
使用歐拉數只是將字母分成了三類,還無法將所有的目標區分開。但每個字母輪廓的變化都蘊含著大量的信息,通過對這些信息的提取也可以對其分類。以字母“A”為例,從左至右對其進行列掃描,用每列像素由白變為黑的次數作為特征值,第一列由白到黑交替一次,所以特征值記為1。將圖片從左至右,依次掃描,可得到一系列特征值,將這一組特征值稱為垂直特征向量,記為VTD。同理,從上至下進行按行掃描,記錄每行由白變為黑的次數,也可以得到一組特征值,將其稱為水平特征向量,記為HTD。VTD和HTD就是進行字符識別所需要的特征向量,它們完整準確地記錄了目標字母的結構特征。
因手寫字符隨意性較大,會出現橫不平、豎不直等現象,這樣會影響目標的VTD或HTD向量。為解決這個問題,采用相鄰的相同的特征值只計一個的方法,這樣既可以避免上述問題的產生,又可以壓縮數據量,簡化識別運算。如圖5中的左右兩個字符“A”,雖然在寫法上存在較大的區別,但它們的水平和特征向量相同,都分別為VTD(121)和HTD(1232)。
在使用歐拉數分類的基礎上,提取目標的VTD和HTD,可以進一步的進行分類,從而實現目標識別。字母識別的算法如下:
1) 掃描圖像,計算歐拉數(Eu),如果為-1,則字母為B,退出;
2) 如果不為-1,則進行行掃描,計算水平特征向量(HTD);
3) 根據Eu和HTD進行分類匹配,匹配成功,得到識別結果,退出;否則轉下一步;
4) 進行列掃描,計算垂直特征向量(VTD);
5) 根據Eu和VTD進行分類匹配,匹配成功,得到識別結果,退出;否則進入特殊字符處理。
5 特殊處理
由于手寫字符的隨意性,提取出來的字符圖片即使是相同的字符,字符也會有存在很大的不同,因此會存在無法識別的字母。這些無法識別的字符可能是應該被識別出來的有效目標,但也可能是被劃掉的錯誤答案等。為保證最終識別的正確率,對無法完成識別的特殊字符,利用關鍵點進行最后一次識別。
掃描骨架對象,提取出其中所有的“交點”作為關鍵點。如果關鍵點的個數過多,則認為該字符為無效字符;否則,分析關鍵點的個數及之間的位置關系,再結合歐拉數和特征向量確定結果。
6 結論
對該算法進行了模擬,通過對大量對象的識別,證明了該算法的可行性和高效性,識別結果也具有較高的正確率。但算法需要更多的考慮特殊情形,以進一步提高識別率。
參考文獻:
[1] 路浩如.手寫體漢字識別問題綜述[J].計算機應用與軟件,1994,11(2):1-8.
[2] Joseph Vybihal,Danielle Azar.Hilditch's Algorithm for Skeletonization Software Systems.Kendall Hunt Pub.2008.
[3] 張重陽,婁震,楊靜宇.基于輪廓和統計特征的手寫體數字識別[J].計算機工程與應用,2004(9):83-84.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文