Stroke filter: 一种用于OCR预处理的文字滤波器
from:Stroke filter: 一種用于OCR預(yù)處理的文字濾波器
近幾個(gè)月我在一家公司的研發(fā)部做模式識(shí)別實(shí)習(xí)生,學(xué)習(xí)了很多OCR相關(guān)的知識(shí)和技術(shù),在此謝謝陸老師,孫老師以及其它各位老師的指導(dǎo),我很喜歡這里,你們讓我收獲了很多
OCR(Optical?Character?Recognition)光學(xué)字符識(shí)別是一種獲取圖像中的字符信息的處理技術(shù),用通俗一點(diǎn)的話說,就是把帶有文字信息的圖像數(shù)據(jù)變成文本數(shù)據(jù)的一種技術(shù)。在我們的生活中很多地方都有它的身影,如高速路上的電子眼(車牌識(shí)別),有道詞典(圖像單詞識(shí)別)等等。
OCR的識(shí)別過程大致有以下幾個(gè)步驟:字符檢測,去噪,傾斜校正,版面分析,文字切割,字符識(shí)別,修正,后處理等。Stroke?filter?正是一種用于OCR預(yù)處理去噪的濾波器,它能夠?yàn)V除圖像中那些文字特征不明顯的部分,而保留那些文字較明顯的部分。它是字符檢測和背景去噪的一種常用方法。
Stroke?filter的定義很簡單:
首先定義stroke響應(yīng),對于一個(gè)給定的角度alpha和距離參數(shù)d(上圖), 一個(gè)像素點(diǎn)的響應(yīng)response(此處用小r表示)為:
?
其中u1,u2,u3表示1號2號3號矩形內(nèi)的像素和, 分母是正比于1號矩形內(nèi)像素方差分布的一個(gè)參數(shù),B表示bright,即白底黑字的情況。從直觀上來看,如果當(dāng)前像素點(diǎn)(x,y)為筆劃像素點(diǎn)時(shí),1號矩形的像素和與2號3號矩形的像素和之差會(huì)比較大,2號和3號矩形像素和之差會(huì)較小,因此response會(huì)在筆劃像素點(diǎn)的位置達(dá)到極大值。但是這個(gè)值會(huì)因?yàn)楫?dāng)前筆劃的方向和字體大小有所不同,這時(shí)就需要調(diào)整alpha和d來尋找這個(gè)最大值。
下面的任務(wù)就是要找出這個(gè)最大值了,如下圖第一行所示(后兩行不用看,是為了后續(xù)svm分類用的,具體內(nèi)容可以看這篇paper),一個(gè)像素點(diǎn)的Response(此處用大R表示)值為:在所有的alpha,d的可能取值所對應(yīng)的response的集合中,最大的一個(gè)r值,即為該像素點(diǎn)的R。可以想像,這種濾波器很符合文字的紋理特點(diǎn),文字都是由條狀的筆劃組成,一張圖片如果含有文字,則文字筆劃處的Response會(huì)比較大,其它地方的Response會(huì)較小,利用這一特點(diǎn)就可以把文字濾出來了。
以下是部分實(shí)驗(yàn)結(jié)果:
首先是輸入圖像:
?
?
Response:
?
二值化:
?
注意到文章中的參數(shù)比較死板,效果不是太好,在我的實(shí)驗(yàn)中,一組較合理的參數(shù)如下圖所示
d=1,2,3,4, alpha interval = 45度,其中stroke的長度不要超過兩倍的d,不然文字邊界的response會(huì)出現(xiàn)振鈴效應(yīng)
?
速度方面,上面的測試圖長寬為722 * 535 pixels?,在我的i5小黑上跑,大概1300ms, 環(huán)境是windows,x64,opencv, c++。影響速度最重要的參數(shù)是alpha的選取,每隔45度計(jì)算一個(gè)response和每隔10度計(jì)算一個(gè)response在精度上不會(huì)有太大差別,同樣地,如果alpha interval設(shè)為90也不會(huì)損失太多的精度,而速度卻可以降到600ms。如果想要做實(shí)時(shí)視頻處理的話,最好先把字幕所在矩形提取出來,然后在處理,這樣的話速度可以保證在50ms以內(nèi)。
總結(jié)
以上是生活随笔為你收集整理的Stroke filter: 一种用于OCR预处理的文字滤波器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Meanshift图像平滑之opencv
- 下一篇: Linux下的静态库、动态库和动态加载库