天天看點

【印刷字元識别】基于matlab OCR印刷字母+數字識别【含Matlab源碼 1861期】

一、OCR簡介

OCR技術是光學字元識别的縮寫, 是通過掃描等光學輸入方式将各種票據、報刊、書籍、文稿及其它印刷品的文字轉化為圖像資訊, 再利用文字識别技術将圖像資訊轉化為可以使用的計算機輸入技術。由于其應用前景廣泛, 在應用領域有着重要的意義。

1 預處理部分

本部分可進一步細分為要素定位、二值化、切割、文字歸整幾個部分。由清分機或者高速掃描器掃入的原始票據經過本部分的處理, 其識别要素如金額、日期按照單個漢字分别被存儲為漢字點陣, 其中手寫體大寫漢字、印刷體大寫漢字以及印刷體小寫數字, 被存儲為6464的點陣, 而手寫的小寫數字被存儲為9680的點陣, 然後對此漢字點陣進行字元識别處理。由于某些種類的票據中, 即便為同一張票據, 其各要素的背景噪聲都不相同, 是以對各不同要素區域采用了不同的二值化方法。在切割完成之後, 各要素已經成為單獨的字元點陣, 文字歸整則是針對單個字元點陣進行。票據上的金額、日期、帳号等都分别要經過上面的流程處理。

2 文字識别部分

按照識别系統所要識别的字元種類來分, 本系統需識别的文字有:印刷體漢字、印刷體數字、手寫體漢字、手寫體數字。按照識别要素, 系統包含日期識别、金額識别、帳号識别、磁碼識别幾個不同子產品。

本系統對漢字識别采用了模闆比對方法, 對數字識别采用了人工神經網絡方法。

模闆比對的基本原理是抽取未知文字的特征與事先存儲好的标準的文字特征進行比對, 在一定的距離或相似度測度下, 找出與未知文字的特征比對得最好的标準特征, 将該标準特征所代表的文字作為未知文字的識别結果。

3 特征訓練

訓練是識别的基礎, 标準特征的好壞直接影響到識别結果, 選取具有代表性的樣本作為訓練樣本。訓練前先将樣本按一定的順序存放起來, 訓練樣本也是64*64的點陣。與識别部分的特征抽取相對應, 訓練部分的特征抽取也是在對文字圖像進行規整和分割基礎之上進行的。抽取的标準特征是每個漢字不同的樣本的特征值的平均值, 還抽取了每個漢字的标準方差, 方差記錄了每個字的離散度。标準特征和标準方差在識别過程中都有很重要的作用。

4 印刷體數字和英文字母識别算法開發

首先, 改進漢字識别算法, 必須充分考慮即将要開發的識别算法所要面對的識别對象與原有算法所面對的識别對象之間的差別。原算法是面對變形較大、筆劃比較稠密的手寫漢字, 而所開發的算法面對的是字形比較固定、筆劃比較稀疏的小寫數字, 相對來講, 識别對象簡單了很多。而且識别字元集也小了不少, 由原來的3755個漢字變為簡單的十個數字, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 不過其中相似字仍然存在, 如5和6, 3和8; 其次是識别要求上的變化, 識别率由原來的手寫漢字的識别率要求基本達到100%。

二、部分源代碼

% Clear all
clc, close all, clear all
% 讀取圖檔
imagen=imread('test_1.jpg');
% 顯示圖檔
imshow(imagen);
title('輸入帶噪聲的圖像')
%轉換為灰階
if size(imagen,3)==3 %RGB圖檔
    imagen=rgb2gray(imagen);
end
%轉換為 BW
threshold = graythresh(imagen);
imagen =~im2bw(imagen,threshold);
% 移除所有小于 30 像素的對象
imagen = bwareaopen(imagen,30);
%圖像中的存儲矩陣字
word=[ ];
re=imagen;
%打開 text.txt 作為寫入檔案
fid = fopen('text.txt', 'wt');
%加載模闆
load templates
global templates
% 計算模闆檔案中的字母數
num_letras=size(templates,2);
while 1
    %Fcn 'lines' separate lines in text
    [fl re]=lines(re);
    imgn=fl;
   
    % 标記和計數連接配接的元件
    [L Ne] = bwlabel(imgn);    
    for n=1:Ne
        [r,c] = find(L==n);
        %提取字母
        n1=imgn(min(r):max(r),min(c):max(c));  
        %調整字母大小(模闆大小相同)
        img_r=imresize(n1,[42 24]);
        %Uncomment line below to see letters one by one
         %imshow(img_r);pause(0.5)
        %-------------------------------------------------------------------
        % Call fcn to convert image to text
        letter=read_letter(img_r,num_letras);
        %字母連接配接
        word=[word letter];
    end      

三、運作結果

【印刷字元識别】基于matlab OCR印刷字母+數字識别【含Matlab源碼 1861期】

四、matlab版本及參考文獻

繼續閱讀