欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2023/12/14 编程问答 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 基于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)==mj=j+1; end k1=j; while s(j)~=m && j<=n-1j=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)==mj=j+1;endk1=j;while s(j)~=m && j<=n-1j=j+1;endk2=j-1; %--------列分割if c==1b1=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==2b2=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==3b3=d(:,(k1:k2));imwrite(b3,'');t3=tezhengtiqu(b3);P_test = [t3]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第3个字符 if c==4b4=d(:,(k1:k2));imwrite(b4,'');t4=tezhengtiqu(b4);P_test = [t4]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第4个字符 if c==5b5=d(:,(k1:k2));imwrite(b5,'');t5=tezhengtiqu(b5);P_test = [t5]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第5个字符 if c==6b6=d(:,(k1:k2));imwrite(b6,'');t6=tezhengtiqu(b6);P_test = [t6]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第6个字符 if c==7b7=d(:,(k1:k2));imwrite(b7,'');t7=tezhengtiqu(b7);P_test = [t7]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第7个字符 if c==8b8=d(:,(k1:k2));imwrite(b8,'');t8=tezhengtiqu(b8);P_test = [t8]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第8个字符 if c==9b9=d(:,(k1:k2));imwrite(b9,'');t9=tezhengtiqu(b9);P_test = [t9]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第9个字符 if c==10b10=d(:,(k1:k2));imwrite(b10,'');t10=tezhengtiqu(b10);P_test = [t10]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第10个字符 if c==11b11=d(:,(k1:k2));imwrite(b11,'');t11=tezhengtiqu(b11);P_test = [t11]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第11个字符 if c==12b12=d(:,(k1:k2));imwrite(b12,'');t12=tezhengtiqu(b12);P_test = [t12]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第12个字符 if c==13b13=d(:,(k1:k2));imwrite(b13,'');t13=tezhengtiqu(b13);P_test = [t13]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第13个字符 if c==14b14=d(:,(k1:k2));imwrite(b14,'');t14=tezhengtiqu(b14);P_test = [t14]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第14个字符 if c==15b15=d(:,(k1:k2));imwrite(b15,'');t15=tezhengtiqu(b15);P_test = [t15]; y = sim(net,P_test');word=jieguoxianshi(y) end %--------第15个字符 if c==16b16=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)==mj=j+1; end k1=j; while s(j)~=m && j<=n-1j=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)==mj=j+1;endk1=j;while s(j)~=m && j<=n-1j=j+1;endk2=j-1; %--------列分割if c==1b1=d(:,(k1:k2));imwrite(b1,'');t1=tezhengtiqu(b1);P_test = [t1']; y = sim(net,P_test);word=fbmjieguoxianshi(y)end %--------第1个字符 if c==2b2=d(:,(k1:k2));imwrite(b2,'');t2=tezhengtiqu(b2);P_test = [t2]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第2个字符 if c==3b3=d(:,(k1:k2));imwrite(b3,'');t3=tezhengtiqu(b3);P_test = [t3]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第3个字符 if c==4b4=d(:,(k1:k2));imwrite(b4,'');t4=tezhengtiqu(b4);P_test = [t4]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第4个字符 if c==5b5=d(:,(k1:k2));imwrite(b5,'');t5=tezhengtiqu(b5);P_test = [t5]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第5个字符 if c==6b6=d(:,(k1:k2));imwrite(b6,'');t6=tezhengtiqu(b6);P_test = [t6]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第6个字符 if c==7b7=d(:,(k1:k2));imwrite(b7,'');t7=tezhengtiqu(b7);P_test = [t7]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第7个字符 if c==8b8=d(:,(k1:k2));imwrite(b8,'');t8=tezhengtiqu(b8);P_test = [t8]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第8个字符 if c==9b9=d(:,(k1:k2));imwrite(b9,'');t9=tezhengtiqu(b9);P_test = [t9]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第9个字符 if c==10b10=d(:,(k1:k2));imwrite(b10,'');t10=tezhengtiqu(b10);P_test = [t10]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第10个字符 if c==11b11=d(:,(k1:k2));imwrite(b11,'');t11=tezhengtiqu(b11);P_test = [t11]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第11个字符 if c==12b12=d(:,(k1:k2));imwrite(b12,'');t12=tezhengtiqu(b12);P_test = [t12]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第12个字符 if c==13b13=d(:,(k1:k2));imwrite(b13,'');t13=tezhengtiqu(b13);P_test = [t13]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第13个字符 if c==14b14=d(:,(k1:k2));imwrite(b14,'');t14=tezhengtiqu(b14);P_test = [t14]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第14个字符 if c==15b15=d(:,(k1:k2));imwrite(b15,'');t15=tezhengtiqu(b15);P_test = [t15]; y = sim(net,P_test');word=fbmjieguoxianshi(y) end %--------第15个字符 if c==16b16=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==16word='匣'; elseif I==15word='囡'; elseif I==14word='图'; elseif I==13word='国'; elseif I==12word='盅'; elseif I==11word='匡'; elseif I==10word='盏'; elseif I==9word='固'; elseif I==8word='监'; elseif I==7word='盂'; elseif I==6word='盒'; elseif I==5word='团'; elseif I==4word='盈'; elseif I==3word='団'; elseif I==2word='盔'; elseif I==1word='因'; 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/4for j=1:n/2if d(i,j)==1k1=k1+1;endend end k2=1; for i=1:round(m/4)for j=round(n/2):round(n)if d(i,j)==1k2=k2+1;endend end k3=1; for i=round(m/4):m/2for j=1:n/2if d(i,j)==1k3=k3+1;endend end k4=1; for i=round(m/4):m/2for j=round(n/2):nif d(i,j)==1k4=k4+1;endend end k5=1; for i=round(m/2):round(m*3/4)for j=1:round(n/2)if d(i,j)==1k5=k5+1;endend end k6=1; for i=round(m/2):round(m*3/4)for j=round(n/2):nif d(i,j)==1k6=k6+1;endend end k7=1; for i=round(m*3/4):mfor j=1:round(n/2)if d(i,j)==1k7=k7+1;endend end k8=1; for i=round(m*3/4):mfor j=round(n/2):nif d(i,j)==1k8=k8+1;endend 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: 1numLayers: 3biasConnect: [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 inputslayers: {3x1 cell} of layersoutputs: {1x3 cell} containing 1 outputtargets: {1x3 cell} containing 1 targetbiases: {3x1 cell} containing 3 biasesinputWeights: {3x1 cell} containing 1 input weightlayerWeights: {3x3 cell} containing 2 layer weights functions: %功能adaptFcn: 'trains'initFcn: 'initlay'performFcn: 'mse'trainFcn: 'trainlm'parameters: %参数adaptParam: .passesinitParam: (none)performParam: (none)trainParam: .epochs, .goal, .max_fail, .mem_reduc, .min_grad, .mu, .mu_dec, .mu_inc, .mu_max, .show, .timeweight and bias values: %权重和偏置值IW: {3x1 cell} containing 1 input weight matrixLW: {3x3 cell} containing 2 layer weight matricesb: {3x1 cell} containing 3 bias vectorsother: %其他userdata: (user stuff)

总结

以上是生活随笔为你收集整理的基于MATLAB印刷体汉字识别解析的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。