粘連演算法
㈠ OCR文字識別軟體哪個易用可網上下載
OCR文字識別軟體 Mini Ocr
xdowns.com/view_soft/3/7/OCRwenzishibieruanjian Mini Ocr.html
件
本軟體是飛濤軟體工作室開發的一款免費Ocr軟體,主要用於識別圖像文件之中,出現
的漢字顯示字體。Ocr的中文含意是光學字元識別。
為什麼叫Mini呢?因為現有的識別漢字的商業Ocr軟體,動輒二三十兆,而本軟體解
壓後,也不過三兆多,身材比較纖小,再加上本軟體主要用於識別字體比較小的漢字,所
以叫Mini,中文的發音是「迷你」,中文含義是超小型。
既然有了商業Ocr軟體,為什麼還要開發這個軟體?
不同於商業Ocr軟體,本軟體是免費的,可以自由使用。第二個不同之處,本軟體的
識別對象是屏幕出現的「顯示漢字」,而不是針對掃描儀掃出來的「列印漢字」。二者有什
么不同呢?最重要的一點: 掃描出來的列印漢字的高度和寬度一般都在30多個像素點之
上,這是我用畫圖軟體,打開某個商業Ocr的samples\sample1.tif,然後一點一點數出
來的。從文件名和目錄名的中文含意可以看出,這個點數應該是一個典型值。那麼,如果
用商業Ocr識別屏幕上出現的小五號字,漢字的高度是12個像素點,會出現什麼情況呢?
測試方法:用記事本隨便寫幾行漢字,設置字體為小五號字。這大概是看著還算舒服
的最小號的漢字字體了(高度是12個像素點),如果再小,字體就很難看了。然後,按拷
屏鍵PrtSc,把屏幕的圖像拷貝、粘貼到畫圖軟體中,修剪尺寸後,保存為bmp的格式。
然後,我找了兩個國內最著名的Ocr軟體進行測試,結果讓人大吃一驚,識別率幾乎為零。
把圖像放大兩倍,再測試,結果仍然很不理想,大概也只有百分之二三十的樣子。
開發Mini Ocr軟體的由來
我在開發護花使者反黃圖像識別軟體的時候,遇到有些圖像里,嵌有某些文字,如果能
把文字識別出來,圖像的含義就很容易讓計算機理解了。預算有限,我連掃描儀都捨不得
買,就更別想買商業Ocr的開發包了,大概幾十萬,或者更多,或者別人壓根就不賣。況且
它們的識別率對小字體幾乎為零,不符合我的要求。看來,只好自力更生,重新寫一個了。
開發Mini Ocr的歷程
經過三個多月的努力,終於誕生了這款Mini Ocr 軟體。第1個月做出了漢字識別的
核心模塊,第2個月做出了文章段落切分的演算法,並加入了對英文,數字,標點的支持,
第三個月繼續調整英漢混排和漢字切分的演算法,並用MFC 做了一個界面。
Mini Ocr的軟體架構
為了讓更多的人能使用到這個軟體,我在windows系統下,採用VC進行編程,界面當
然只好用MFC寫了。軟體架構是一個SDI框架下的多窗口切分界面,左上角的窗口是一個
CFormView,用來顯示常用的按鈕;左下角是一個CEditView,用來顯示幫助信息;右上角
是一個CView,用來顯示要識別的圖像;右下角是一個CEditView,用來存放識別出來的文
字。識別部分採用了工作者線程,以避免顯示界面的主線程僵掉。識別部分是整個軟體的
核心,與操作系統無關,可以單獨摘出來放在dos窗口裡跑,也可以移植到Linux系統中跑。
漢字識別軟體的難點所在:
英文識別有一些開放源碼的軟體,我看過的軟體,主要採取兩種識別方法:基於規則
的方法,和採用神經網路方法。而這兩種方法,在識別漢字時,都不宜採用。因為漢字數
目眾多,最常用的國標2312的一級漢字就有3755個。如果借用基於規則的方法,需要對
三千多個漢字,逐一人工寫出分類規則,工作量太大,我一個人無法完成;如果採用神經
網路的方法,這么多漢字,我不敢想像,需要多少層網路和神經節點呀!如果採用網格法,
抗位移的效果太差;而採用不變矩法,識別人和入,土和士,相似度又難於控制。除此之
外,漢字切分也是一大難題。英文寬度大概只有漢字一半,標點符號大概只有漢字三分之
一寬,數字大概只有四分之一的寬度。而漢字本身又有二分字,和三分字。某些字,如「啊」,
字體小時可能是獨體字,字體大些,變為二分字,字體再大,又變為三分字。加上漢字與
漢字之間的粘連、漢字與英文的混排,英文與英文的粘連,造成漢字切分模塊的演算法,甚
至比漢字識別模塊的演算法還要復雜得多。為了克服這些難點,並加快識別速度,我在演算法
設計時,採用了一些優化和簡化的策略。經過實踐檢驗,證明行之有效。
Mini Ocr進行漢字識別的策略:
1) 採用復合特徵的分類方法。
2) 字元集選擇3755個一級漢字。
3) 字體選擇最常用的宋體。
4) 字型大小選擇從小五號到一號漢字,主要針對20個點之內的小字體。
5) 英漢混排時,漢語優先。
6) 漢字粘連時,進行動態優化切分。
展望與下一步的開發計劃:
1) 重新優化英文識別的演算法;
2) 對英文粘連的切分演算法進行調整;
3) 移植進入Linux;
選擇Ocr軟體的建議:
如果您選擇Ocr軟體,目的是用來識別掃描儀出來列印字體,推薦還是選用知名的商業Ocr。
如果您要識別屏幕上顯示的漢字,Mini Ocr是一個比較不錯的選擇。真誠地希望您在使用
中,能喜歡上它
㈡ 闡述提高場景文字檢測演算法性能的難點
1、圖像輸入、預處理:
圖像輸入:對於不同的圖像格式,有著不同的存儲格式,不同的壓縮方式。預處理:主要包括二值化,雜訊去除,傾斜較正等
2、二值化:
對攝像頭拍攝的圖片,大多數是彩色圖像,彩色圖像所含信息量巨大,對於圖片的內容,我們可以簡單的分為前景與背景,為了讓計算機更快的,更好的識別文字,我們需要先對彩色圖進行處理,使圖片只前景信息與背景信息,可以簡單的定義前景信息為黑色,背景信息為白色,這就是二值化圖了。
3、雜訊去除:
對於不同的文檔,我們對燥聲的定義可以不同,根據燥聲的特徵進行去燥,就叫做雜訊去除
4、傾斜較正:
由於一般用戶,在拍照文檔時,都比較隨意,因此拍照出來的圖片不可避免的產生傾斜,這就需要文字識別軟體進行較正。
版面分析:5、將文檔圖片分段落,分行的過程就叫做版面分析,由於實際文檔的多樣性,復雜性,因此,目前還沒有一個固定的,最優的切割模型。
6、字元切割:
由於拍照條件的限制,經常造成字元粘連,斷筆,因此極大限制了識別系統的性能,這就需要文字識別軟體有字元切割功能。
7、字元識別:
這一研究,已經是很早的事情了,比較早有模板匹配,後來以特徵提取為主,由於文字的位移,筆畫的粗細,斷筆,粘連,旋轉等因素的影響,極大影響特徵的提取的難度。
8、版面恢復:
人們希望識別後的文字,仍然像原文檔圖片那樣排列著,段落不變,位置不變,順序不變,的輸出到word文檔,pdf文檔等,這一過程就叫做版面恢復。
9、後處理、校對:
根據特定的語言上下文的關系,對識別結果進行較正,就是後處理。
開發一個OCR文字識別軟體[2]系統,其目的很簡單,只是要把影像作一個轉換,使影像內的圖形繼續保存、有表格則表格內資料及影像內的文字,一律變成計算機文字,使能達到影像資料的儲存量減少、識別出的文字可再使用及分析,當然也可節省因鍵盤輸入的人力與時間。從影像到結果輸出,須經過影像輸入、影像前處理、文字特徵抽取、比對識別、最後經人工校正將認錯的文字更正,將結果輸出。
㈢ 怎麼進行人民幣冠字碼識別
人民幣紙幣上除了漢字、少數民族文字、漢語拼音及第四套人民幣主幣上增加的盲文外,還有用以控制各種票券印製數量和防偽作用的冠號和號碼。冠,取首之意,冠字也稱「字頭」,即印在票券號碼前的符號,用以表示各種票券和印製數量的批號。
中國人民銀行發行的五套人民幣紙幣,前三套均使用兩個或三個不同的羅馬數字(Ⅰ、Ⅱ、Ⅲ、Ⅳ等)作冠字,第四套人民幣改成兩個相同或不同的漢語拼音字母作冠字,而「慶祝中華人民共和國成立50周年」流通紀念鈔只用一個漢語拼音字母作冠字。
號碼也是表示票券印製數量的編號,是每一冠字批號中的具體編號,一般採用阿拉伯數字排列號碼,一票一號,在同一冠字批號中的號碼一般不會出現重復。從鈔票的號碼位數可以看出該組冠字所印票券的多寡,即位數越多,印製數量越大,反之印製數量越少。
(3)粘連演算法擴展閱讀:
冠字型大小碼新排列方式
2010年年初,央行調整了人民幣紙幣的冠字型大小碼排列方式,如市場所見「A0A0000001」方式。隨著現金發行量的增加,人民幣紙幣冠字型大小碼排列方式仍會不斷調整變化(如「A00A000001」和「A000A00001」等排列方式。
市面上較為廣泛使用的第五套人民幣100元紙幣的冠字型大小碼為十位,前兩位是大寫的拼音字母組合,後八位則為阿拉伯數字,其中冠字型大小碼前四位為紅色,後六位為黑色。
央行有關人士證實,如今兩個拼音字母相互排列的冠號組合已經全部使用完,因此有一部分人民幣百元鈔冠號部分變更為拼音字母 數字拼音字母的形式,就如市面上已經出現的「A0A0000001」。而且,今後隨著現金發行量的增加,冠字型大小碼的排列方式還將進行調整。
㈣ imreconstruct 這個matlab的函數有人懂的嗎
imreconstruct()函數的功能是對圖形形態修飾。
imreconstruct()書寫主要格式為
IM = imreconstruct(MARKER,MASK)
MARKER——標記,標記和掩碼可以是兩個灰度圖像或兩個二進制圖像具有相同的大小。標記必須是相同的大小。
MASK——面膜,作為面膜,其元素必須小於或等於面具的相應元素。
應用實例代碼:
I = imread('snowflakes.png'); 讀寫圖形文件,snowflakes.png
mask = adapthisteq(I); 對比度自適應直方圖均衡化(CLAHE)
se = strel('disk',5); 形態學結構元素
marker = imerode(mask,se); 圖像灰度化
obr = imreconstruct(marker,mask);
figure, imshow(mask,[]), 修飾前的圖形(圖1)
figure, imshow(obr,[]) 修飾後的圖形(圖2)