基于MATLAB/GUI的文字圖片識別系統設計
字符識別在圖像處理中是一種比較常見的技術。隨著技術的發展,常見的一些文字通常用圖片的格式來進行存儲。當需要使用到這些文字的時候,圖片上的文字不是很方便人們的使用,這個時候就要借助文字識別的手段,把需要的文字從圖片中提取出來。
本文引用地址:http://www.ex-cimer.com/article/202304/445939.htm本設計運用MATLAB/GUI 設計實現文字圖片識別系統,該系統包括GUI 界面設計,圖像預處理,文字的分割和識別。建立圖片文字模板,該文字識別系統可以實現圖片的讀取和保存、圖片的各種預處理操作,然后對文字進行分割,最后對文字進行識別,并在記事本中顯示識別結果。
1 文字圖片識別系統方案
文字圖片識別系統主要包括GUI 界面設計,圖像預處理,文字的分割與識別3 部分。
文字圖片識別系統的實現方案為:
1)首先根據系統的功能,確定GUI 界面需要的控件或菜單的種類和數量,后面通過編寫每個控件或菜單的回調函數,實現控件或菜單相應的功能;
2)準備幾種不同類型文字的圖片,以備進行識別測試,首先進行圖片預處理,包括對圖像大小的裁剪旋轉、圖像增強、圖像灰度化、圖像二值化等操作,為了后面的文字分割和識別做準備,方便提取文字圖像的特征點;
3)研究字符分割算法,實現對文字圖片的分割和識別;
4)進行系統各個模塊的運行調試,修改相關程序,完善設計系統。
2 文字圖片預處理
預處理比較重要的操作包括以下幾步:
首先對文字圖像進行灰度化處理,將彩色圖像轉換成灰度圖像。其次去除圖像中的噪聲,對圖像進行降噪,提高識別的準確度,噪聲會導致圖像的質量下降,影響圖像上的關鍵信息。接著對文字圖像二值化,將文字圖像轉換成只有黑色和白色兩種顏色的圖像。
2.1 圖像的輸入與裁剪
在MATLAB中,使用函數imread() 函數來讀取圖像,利用函數imshow() 顯示圖像。
當系統讀入一張圖片,通常字符的周邊存在許多與文字沒有關系的其他信息,會對后續的處理帶來干擾,并且增大了程序的運算量,延緩了程序的運行速度。所以有時需要對圖像適當進行裁剪,去掉那些無用的干擾信息。
利用函數imcrop() 可以對圖像進行剪切。還可以借助MATLAB 的算法,獲取鼠標的一些操作來實現截圖的功能。
2.2 圖像灰度化處理
對文字圖像進行灰度化處理,主要是為了提取圖像中的關鍵信息,過濾掉原來圖像中的色彩信息。彩色的圖像經過灰度化處理后,就只剩下一個灰度值。把原本的三通道R、G、B色彩圖像轉變成為單通道的灰度圖像。
灰度化處理算法有分量法、最大值法平均值法和加權平均法。在MATLAB 中使用rgb2gray() 函數,對彩色圖像進行灰度化處理。
2.3 圖像增強
圖像增強是用來降低圖像中的噪聲,使圖像顯示的更加清晰,為后續的處理做準備。
依據圖像所在空間的不同,圖像增強的方式也就不同。一種是基于空間域的圖像增強,它分為灰度變換增強、直方圖增強和空間濾波等。另一種是頻域的圖像增強,常用的有低通濾波、高通濾波和中值濾波等。
經過對幾種算法進行測試對比,最后選擇使用中值濾波對圖像進行降噪處理,然后再對濾波后的圖像進行直方圖增強處理。經過這樣的處理后,得到的圖像字符是比較清晰的。
在MATLAB 圖像工具箱中,采用imhist() 函數計算和顯示圖像的直方圖,用imadjust() 函數進行對比度調整。
2.4 圖像二值化
圖像二值化的實現是選取一個合適的閾值thresh,把它作為分界點。當像素點的像素值大于thresh 時,將其設置為白色,當像素點的像素值小于閾值thresh 時,將其定為黑色。在MATLAB 工具箱中,函數graythresh()的功能就是獲取一定的閾值,然后依據獲得的閾值把圖像進行二值化。函數graythresh() 獲取匹配的閾值的原理是最大類方差法。
將獲取到的閾值用到函數im2bw(t,thresh) 中,就可以把圖像二值化,得到一個黑白色的圖像。
3 文字分割和識別
把二值化后的文字圖像進行字符分割,分割好后的字符會被寫入資料庫,生成待識別的字符模塊。字符識別時,讀取處理后的待識別字符和標準的文字字符模板,把這兩部分進行匹配識別,輸出文字的識別結果。
3.1 字符分割
字符分割采用基于連通域分析的方法,對二值圖像上的文字進行分割。連通區域的標記算法種類是比較多的。在標記過程中,某些算法只經過一次的遍歷就可以標記成功,也有的算法需要不止一次的圖像掃描才可以完成標記。
本設計采用基于行程掃描的算法進行連通域的標記,處理對象是經過處理后的二值圖像,作用是將圖像中感興趣的前景目標和背景分離。圖像遍歷完畢之后,得到很多個團的起始坐標、結束坐標以及它們所在的行和標號。同時,還得到一個等價對列表。
二值圖像中的文字部分是白色的,在矩陣里面用1表示,背景是黑色的,在矩陣里用0 表示。在遍歷圖像的進程中,標號從一開始計數,找到等價的序列并且賦值一個標號給它們。找到等價對后,記錄它們的標號,最后把每個團的標號填入圖像當中。
每一個字符信息都有自己的連通區域,字符是白色的,在矩陣中用1 表示。所以只需要找到像素值是1 的連通區域,然后標注并提取出來。這樣就可以實現字符的分割處理。
3.2 文字識別
模板的匹配識別是利用小尺寸的字符圖像和模板中的圖像進行比較,確定原圖像中是否存在和這個模板相同或者相似的區域。文字識別的效果與選取的模板是息息相關的。
數據庫里面的模板都是經過一系列處理的,字符庫由26 個大小寫英文字母和0~9 十個數字組成。數據庫中的模板圖片的格式是高度42,寬度24。
在匹配識別的時候,首先將待識別圖片進行尺寸變換,轉換成和模板圖片一樣的大小,利用imresize() 函數實現;然后利用函數corr2() 來計算兩張圖片的相似度。當得到的結果在1 的附近,表示兩者的匹配度是很高的,也就是相似的;當獲取的結果接近0,表示二者的匹配度是很低的。
經過對比,獲得1 個與分割字符相似度最高的字庫圖片,建立1 個文檔,把找到的模板圖片中的文字信息輸出在文檔中,即可實現文字的識別。
4 文字圖片識別系統的調試與分析
GUI 界面設計完成后,編寫對應菜單控件的回調函數。然后運行這個系統,對要識別的圖片進行文字識別測試。通過菜單可以實現圖片的讀取和保存,顯示圖片處理的各個中間過程,GUI 可視化界面及部分測試結果如圖1 和圖2。
圖1 文字識別測試一
圖2 文字識別測試二
從識別的結果來看,有時會發生識別錯誤,不過錯誤率是比較低的。
手寫的字符只要寫的很規范,系統能夠準確地識別圖像中的文字。如果數據庫中每個字符有許多的模板字體,可以大大地提高文字的識別成功率。另外就是字母大小寫可能發生識別錯誤,發生大小寫混淆。
總體來說,文字圖片識別系統能夠識別大部分文字,個別的一些識別缺陷,將在以后的研究中繼續改進。
參考文獻:
[1] 張紅霞,王燦,劉鑫,等.復雜背景圖像的字符識別算法研究[J].計算機測量與控制,2019,27(8):29-37.
[2] 劉思慧,江維.基于MATLAB手寫體數字識別程序設計[J].電子世界,2019(3):18-21.
[3] 李夢瑤.基于matlab的圖像增強處理技術[J].信息記錄材料,2020,21(3):19-26.
[4] 甘曉英,白陽,何曉棟,等.一種并行二值圖像連通域標記算法[J].計算機與數字工程,2021,49(5):43-49.
(本文來源于《電子產品世界》雜志2023年4月期)
評論