王凌燕
(山西傳媒學院 融媒技術學院, 山西 晉中 303619)
隨著我國經(jīng)濟的發(fā)展, 各行業(yè)各領域經(jīng)濟交流活動不斷增多, 每天都產(chǎn)生大量的紙質(zhì)合同、 表單表據(jù)等文件, 而由人工處理這些文件的工作量大, 且容易產(chǎn)生錯誤, 因而紙質(zhì)文件的電子化處理需求不斷提高。而現(xiàn)有的基于模式識別的OCR(Optical Character Recognition) 系統(tǒng)識別速度慢, 且對字跡清晰度和圖片亮度的依賴性較大。針對上述問題, 筆者提出了一種基于DAG-SVM(Directed Acyclic Graph Support Vector Machine)的OCR識別系統(tǒng)。
OCR(Optical Character Recognition)指利用計算機技術將光學圖片信息中的字符進行識別、 提取, 從而得到可編輯的電子文本[1]。OCR識別系統(tǒng)通常分為3部分: 圖像預處理、 分割和字符識別。OCR識別系統(tǒng)性能的提高也是通過對這3個模塊的研究與改進實現(xiàn)的。
圖像預處理包括灰度化處理(最大值法、 均值法和加權平均值法)、 圖像濾波(空域和頻域)、 歸正處理。圖像分割包括二值化(迭代閾值法、 大方法、 灰度直方圖法和分塊閾值法等)和字符分割。字符識別的算法主要分為三大類: 模板匹配法、 神經(jīng)網(wǎng)絡識別法和統(tǒng)計支持向量機法。
通過文字識別的特性以及對各算法的仿真研究, 筆者采用加權平均值法對圖像進行灰度化處理, 利用空域算法中的直方圖均衡化算法完成圖像濾波, 選擇迭代閾值法和分塊閾值法相結合的算法進行圖像二值化, 采用投影算法分橫向和縱向兩次進行字符分割處理。在字符識別的幾種算法中, 模板匹配法的算法簡單, 其缺點是抗干擾性差, 神經(jīng)網(wǎng)絡算法的缺點是算法復雜, 實現(xiàn)相對比較困難, 因此筆者對支持向量機算法SVM(Support Vector Machin)進行了改進, 采用有向無環(huán)圖SVM(DAG-SVM)算法進行字符識別處理。
筆者將基于模式識別的OCR識別系統(tǒng)分為3部分: 圖像預處理、 分割和字符識別, 并分別對3個模塊的算法進行了研究及實現(xiàn)。實驗結果表明, 該系統(tǒng)識別率及速度均有提高。
圖1 系統(tǒng)架構圖Fig.1 System architecture diagram
系統(tǒng)的框架結構圖如圖1所示, 依次將待處理圖片經(jīng)過圖像預處理、 分割和字符識別后, 提取出圖片中的信息, 獲得文本類型的信息。其中3個模塊的主要功能如下。
1) 圖像預處理。圖像預處理是OCR識別系統(tǒng)的一個重要步驟, 因為圖像在生成過程中經(jīng)常會受到一些噪聲的影響而造成圖片質(zhì)量下降, 比如光照的強弱變化、 角度的傾斜等都會給字符識別造成困難。因此, 必須對圖像進行預處理, 主要包括圖像濾波、 灰度化處理和歸正處理等。
2) 圖像分割。在進行圖片信息的字符識別前, 通常還需要進行圖像分割處理, 即將待處理的圖像經(jīng)特定的算法分成一定數(shù)量特定區(qū)域, 以突出OCR識別所關注的目標。圖像分割技術同樣是OCR識別的關鍵環(huán)節(jié), 主要包括二值化處理和圖像分割, 為后續(xù)OCR識別提供訓練及測試樣本。
3) 字符識別。其核心內(nèi)容為基于模式識別算法, 對圖像分割所得區(qū)域進行識別并輸出結果。OCR識別算法主要包括模板匹配法、 神經(jīng)網(wǎng)絡分類法和支持向量機分類法等。
筆者下面對3個模塊的具體算法設計及實現(xiàn)進行詳細闡述。
圖像預處理的主要內(nèi)容包括灰度化處理、 圖像濾波和圖像歸正。
通常需要處理的圖像均為彩色圖片格式, 彩色圖像包含RGB(Red Green Blue)3個基色的像素值, 信息量較大。在圖像識別處理中, 需要對其進行灰度處理, 從而降低圖像大小, 提高處理效率。
圖像灰度化即對圖像的RGB3個通道的灰度值進行計算, 將24 bit像素的圖像變換為8 bit圖像, 主要分為3類: 最大值法、 均值法和加權平均值法[2]。
該系統(tǒng)采用加權均值法對圖像灰度化進行處理, 灰度處理效果如圖2所示。
圖2 灰度化處理結果Fig.2 Grayscale processing results
具體采用的灰度值H計算公式如下
H=k0R+k1G+k2B
(1)
k0+k1+k2=1
(2)
其中R、G、B分別為3通道的像素值,k0、k1、k2為像素的加權值。根據(jù)人眼對綠色、 紅色、 藍色3個基色的敏感度高低, 選取3個參數(shù)的值依次為0.3,0.59,0.11。
待處理的圖片由于光照、 背景等拍攝條件不同, 會加入不同程度的噪聲, 因而要從圖像中提取信息, 首先要對其進行濾波處理, 從而減少噪聲, 提高圖片質(zhì)量。圖像濾波方法主要包括空域和頻域兩種, 空域算法即在圖片空間內(nèi)對灰度像素值進行計算, 其算法比較簡單, 但會造成一定的像素失真; 頻域算法指將圖像變換到頻域中進行處理, 失真較小[3], 但其實現(xiàn)比較復雜。
該系統(tǒng)處理的圖片對象中, 通常只關心其中的字符區(qū)域, 而其背景等因素則不予考慮, 且要求具有一定的實時性。綜合上述考慮, 該系統(tǒng)采用空域算法中的直方圖均衡化算法完成圖像濾波。
一幅8 bit圖像在范圍[0,255]內(nèi)共有L個灰度級, 其直方圖定義為離散函數(shù)h(rk)=nk, 其中rk為區(qū)間[0,L]內(nèi)的第k級亮度,nk是灰度級為rk的圖像中的像素數(shù)。具體直方圖均衡化算法由Matlab的工具箱函數(shù)histeq()實現(xiàn)。濾波前后的頻譜圖如圖3所示, 由圖3可以看出, 濾波加強了圖像的主頻譜。
圖3 濾波前后的頻譜圖Fig.3 Spectrum before and after filtering
該系統(tǒng)圖像歸正的處理主要針對傾斜圖像的調(diào)整, 具體算法如下。
1) 圖像邊緣檢測。采用Hough變換算法完成圖像的邊緣檢測[4], 形成圖像的邊緣矩形。
2) 傾斜處理。根據(jù)檢測所得的矩形, 計算與X軸、Y軸方向的夾角, 并通過矩陣變換對圖像進行傾斜處理。
圖像歸正實現(xiàn)的效果如圖4所示。
圖4 圖像傾斜處理效果圖Fig.4 Image processing effect
圖像分割分為兩個步驟實現(xiàn): 二值化和字符分割。
二值化, 顧名思義, 是將整個圖像的灰度值分割為兩個數(shù)值。二值化的過程, 即將圖像每個像素的灰度值處理在{0,1}區(qū)間內(nèi)。二值化后的圖像, 是一個取值只有0和1的邏輯數(shù)組, 可降低圖像處理的復雜度。
圖像二值化的主要算法包括: 迭代閾值法、 大方法、 灰度直方圖法和分塊閾值法等[5]。筆者對上述算法, 使用Matlab分別進行仿真實驗, 并根據(jù)仿真結果, 最終決定選擇迭代閾值法和分塊閾值法相結合的算法。
3.1.1 迭代閾值法
圖5 迭代閾值法流程圖Fig.5 Flow chart iterative threshold method
迭代閾值算法二值化的流程圖如圖5所示。該算法首先采用迭代算法求取最佳閾值, 再對圖像進行二值化處理, 相比于單一閾值法二值化誤差更小。
3.1.2 分塊閾值法
分塊閾值法即首先對將圖像進行分塊, 隨后對每一個分塊分別采用單一閾值法進行二值化, 該算法可減小不均勻光照引起的二值化誤差, 根據(jù)Matlab試驗結果, 在2×3分割情況下, 分塊閾值法的二值化效果最佳。
3.1.3 分塊迭代閾值法
該系統(tǒng)采用二值化算法為上述兩種算法的結合, 即分塊迭代閾值法。具體實現(xiàn)過程為: 首先對圖像進行2×3的分塊, 然后對每個分塊采用迭代閾值法進行二值化處理。二值化實現(xiàn)的效果如圖6所示。
圖6 二值化效果圖Fig.6 Binary effect diagram
字符分割是對二值化處理后的圖像進行切割, 獲取字符圖片塊。該系統(tǒng)處理的圖片信息一般橫向填寫, 而字符之間存在空隙, 因此采用投影算法分橫向和縱向兩次進行分割處理[6]。
3.2.1橫向分割
橫向分割的具體步驟如下:
1) 建立數(shù)組, 數(shù)組的長度為圖像的總行數(shù);
2) 分別對圖像每行的灰度值進行累加, 并保存;
3) 對得到的數(shù)組值進行掃描, 判斷相鄰位置的數(shù)組中保存的灰度累加值是否為0, 若不為0, 則與當前數(shù)組位置進行聚合, 依次根據(jù)每行的灰度值, 對相鄰數(shù)組位置的數(shù)值是否為零進行判斷, 完成聚合, 并將聚合所得結果進行保存;
4) 對第1次聚合所得的結果, 可能存在干擾信息, 因而根據(jù)結果計算閾值, 大于該閾值的才能達到聚合要求, 小于該閾值的按空白行設置, 將干擾信息去除后, 最終可得橫向分割結果。
圖7為橫向切割結果其中一行的效果圖。
3.2.2 縱向分割
基于橫向分割所得的結果繼續(xù)進行縱向分割, 其原理與橫向分割類似, 縱向分割的步驟如下:
1) 對每個聚合的行塊, 建立數(shù)組, 數(shù)組長度為圖像的列寬;
2) 縱向?qū)γ苛械幕叶戎颠M行累加并保存于數(shù)組;
3) 類似于橫向分割的方法, 對縱向的數(shù)組值依據(jù)相鄰數(shù)組位置的灰度值是否為0進行聚合, 得到縱向聚合塊;
4) 此時所得聚合塊的內(nèi)容主要為字符, 因而采用閾值法將過大或過小的聚合塊去除, 最終可得縱向分割結果。
縱向分割的結果如圖8所示, 經(jīng)過閾值處理后僅保留漢字, 去除其中二維碼部分的圖片。
圖7 橫向切割結果 圖8 縱向切割結果 Fig.7 Transverse cutting results Fig.8 Longitudinal cutting results
經(jīng)過圖像預處理及分割后, 所得到的字符塊圖像的尺寸存在差別, 直接進行字符識別會造成圖像特征不一致。因此, 在進行圖像分割后的字符圖像需要進行歸一化處理。
本系統(tǒng)分割后的圖像大小平均值為30.95×32.11, 因此將所有的字符塊經(jīng)過插值/取值計算, 歸算得到32×32像素大小的圖像。
OCR字符識別的算法主要分為3大類: 模板匹配法、 神經(jīng)網(wǎng)絡識別法和統(tǒng)計支持向量機法。
模板匹配法即將測試樣本與模板進行相似性比較, 通過計算得到相似度最高的模板, 即為模板匹配法的識別結果。模板匹配法主要包括兩種: 一是將字符圖像經(jīng)點陣化處理后, 與標準的模板匹配提取特征進行比較; 二是首先對字符圖像塊進行特征提取, 然后再與模板進行比對。模板匹配法的算法簡單, 其缺點是抗干擾性差[7]。
圖9 DAG-SVM多分類器示意圖Fig.9 Schematic diagram of DAG-SVM multiple classifiers
神經(jīng)網(wǎng)絡由若干簡單原件以一定的層次組成, 并行連接構造而成網(wǎng)絡, 其輸入和輸出的變換關系一般是非線性的, 具有一定的自學習、 自適應特點。神經(jīng)網(wǎng)絡目前廣泛應用于模式識別領域, 具有學習能力強、 容錯性好等特點[8]。神經(jīng)網(wǎng)絡算法的缺點是算法復雜, 實現(xiàn)相對比較困難。
支持向量機(SVM)[9-10]是基于統(tǒng)計學習理論發(fā)展起來的, 主要用于二類線性可分問題。其基本思想為: 首先選取合適的核函數(shù), 主要包括多項式、 徑向基函數(shù)、 雙曲正切等, 將低維空間的樣本通過非線性映射到高維特征空間中; 求解最優(yōu)分類超平面, 其結果對應低維空間的非線性分類面[9]。SVM算法在解決非線性識別問題中擁有不可替代的優(yōu)點。
由于SVM主要用于二分類問題[11], 因此本系統(tǒng)對支持向量機算法進行了改進, 采用有向無環(huán)圖SVM(DAG-SVM)[12]。該算法的原理是在訓練階段訓練k(k-1)/2個二類分類器, 在測試階段構造一個有向無環(huán)圖(見圖9), 在進行決策時, 依次對類別進行判斷。
表1 字符識別結果
該系統(tǒng)采用60幅圖像進行了字符識別, 并基于Matlab對模板匹配法、 神經(jīng)網(wǎng)絡法和DAG-SVM算法分別進行了仿真實驗, 結果如表1所示。
由表1可以看出, 按照識別率排序依次為神經(jīng)網(wǎng)絡法、 DAG-SVM算法和模板匹配法, 但考慮到神經(jīng)網(wǎng)絡算法的訓練時間長且實現(xiàn)比較復雜, 因此該系統(tǒng)選擇DAG-SVM算法作為字符識別的算法。
筆者提出了一種基于模式識別的OCR字符識別系統(tǒng), 主要包括3個模塊: 圖像預處理、 分割和數(shù)字識別。圖像預處理主要完成濾波、 圖像灰度化和傾斜處理等; 圖像分割包括二值化處理、 字符分割、 歸一化, 完成對字符圖像的切割; 字符識別則對分割所得的圖像進行識別。該系統(tǒng)對字符識別的3類算法進行了研究及Matlab仿真, 綜合識別率及實現(xiàn)復雜性選擇DAG-SVM算法。經(jīng)過仿真試驗, 該系統(tǒng)的識別率為92.86%。下一步工作的重點是研究識別率更高的字符識別算法, 將人工智能前沿的深度神經(jīng)網(wǎng)絡與字符識別進行結合。