Stroke filter: 一種用於OCR預處理的文字濾波器


  近幾個月我在一家公司的研發部做模式識別實習生,學習了很多OCR相關的知識和技術,在此謝謝陸老師,孫老師以及其它各位老師的指導,我很喜歡這里,你們讓我收獲了很多

  OCR(Optical Character Recognition)光學字符識別是一種獲取圖像中的字符信息的處理技術,用通俗一點的話說,就是把帶有文字信息的圖像數據變成文本數據的一種技術。在我們的生活中很多地方都有它的身影,如高速路上的電子眼(車牌識別),有道詞典(圖像單詞識別)等等。

  OCR的識別過程大致有以下幾個步驟:字符檢測,去噪,傾斜校正,版面分析,文字切割,字符識別,修正,后處理等。Stroke filter 正是一種用於OCR預處理去噪的濾波器,它能夠濾除圖像中那些文字特征不明顯的部分,而保留那些文字較明顯的部分。它是字符檢測和背景去噪的一種常用方法。

  

  Stroke filter的定義很簡單:

  首先定義stroke響應,對於一個給定的角度alpha和距離參數d(上圖), 一個像素點的響應response(此處用小r表示)為:

 

  其中u1,u2,u3表示1號2號3號矩形內的像素和, 分母是正比於1號矩形內像素方差分布的一個參數,B表示bright,即白底黑字的情況。從直觀上來看,如果當前像素點(x,y)為筆划像素點時,1號矩形的像素和與2號3號矩形的像素和之差會比較大,2號和3號矩形像素和之差會較小,因此response會在筆划像素點的位置達到極大值。但是這個值會因為當前筆划的方向和字體大小有所不同,這時就需要調整alpha和d來尋找這個最大值。

  下面的任務就是要找出這個最大值了,如下圖第一行所示(后兩行不用看,是為了后續svm分類用的,具體內容可以看這篇paper),一個像素點的Response(此處用大R表示)值為:在所有的alpha,d的可能取值所對應的response的集合中,最大的一個r值,即為該像素點的R。可以想像,這種濾波器很符合文字的紋理特點,文字都是由條狀的筆划組成,一張圖片如果含有文字,則文字筆划處的Response會比較大,其它地方的Response會較小,利用這一特點就可以把文字濾出來了。

  以下是部分實驗結果:

首先是輸入圖像:

 

 

Response:

 

二值化:

 

注意到文章中的參數比較死板,效果不是太好,在我的實驗中,一組較合理的參數如下圖所示

d=1,2,3,4, alpha interval = 45度,其中stroke的長度不要超過兩倍的d,不然文字邊界的response會出現振鈴效應

 

速度方面,上面的測試圖長寬為722 * 535 pixels ,在我的i5小黑上跑,大概1300ms, 環境是windows,x64,opencv, c++。影響速度最重要的參數是alpha的選取,每隔45度計算一個response和每隔10度計算一個response在精度上不會有太大差別,同樣地,如果alpha interval設為90也不會損失太多的精度,而速度卻可以降到600ms。如果想要做實時視頻處理的話,最好先把字幕所在矩形提取出來,然后在處理,這樣的話速度可以保證在50ms以內。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM