基于MATLAB印刷体汉字识别解析

一、课题研究的意义

汉字已有数千年的历史,是中华民族文化的重要结晶,闪烁着中国人民智慧的光芒。同时也是世界上使用人数最多和数量最多的文字之一。现如今,汉字印刷材料的数量大大增加,一些专业单位所接触的印刷材料更是浩如烟海,信息量均是爆炸性增长。然而,汉字是非字母化、非拼音化的文字,因此,如何将汉字快速高效地输入计算机,是信息处理的一个关键问题,也是关系到计算机技术能否在我国真正普及的关键问题,更是传播与弘扬中华民族悠久历史文化的关键问题。而且随着劳动力价格的升高,利用人工方法进行汉字输入也将面临经济效益的挑战。因此,对于大量已有的文档资料,汉字自动识别输入就成为了最佳的选择。因此,汉字识别技术也越来越受到人们的重视。汉字识别是一门多学科综合的研究课题,它不仅与人工智能的研究有关,而且与数字信号处理、图像处理、信息论、计算机科学、几何学、统计学、语言学、生物学、模糊数学、决策论等都有着千丝万缕的联系。一方面各学科的发展给它的研究提供了工具;另一方面,它的研究与发展也必将促进各学科的发展。因而有着重要的实用价值和理论意义。

二、算法流程


25eff3593b6fdf5e2baa5f5fc9ff2bc2.png
图1-1汉字识别流程框图



三、识别过程


191a1d790dfc38723e3f01567266a162.png
图2-3 标准图像





be58833f44dbfb558156c2dd3c935877.png
图2-4 标准图像转灰度图像



d74fe9c6bf04b62a76188c7089e39807.png
图2-5 标准图像均值滤波图像




9e513b2765e97ecc0848b530e6aea8df.png
图2-6 标准图像二值化图像




d726ec3008579b2d6277478dcc79c14a.png
图2-7 标准图像识别结果



通过对标准图像识别学习训练,然后对输入乱序图像(见图2-8)进行识别,过程中转灰度(见图2-9),均值滤波(见图2-10),二值化(见图2-11),识别结果(见图2-12)。



4e4c1fa7a6ca15c5152be50fba554010.png
图2-8 乱序图像



70f0bdcb3deda4a07c7777ac3796d489.png
图2-9 乱序图像转灰度图像




ee23280dfd0ea900906268c319730293.png
图2-10 乱序图像均值滤波图像




0bdc3c764c4b1b5402556db8a5bb519d.png
图2-11 乱序图像二值化图像




2ca451304a05eddab036e1897f868141.png
图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)

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的matlab大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值