MATLAB印刷体汉字识别
MATLAB印刷體漢字識別
一、課題研究的意義
漢字已有數千年的歷史,是中華民族文化的重要結晶,閃爍著中國人民智慧的光芒。同時也是世界上使用人數最多和數量最多的文字之一。現如今,漢字印刷材料的數量大大增加,一些專業單位所接觸的印刷材料更是浩如煙海,信息量均是爆炸性增長。然而,漢字是非字母化、非拼音化的文字,因此,如何將漢字快速高效地輸入計算機,是信息處理的一個關鍵問題,也是關系到計算機技術能否在我國真正普及的關鍵問題,更是傳播與弘揚中華民族悠久歷史文化的關鍵問題。而且隨著勞動力價格的升高,利用人工方法進行漢字輸入也將面臨經濟效益的挑戰。因此,對于大量已有的文檔資料,漢字自動識別輸入就成為了最佳的選擇。因此,漢字識別技術也越來越受到人們的重視。漢字識別是一門多學科綜合的研究課題,它不僅與人工智能的研究有關,而且與數字信號處理、圖像處理、信息論、計算機科學、幾何學、統計學、語言學、生物學、模糊數學、決策論等都有著千絲萬縷的聯系。一方面各學科的發展給它的研究提供了工具;另一方面,它的研究與發展也必將促進各學科的發展。因而有著重要的實用價值和理論意義。
二、算法流程
圖1-1漢字識別流程框圖
三、識別過程
圖2-3 標準圖像
圖2-4 標準圖像轉灰度圖像
圖2-5 標準圖像均值濾波圖像
圖2-6 標準圖像二值化圖像
圖2-7 標準圖像識別結果
通過對標準圖像識別學習訓練,然后對輸入亂序圖像(見圖2-8)進行識別,過程中轉灰度(見圖2-9),均值濾波(見圖2-10),二值化(見圖2-11),識別結果(見圖2-12)。
圖2-8 亂序圖像
圖2-9 亂序圖像轉灰度圖像
圖2-10 亂序圖像均值濾波圖像
圖2-11 亂序圖像二值化圖像
圖2-12 亂序圖像識別結果
由以上實驗結果可以看出,當輸入標準圖像,經過轉灰度,均值濾波,二值化,識別輸出。然后,輸入亂序圖像在經過轉灰度,均值濾波,二值化,特征提取,匹配識別后,系統能夠將亂序圖像中的圖像識別輸出。說明系統基本實現預先設想的功能,能夠在學習標準圖像識別后建立標準庫,并根據標準字庫與以后輸入的圖像進行匹配識別輸出。但由于系統比較簡單,實現的功能也比較單一,要想實現較完備功能還需進一步完善。
四、源碼
%亂序圖像識別:
load bp;
G=imread('');%讀取
I=rgb2gray(G);
%--------轉灰度圖象
B1=filter2(fspecial('average',3),I)/255;
%以[3,3]為模板均值濾波
%--------均值濾波
d=im2bw(B1,;
%--------二值
k1=1;k2=1;s=sum(d');j=2;a=1;c=1
[m, n]=size(d');
while s(j)==m
j=j+1;
end
k1=j;
while s(j)~=m && j<=n-1
j=j+1;
end
k2=j-1;
d=d((k1:k2),:);
%--------行分割
[m,n]=size(d);
k1=1;k2=1;s=sum(d);j=2;a=1;c=1
for a=1:16
while s(j)==m
j=j+1;
end
k1=j;
while s(j)~=m && j<=n-1
j=j+1;
end
k2=j-1;
%--------列分割
if c==1
b1=d(:,(k1:k2));
imwrite(b1,'');
t1=tezhengtiqu(b1);
P_test = [t1'];
y = sim(net,P_test);
%用訓練出來的神經網絡計算數據的第%P_test行
word=jieguoxianshi(y)
end
%--------第1個字符
if c==2
b2=d(:,(k1:k2));
imwrite(b2,'');
t2=tezhengtiqu(b2);
%用十三點特征提取法提取特征
P_test = [t2];
y = sim(net,P_test');
%用訓練出來的神經網絡計算數據的
%第P_test行
word=jieguoxianshi(y)
end
%--------第2個字符
if c==3
b3=d(:,(k1:k2));
imwrite(b3,'');
t3=tezhengtiqu(b3);
P_test = [t3];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第3個字符
if c==4
b4=d(:,(k1:k2));
imwrite(b4,'');
t4=tezhengtiqu(b4);
P_test = [t4];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第4個字符
if c==5
b5=d(:,(k1:k2));
imwrite(b5,'');
t5=tezhengtiqu(b5);
P_test = [t5];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第5個字符
if c==6
b6=d(:,(k1:k2));
imwrite(b6,'');
t6=tezhengtiqu(b6);
P_test = [t6];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第6個字符
if c==7
b7=d(:,(k1:k2));
imwrite(b7,'');
t7=tezhengtiqu(b7);
P_test = [t7];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第7個字符
if c==8
b8=d(:,(k1:k2));
imwrite(b8,'');
t8=tezhengtiqu(b8);
P_test = [t8];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第8個字符
if c==9
b9=d(:,(k1:k2));
imwrite(b9,'');
t9=tezhengtiqu(b9);
P_test = [t9];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第9個字符
if c==10
b10=d(:,(k1:k2));
imwrite(b10,'');
t10=tezhengtiqu(b10);
P_test = [t10];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第10個字符
if c==11
b11=d(:,(k1:k2));
imwrite(b11,'');
t11=tezhengtiqu(b11);
P_test = [t11];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第11個字符
if c==12
b12=d(:,(k1:k2));
imwrite(b12,'');
t12=tezhengtiqu(b12);
P_test = [t12];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第12個字符
if c==13
b13=d(:,(k1:k2));
imwrite(b13,'');
t13=tezhengtiqu(b13);
P_test = [t13];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第13個字符
if c==14
b14=d(:,(k1:k2));
imwrite(b14,'');
t14=tezhengtiqu(b14);
P_test = [t14];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第14個字符
if c==15
b15=d(:,(k1:k2));
imwrite(b15,'');
t15=tezhengtiqu(b15);
P_test = [t15];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第15個字符
if c==16
b16=d(:,(k1:k2));
imwrite(b16,'');
t16=tezhengtiqu(b16);
P_test = [t16];
y = sim(net,P_test');
word=jieguoxianshi(y)
end
%--------第16個字符
c=c+1;
end
subplot(2,8,1),imshow('');
subplot(2,8,2),imshow('');
subplot(2,8,3),imshow('');
subplot(2,8,4),imshow('');
subplot(2,8,5),imshow('');
subplot(2,8,6),imshow('');
subplot(2,8,7),imshow('');
subplot(2,8,8),imshow('');
subplot(2,8,9),imshow('');
subplot(2,8,10),imshow('');
subplot(2,8,11),imshow('');
subplot(2,8,12),imshow('');
subplot(2,8,13),imshow('');
subplot(2,8,14),imshow('');
subplot(2,8,15),imshow('');
subplot(2,8,16),imshow('');
%標準圖像識別:
load fbp;
G=imread('');%讀取
I=rgb2gray(G);
%--------轉灰度圖象
B1=filter2(fspecial('average',3),I)/255;
%--------均值濾波
imshow(d);
k1=1;k2=1;s=sum(d');j=2;a=1;c=1
[m,n]=size(d');
while s(j)==m
j=j+1;
end
k1=j;
while s(j)~=m && j<=n-1
j=j+1;
end
k2=j-1;
d=d((k1:k2),:);
%--------行分割
[m,n]=size(d);
k1=1;k2=1;s=sum(d);j=2;a=1;c=1
for a=1:16
while s(j)==m
j=j+1;
end
k1=j;
while s(j)~=m && j<=n-1
j=j+1;
end
k2=j-1;
%--------列分割
if c==1
b1=d(:,(k1:k2));
imwrite(b1,'');
t1=tezhengtiqu(b1);
P_test = [t1'];
y = sim(net,P_test);
word=fbmjieguoxianshi(y)
end
%--------第1個字符
if c==2
b2=d(:,(k1:k2));
imwrite(b2,'');
t2=tezhengtiqu(b2);
P_test = [t2];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第2個字符
if c==3
b3=d(:,(k1:k2));
imwrite(b3,'');
t3=tezhengtiqu(b3);
P_test = [t3];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第3個字符
if c==4
b4=d(:,(k1:k2));
imwrite(b4,'');
t4=tezhengtiqu(b4);
P_test = [t4];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第4個字符
if c==5
b5=d(:,(k1:k2));
imwrite(b5,'');
t5=tezhengtiqu(b5);
P_test = [t5];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第5個字符
if c==6
b6=d(:,(k1:k2));
imwrite(b6,'');
t6=tezhengtiqu(b6);
P_test = [t6];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第6個字符
if c==7
b7=d(:,(k1:k2));
imwrite(b7,'');
t7=tezhengtiqu(b7);
P_test = [t7];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第7個字符
if c==8
b8=d(:,(k1:k2));
imwrite(b8,'');
t8=tezhengtiqu(b8);
P_test = [t8];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第8個字符
if c==9
b9=d(:,(k1:k2));
imwrite(b9,'');
t9=tezhengtiqu(b9);
P_test = [t9];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第9個字符
if c==10
b10=d(:,(k1:k2));
imwrite(b10,'');
t10=tezhengtiqu(b10);
P_test = [t10];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第10個字符
if c==11
b11=d(:,(k1:k2));
imwrite(b11,'');
t11=tezhengtiqu(b11);
P_test = [t11];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第11個字符
if c==12
b12=d(:,(k1:k2));
imwrite(b12,'');
t12=tezhengtiqu(b12);
P_test = [t12];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第12個字符
if c==13
b13=d(:,(k1:k2));
imwrite(b13,'');
t13=tezhengtiqu(b13);
P_test = [t13];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第13個字符
if c==14
b14=d(:,(k1:k2));
imwrite(b14,'');
t14=tezhengtiqu(b14);
P_test = [t14];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第14個字符
if c==15
b15=d(:,(k1:k2));
imwrite(b15,'');
t15=tezhengtiqu(b15);
P_test = [t15];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第15個字符
if c==16
b16=d(:,(k1:k2));
imwrite(b16,'');
t16=tezhengtiqu(b16);
P_test = [t16];
y = sim(net,P_test');
word=fbmjieguoxianshi(y)
end
%--------第16個字符
c=c+1;
end
subplot(2,8,1),imshow('');
subplot(2,8,2),imshow('');
subplot(2,8,3),imshow('');
subplot(2,8,4),imshow('');
subplot(2,8,5),imshow('');
subplot(2,8,6),imshow('');
subplot(2,8,7),imshow('');
subplot(2,8,8),imshow('');
subplot(2,8,9),imshow('');
subplot(2,8,10),imshow('');
subplot(2,8,11),imshow('');
subplot(2,8,12),imshow('');
subplot(2,8,13),imshow('');
subplot(2,8,14),imshow('');
subplot(2,8,15),imshow('');
subplot(2,8,16),imshow('');
%標準圖像識別結果顯示:
function word=jieguoxianshi(y)
%顯示結果的函數
y=[round(y(1)),round(y(2)),round(y(3)),
round(y(4)),round(y(5)),round(y(6)),
round(y(7)),round(y(8)),round(y(9)),
round(y(10)),round(y(11)),round(y(12)),
round(y(13)),round(y(14)),round(y(15)),
round(y(16))];
[C,I]=max(y);
if I==16
word='匣';
elseif I==15
word='囡';
elseif I==14
word='圖';
elseif I==13
word='國';
elseif I==12
word='盅';
elseif I==11
word='匡';
elseif I==10
word='盞';
elseif I==9
word='固';
elseif I==8
word='監';
elseif I==7
word='盂';
elseif I==6
word='盒';
elseif I==5
word='團';
elseif I==4
word='盈';
elseif I==3
word='団';
elseif I==2
word='盔';
elseif I==1
word='因';
end
%亂序圖像識別結果顯示
function word=jieguoxianshi(y)
%顯示結果的函數
y=[round(y(1)),round(y(2)),round(y(3)),
round(y(4))];
if y==[0,0,0,0]
word='匣';
elseif y==[0,0,0,1,]
word='囡';
elseif y==[0,0,1,0]
word='圖';
elseif y==[0,0,1,1]
word='國';
elseif y==[0,1,0,0]
word='盅';
elseif y==[0,1,0,1]
word='匡';
elseif y==[0,1,1,0]
word='盞';
elseif y==[0,1,1,1]
word='固';
elseif y==[1,0,0,0]
word='監';
elseif y==[1,0,0,1]
word='盂';
elseif y==[1,0,1,0]
word='盒';
elseif y==[1,0,1,1]
word='團';
elseif y==[1,1,0,0]
word='盈';
elseif y==[1,1,0,1]
word='団';
elseif y==[1,1,1,0]
word='盔';
elseif y==[1,1,1,1]
word='因';
end
%特征提取:
function PN=moshishibie(d)
%特征提取函數
%通過13點特征提取法提取特征
%d為已處理圖象
[m,n]=size(d);
k1=1;
for i=1:m/4
for j=1:n/2
if d(i,j)==1
k1=k1+1;
end
end
end
k2=1;
for i=1:round(m/4)
for j=round(n/2):round(n)
if d(i,j)==1
k2=k2+1;
end
end
end
k3=1;
for i=round(m/4):m/2
for j=1:n/2
if d(i,j)==1
k3=k3+1;
end
end
end
k4=1;
for i=round(m/4):m/2
for j=round(n/2):n
if d(i,j)==1
k4=k4+1;
end
end
end
k5=1;
for i=round(m/2):round(m*3/4)
for j=1:round(n/2)
if d(i,j)==1
k5=k5+1;
end
end
end
k6=1;
for i=round(m/2):round(m*3/4)
for j=round(n/2):n
if d(i,j)==1
k6=k6+1;
end
end
end
k7=1;
for i=round(m*3/4):m
for j=1:round(n/2)
if d(i,j)==1
k7=k7+1;
end
end
end
k8=1;
for i=round(m*3/4):m
for j=round(n/2):n
if d(i,j)==1
k8=k8+1;
end
end
end
k9=k3+k4;
k10=k5+k6;
k11=k1+k3+k5+k7;
k12=k2+k4+k6+k8;
k13=k11+k12;
k=[k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,13];
[PN,minp,maxp] = premnmx(k); %歸一化
附 錄2
Neural Network object: %神經網絡的對象;
architecture: %結構;
numInputs: 1
numLayers: 3
biasConnect: [1; 1; 1]
inputConnect: [1; 0; 0]
layerConnect: [0 0 0; 1 0 0; 0 1 0]
outputConnect: [0 0 1]
targetConnect: [0 0 1]
numOutputs: 1 (read-only)
numTargets: 1 (read-only)
numInputDelays: 0 (read-only)
numLayerDelays: 0 (read-only)
subobject structures: %子對象結構
inputs: {1x1 cell} of inputs
layers: {3x1 cell} of layers
outputs: {1x3 cell} containing 1 output
targets: {1x3 cell} containing 1 target
biases: {3x1 cell} containing 3 biases
inputWeights: {3x1 cell} containing 1 input weight
layerWeights: {3x3 cell} containing 2 layer weights
functions: %功能
adaptFcn: 'trains'
initFcn: 'initlay'
performFcn: 'mse'
trainFcn: 'trainlm'
parameters: %參數
adaptParam: .passes
initParam: (none)
performParam: (none)
trainParam: .epochs, .goal, .max_fail, .mem_reduc,
.min_grad, .mu, .mu_dec, .mu_inc,
.mu_max, .show, .time
weight and bias values: %權重和偏置值
IW: {3x1 cell} containing 1 input weight matrix
LW: {3x3 cell} containing 2 layer weight matrices
b: {3x1 cell} containing 3 bias vectors
other: %其他
userdata: (user stuff)
總結
以上是生活随笔為你收集整理的MATLAB印刷体汉字识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTTP URL长度限制
- 下一篇: 2048的核心算法的初步实现