最近幾年,圖片中的文字識別應用越來越廣泛,例如有道詞典的拍照查單詞,掃描全能王圖片轉文字文檔等等。

那麼這些圖片文字到底是怎麼被識別的呢?本文詳細解釋了從一張圖片中識別文字的全過程,同時給出了Matlab具體的代碼實現。

文字識別過程:

此部分內容適合沒有任何數字圖像處理和編程經驗的小白,請放心食用( ╯▽╰)。

首先,我們知道一張數字圖像是由無數個像素點組成,如果是彩色圖像的話,每個像素點就會有RGB三個數值,這樣一張圖片就可以由一個三維矩陣表示;如果是灰度圖像,那麼每個像素點則有一個灰度值(亮度,取值一般為0~255),所以一張黑白的圖像可以用一個二維矩陣表示。

圖1 物理圖像到數字圖像的映射

對圖像的處理與識別就是對存儲其信息的二維矩陣進行各種操作。

下面是一張從數字圖像中識別文字的流程圖:

圖2 文字識別流程圖

主要步驟:

此部分需要一定的Matlab和工程數字圖像處理的基礎,非戰鬥人員請撤離( ‵▽′)ψ

  1. 在Matlab中調用I1=imread(廣告牌.jpg),將要處理的圖片以二維矩陣形式存儲在I1當中,可以得到原始圖像,如圖3所示。

圖3 原始圖像

2. 調用I1=medfilt2(I1)對原始圖像進行中值濾波,中值濾波可以消除圖片中的雜訊,是空域內的非線性濾波。

圖4 中值濾波

3. 調用I2=edge(I1,roberts,0.25,both),邊緣檢測演算法,強度小於閾值0.25的邊緣被省略掉,both為兩個方向檢測。

圖5 邊緣檢測

4. 調用I3=imerode(I2,se)(其中se=[1;1;1]是結構元素對象)對邊緣檢測後的圖像進行腐蝕。

圖6 腐蝕後的圖像

5. 調用I4=imclose(I3,se)(其中se=strel(rectangle,[20,20])是25X25的矩形)對圖像進行平滑處理。

圖7 平滑圖像

6. 調用I5=bwareaopen(I4,1000),從二進位圖像中移除所有少於1000像素的連接對象,消失的是連續的白色像素數量少於1000的字元。

圖8 移除小方塊後的圖像

7. 根據圖8得到文字所對應區域,再用得到的區域對原圖進行裁剪,此部分代碼較為複雜,就不po上來啦!

圖9 裁剪後的圖像

8. 對裁剪後的圖像重複上述過程,並對單個的字進行切割。

圖10 單個字的分割

9. 將分割好的漢字與字模資料庫做比對,輸出結果。

圖11 輸出的結果

程序原碼:

以上只是敘述了文字識別的主要步驟,需要深入學習的童鞋可以參考程序源碼:

鏈接:提取碼:osa7

https://pan.baidu.com/s/1whNlLHOUnfsiH-iUdmNEpg?

pan.baidu.com

同時附上我航老師推薦使用的參考書《數字圖像處理(matlab)》岡薩雷斯著:

鏈接:提取碼:5j6o

https://pan.baidu.com/s/17LvTsBdQuf-OHz1Ce5vqlQ?

pan.baidu.com

結束語:

好啦,關於文字識別的內容就和大家叨到這裡,有什麼不明白的可以在下方評論或者私聊我,很樂意為您解答,如果文章中有錯誤,也歡迎批評和指正。

推薦閱讀:

相关文章