前言
從圖像中提取文字屬于信息智能化處理的前沿課題,是當(dāng)前人工智能與模式識(shí)別領(lǐng)域中的研究熱點(diǎn)。由于文字具有高級(jí)語(yǔ)義特征,對(duì)圖片內(nèi)容的理解、索引、檢索具有重要作用,因此,研究圖片文字提取具有重要的實(shí)際意義。又由于靜態(tài)圖像文字提取是動(dòng)態(tài)圖像文字提取的基礎(chǔ),故著重介紹了靜態(tài)圖像文字提取技術(shù)。
隨著計(jì)算機(jī)科學(xué)的飛速發(fā)展,以圖像為主的多媒體信息迅速成為重要的信息傳遞媒介,在圖像中,文字信息(如新聞標(biāo)題等字幕) 包含了豐富的高層語(yǔ)義信息,提取出這些文字,對(duì)于圖像高層語(yǔ)義的理解、索引和檢索非常有幫助。
圖像文字提取又分為動(dòng)態(tài)圖像文字提取和靜態(tài)圖像文字提取兩種,其中,靜態(tài)圖像文字提取是動(dòng)態(tài)圖像文字提取的基礎(chǔ),其應(yīng)用范圍更為廣泛,對(duì)它的研究具有基礎(chǔ)性,所以本文主要討論靜態(tài)圖像的文字提取技術(shù)。靜態(tài)圖像中的文字可分成兩大類: 一種是圖像中場(chǎng)景本身包含的文字, 稱為場(chǎng)景文字; 另一種是圖像后期制作中加入的文字, 稱為人工文字,如右圖所示。場(chǎng)景文字由于其出現(xiàn)的位置、小、顏色和形態(tài)的隨機(jī)性, 一般難于檢測(cè)和提??;而人工文字則字體較規(guī)范、大小有一定的限度且易辨認(rèn),顏色為單色, 相對(duì)與前者更易被檢測(cè)和提取, 又因其對(duì)圖像內(nèi)容起到說(shuō)明總結(jié)的作用,故適合用來(lái)做圖像的索引和檢索關(guān)鍵字。對(duì)圖像中場(chǎng)景文字的研究難度大,目前這方面的研究成果與文獻(xiàn)也不是很豐富,本文主要討論圖像中人工文字提取技術(shù)。
靜態(tài)圖像中文字的特點(diǎn)
靜態(tài)圖像中文字(本文特指人工文字,下同)具有以下主要特征:
(1)文字位于前端,且不會(huì)被遮擋;
(2)文字一般是單色的;
(3)文字大小在一幅圖片中固定,并且寬度和高度大體相同,從滿足人眼視覺(jué)感受的角度來(lái)說(shuō),圖像中文字的尺寸既不會(huì)過(guò)大也不會(huì)過(guò)??;
(4)文字的分布比較集中;
(5)文字的排列一般為水平方向或垂直方向;
(6)多行文字之間,以及單行內(nèi)各個(gè)字之間存在不同于文字區(qū)域的空隙。在靜態(tài)圖片文字的檢測(cè)與提取過(guò)程中, 一般情況下都是依據(jù)上述特征進(jìn)行處理的。
數(shù)字圖象處理
靜態(tài)圖像文字提取一般分為以下步驟:文字區(qū)域檢測(cè)與定位、文字分割與文字提取、文字后處理。其流程如圖所示。
文字提取、識(shí)別的詳細(xì)步驟
1. 在Matlab中調(diào)用i1=imread(‘字符.jpg’),可得到原始圖像,如圖所示:
?
2. 調(diào)用i2=rgb2gray(i1),則得到了灰度圖像,如圖所示:
?
調(diào)用a=size(i1);b=size(i2);可得到:a=3,b=2 即三維圖像變成了二維灰度圖像
3. 調(diào)用i3=(i2》=thresh);其中thresh為門限,
圖之間這里,?
得到二值圖像,如圖所示:?
4. 把二值圖像放大觀察,可看到離散的黑點(diǎn) 對(duì)其采用腐蝕膨脹處理,得到處理后的圖像,如圖所示
?
可見(jiàn),腐蝕膨脹處理后的圖像質(zhì)量有了很大的改觀。 橫向、縱向分別的腐蝕膨脹運(yùn)算比橫向、縱向同時(shí)的腐蝕膨脹運(yùn)算好上很多,圖6可看出差別:
?
5、對(duì)腐蝕膨脹后的圖像進(jìn)行Y方向上的區(qū)域選定,限定區(qū)域后的圖像如圖所示: 掃描方法:中間往兩邊掃
?
縱向掃描后的圖像與原圖像的對(duì)照,如圖8所示:
?
6、對(duì)腐蝕膨脹后的圖像進(jìn)行X方向上的區(qū)域選定,限定區(qū)域后的圖像如圖9所示: 掃描方法:兩邊往中間掃
?
縱向掃描后的圖像與原圖像的對(duì)照,如圖所示:
?
7. 調(diào)用i8=(iiXY~=1),使背景為黑色(0),字符為白色(1),便于后期處理。 背景交換后的圖像如圖11所示:
8. 調(diào)用自定義函數(shù)(字符獲取函數(shù))i9=getchar(i8),得到圖像如圖所示:
9、調(diào)用自定義的字符獲取函數(shù)對(duì)圖像進(jìn)行字符切割,并把切割的字符裝入一維陣列,切割 過(guò)程如圖12所示:
10.調(diào)用以下代碼,可將陣列word中的字符顯示出來(lái),如圖13所示:
?
? ? ? ? for j=1:cnum %cnum為統(tǒng)計(jì)的字符個(gè)數(shù)
? ? ? ? subplot(5,8,j),imshow(word{j}),title(int2str(j)); %顯示字符?
? ? ? end
?可以看到,字符寬度不一致
?
11. 調(diào)用以下代碼,將字符規(guī)格化,便于識(shí)別: for j=1:cnum word{j}=imresize(word{j},[40 40]); %字符規(guī)格化成40×40的 end 得到規(guī)格化之后的字符如圖14所示:
12. 調(diào)用以下代碼創(chuàng)建字符集:
code=char(‘由于作者水平有限書中難免存在缺點(diǎn)和疏漏之處懇請(qǐng)讀批評(píng)指正,?!?
將創(chuàng)建的字符集保存在一個(gè)文件夾里面,以供匹配時(shí)候調(diào)用,如圖15所示:
?
13. 字符匹配采用模板匹配算法:將現(xiàn)有字符逐個(gè)與模板字符相減,認(rèn)為相減誤差最小的現(xiàn) 有字符與該模板字符匹配。
?
也就是說(shuō),字符A與模板字符T1更相似,我們可以認(rèn)為字符集中的字符T2就是字符A。 經(jīng)模板匹配,可得字符信息如下: 由于讀者書評(píng)有限書中難免存在缺點(diǎn)和紕漏之處,懇請(qǐng)讀者批評(píng)指正。 效果如圖16所示:
?
14、調(diào)用以下代碼,將字符放入newtxt.txt文本:
new=[‘newtxt’,‘.txt’]; c=fopen(new,‘a(chǎn)+’); fprintf(c,‘%s ’,Code(1:cnum)); fclose(c); newtxt.txt文本內(nèi)容如圖17所示:
?
總結(jié)
1、算法具有局限性。對(duì)于左右結(jié)構(gòu)的字符(如:川)容易造成誤識(shí)別,“川”字將會(huì)被識(shí)別成三部分。當(dāng)圖片中文字有一定傾斜角度時(shí),這將造成識(shí)別困難。
2、模板匹配效率低。對(duì)于處理大小為m×m的字符,假設(shè)有n個(gè)模板字符,則識(shí)別一個(gè)字符至
少需要m×m×n×2次運(yùn)算,由于漢字有近萬(wàn)個(gè),這將使得運(yùn)算量十分巨大!此次字符識(shí) 別一共花了2.838秒。
3、伸縮范圍比較小。對(duì)于受污染的圖片,轉(zhuǎn)換成二值圖像將使字符與污染源混合在一起。
對(duì)于具體的圖片,需反復(fù)選擇合適的thresh進(jìn)行二值化處理,甚至在處理之前必須進(jìn)行各種濾波。
評(píng)論