鄧介一 劉黎志 譚培祥
摘要摘要:通過MATLAB編程實現一種能識別圖片中數字的識別系統。該系統分為預處理、圖像處理和神經網絡3個核心部分。采用預處理和圖像處理技術處理輸入圖片樣本數據,通過經過訓練的神經網絡完成識別功能。驗證結果表明,此系統對樣本圖片的識別正確率可達到100%,對于部分非樣本數據,也可以正確識別。該系統可應用于驗證碼識別、車牌號識別等場景中。
關鍵詞關鍵詞:MATLAB編程;數字識別;圖像處理;神經網絡
DOIDOI:10.11907/rjdk.162852
中圖分類號:TP319
文獻標識碼:A文章編號文章編號:16727800(2017)005004704
0引言
圖像識別是一項利用計算機對圖像進行處理、分析和理解,以識別各種不同模式目標和對象的技術[1]。圖像識別技術目前還不能達到人類的認知水平,但在特定應用環境中,可以通過模式識別或者神經網絡的方法來對圖像中的事物進行分類判斷。一般而言,一個數字字符識別系統主要由3個部分組成,如圖1所示。
圖1系統組成
其中,預處理模塊將圖片格式(例如JPG格式)轉換為計算機能識別的二進制數據流;圖像處理模塊則實現圖像采集與轉換、邊緣提取、歸一化等功能;字符識別模塊可以由兩種方法實現:模式識別或者神經網絡方式,本文系統采用神經網絡方式。
1識別目標及預期結果
此系統識別目標是在沒有強干擾下,系統能夠準確識別出圖片中的0~9這10個數字。示例圖片如圖2所示。
系統識別中所用到的含單個數字的圖片取自圖2,均為純色背景(不一定必須為白色背景)圖片,且圖片中數字圖像無較大噪聲干擾。系統經過一系列處理后,能成功識別,給出識別結果,并且給出處理過程中各個階段的圖片,以便更好地理解圖像處理過程。
2預處理
預處理是將圖片二值化的過程。預處理的目的簡單來說就是把彩色圖片處理為計算機更好處理的二進制數據流。預處理的過程主要分兩部分:彩色圖轉灰白圖,灰白圖轉二進制矩陣形式數據。
目前用于彩色圖轉換為灰度圖的基本算法主要有:最大值法、平均值法、加權法,本文采用加權法。加權法的主要思想是設當前像素的三分量分別為R,G,B,然后利用公式(1)得到轉換后的像素分量值:
GRAY=0.3*R+0.59*G+0.11*B(1)
在MATLAB中,函數img2gray就是采用加權法實現的。圖像二值化就是將圖像像素點的灰度值設置為0或255,也就是將整個圖像呈現出明顯的黑白效果。二值化的處理過程是將圖像中有意義的特征和需要應用的特征進行分割,利用前景和背景灰度特性的差異,低于閾值的像素設定為一個灰度值,高于閾值的像素設定為另一個灰度值。這樣可將前景色與背景色以明顯差異的灰度級區分開來[2]。閾值選取有手動選取和自適應選取兩種方法。MATLAB中圖像二值化的實現主要依靠im2bw函數來實現。圖像二值化過程中,最重要的是閾值變換。比如數組a=[120,254,0,200,99],設定一個閾值125,并對a進行閾值變換,那么a中凡是大于125的,則變為255,小于等于125的則變為0。具體對臨界情況處理可能不同,不過MATLAB中im2bw函數是按照上述方法處理的。a經過閾值變換后變為[0,255,0,255,0]。在MATLAB中使用im2bw函數進行圖像二值化處理時(將圖像轉換為二值圖像),人為設定閾值并不總是十分有效。MATLAB工具箱提供了graythresh函數[3]。該函數使用最大類間方差法得到一個閾值,利用這個閾值進行圖像二值化通常有效。
經過預處理后得到的二值化圖像,還要經過一系列圖像處理過程,才能用于神經網絡訓練。
3圖像處理
圖像處理的目的是將圖片變為神經網絡能處理的數據流。圖像處理流程如下:
(1)利用梯度銳化。使得圖像更加突出,以便分析。算法:當前點像素值與其下一個像素值之差的絕對值,加上當前點像素值與其下一行當前像素值之差的絕對值,如果結果大于閾值,則當前像素值置為此結果。
(2)去除離散噪聲。利用遞歸方法查找當前像素8個方向是否存在黑色像素,這里設置連續長度為15,如果用遞歸方法得到連續像素值大于15,則認為不是噪聲;相反,則認為是噪聲,則置為白色像素。
(3)字符傾斜度調整。盡量保存每個字符的位置一致。
(4)分割字符。找出每個字符的區域,用矩形記錄,記錄每個字符矩形數據。
(5)字符歸一化。根據圖像預處理準備階段設置的歸一化標準,把每個字符的區域進行歸一化,使得所有字符區域矩形一樣大,只是位置不一樣。
(6)字符緊密排列。把所有字符緊密排列,以備識別使用。
本文示例樣本圖片中只有單個數字,且無較大干擾,所以不需要去除離散噪聲、字符傾斜度調整、分割字符和字符緊密排列等步驟。經過預處理的圖像數據,只需要進行銳化和歸一化處理,就可以用于神經網絡訓練。
圖像梯度銳化的目的是使原來的模糊圖像變得清晰。MATLAB中使用的梯度函數為gradient函數。Gradient(F)函數求的是數值上的梯度,計算規則:[Fx,Fy]=gradient(F),其中Fx為其水平方向上的梯度,Fy為其垂直方向上的梯度,Fx的第一列元素為原矩陣第二列與第一列元素之差,Fx的第二列元素為原矩陣第三列與第一列元素之差除以2,以此類推,如公式(2)。
最后一列則為最后兩列之差。同理,可以得到Fy。
歸一化就是把需要處理的數據經過處理后(通過某種算法)限制在要求范圍內。對于圖像處理中的歸一化而言,就是將所有數字圖像中的字符歸化成為一個具有同一高度、同一寬度的圖像,也即讓其中的字符具有同樣規格。MATLAB中用于實現圖像矩陣歸一化功能的函數是mat2gray函數[5]。該函數在數字圖像處理中經常用到,歸一化的具體流程如圖4所示。
經過歸一化處理之后的圖片數據,將其存儲在一個矩陣中,用于神經網絡的訓練。
4神經網絡訓練
人工神經網絡算法主要有兩種:一種是先對待識別字符進行特征提取,然后用所獲得的特征來訓練神經網絡分類器[6];另一種方法是直接把待處理圖像輸入網絡,由網絡自動實現特征提取直至識別出結果。前一種方法識別結果與特征提取有關,而特征提取比較耗時。因此,特征提取是關鍵。后一種方法無需特征提取和模板匹配,隨著相關技術的進步,這種方法更實用。
神經網絡有許多種,在MATLAB中已經有集成神經網絡工具箱。本文系統中,對數字圖像的識別采用BP神經網絡來進行訓練。BP神經網絡為前饋神經網絡,網絡的學習狀態為有導師學習狀態。它是一種具有學習能力和記憶能力的神經網絡,主要由輸入層、中間層、輸出層3個部分組成。輸入層、中間層和輸出層可以具有不同數量的節點,具體數量隨需求而定,沒有具體的標準。單層神經網絡結構如圖6所示。
BP神經網絡是誤差反傳誤差反向傳播算法的學習過程,由誤差的反向傳播和信息的正向傳播兩個過程組成[7]。輸入層各神經元首先接收來自外界的輸入信息,然后傳遞給中間層各神經元;輸入信息經過中間層內部信息處理,實現信息變換,按照信息變化能力需要,中間層可以布局成多隱層或者單隱層結構;最后,一個隱層傳遞把信息傳遞給輸出層,通過進一步處理,實現一次學習的正向傳播處理過程,輸出層把信息處理結果輸向外界。當輸出結果和預先期望效果不符時,就進行誤差反向傳播。誤差通過輸出層,根據誤差梯度下降的方式改變各層權值,由隱層向輸入層依次反傳。多次交替的信息正向傳播和誤差反向傳播過程,是各層連續修正的過程,也是神經網絡學習訓練的過程,這個步驟一直執行到最終輸出的誤差降低到能夠接受的范圍,或者預先輸入的學習次數為止。
此系統中所使用的神經網絡在中間層設置25個節點,1個輸出節點。此系統采用三層神經網絡來實現。采用s型對數函數logsig作為隱含層各神經元的傳遞函數,并采用純線性函數purelin作為輸出層各神經元的傳遞函數。此神經網絡的訓練函數采用traingdx,學習模式函數為learngdm。訓練步數最長設為5 000,性能目標設為0.001。
神經網絡模塊的部分代碼如下:
net=newff(pr,[25 1],{'logsig' 'purelin'},'traingdx','learngdm');
net.trainParam.epochs=5000;
net.trainParam.goal=0.001;
pr為前面圖像處理所獲得的矩陣數據。
神經網絡的訓練結果如圖7所示。神經網絡的性能曲線如圖8所示。
5用戶交互
考慮到該系統具有一定交互功能,讓用戶能自主選擇需要識別的圖片,向系統中添加如下代碼段:
test=input('請輸入用于測試的圖片編號:','s');
x=imread(test,'jpg');
開始運行時,會提醒用戶選擇需要識別的圖片編號,效果如圖9所示。
用戶輸入需要識別的圖片序號后,系統給出識別結果和圖像處理各階段中的圖片,此處用subplot函數來實現一個窗口中顯示多張圖片的效果,部分代碼如下:
6結語
通過樣本識別驗證,本文數字識別系統具有一定識別精度。本系統基本做到樣本圖片的100%識別,對于其它只有單數字的圖片,經過訓練之后,也能準確識別。本系統實現了部分人機交互功能,能讓用戶自主選擇需要識別的圖片,并輸出識別結果和各個處理過程中的圖片。
參考文獻參考文獻:
[1]岡薩雷斯.數字圖像處理(MATLAB版)[M].阮秋琦,譯.北京:電子工業出版社,2006.
[2]梁路宏,艾海舟,徐光佑,人臉檢測研究綜述[J].計算機學報,2002,25(5):449458.
[3]羅華飛.MATLAB GUI設計學習手記[M].北京:北京航空航天大學出版社,2009.
[4]聶影.MATLAB軟件應用研究[J].軟件導刊,2014,13(7):102104.
[5]趙春蘭.《MATLAB軟件應用》課程教學淺析[J].科技創新導報,2015(22):178179.
[6]劉毅娟.人工神經網絡概述[D].唐山:華北理工大學,2015.
[7]陳流豪.神經網絡BP算法研究綜述[J].電腦知識與技術,2010,36(6):1036410365.
責任編輯(責任編輯:陳福時)