印刷体汉字识别及其MATLAB实现

这篇具有很好参考价值的文章主要介绍了印刷体汉字识别及其MATLAB实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

印刷体汉字的识别及其MATLAB实现

0.汉字识别研究的意义

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

1.印刷体汉字识别的研究

印刷体汉字识别技术的发展历程

计算机技术的快速发展和普及,为文字识别技术应运而生提供了必备条件。加上人们对信息社会发展的要求越来越高,文字识别技术的快速发展可想而知。印刷体文字的识别可以说很早就成为人们的梦想。印刷体汉字的识别最早可以追溯到60年代,但都是西方国家进行的研究。我国对印刷体汉字识别的研究始于70年代末80年代初。同国外相比,我国的印刷体汉字识别研究起步较晚。从80年代开始,汉字ORC的研究开发一直受到国家重视,经过科研人员十多年的辛勤努力,印刷体汉字识别技术的发展和应用,有了长足进步。

印刷体汉字识别的原理分析及算法研究

汉字识别实质是解决文字的分类问题,一般通过特征辨别及特征匹配的方法来实现。目前汉字识别技术按照识别的汉字不同可以分为印刷体汉字识别和手写体汉字识别。印刷体汉字识别从识别字体上可分为单体印刷体汉字识别与多体印刷体汉字识别。

印刷体汉字识别的流程如图1-1所示:

图1-1汉字识别流程框图

印刷在纸张上的汉字,通过用扫描仪扫描或者数码相机拍摄等光学方式输入后得到灰度图像(Grayscale image)或者二值图像(Binary image),然后利用各种模式识别算法对汉字图像进行分析,提取汉字的特征,与标准汉字进行匹配判别,从而达到识别汉字的目的。印刷体汉字识别技术主要包括预处理、特征提取、匹配识别和后处理等步骤。

1.2.1预处理

在对原始图像进行识别处理之前,尽可能将干扰因素影响降低,是非常有必要的,也就是要先对原始采样信号进行预处理。预处理通常包括去除噪声、版面分析、二值化、倾斜校正、行列切分、平滑、归一化、细化等。

(1)版面分析

它是指对印刷体文档图像进行分析,提取出文本、图像图形、表格等区域,并确定其逻辑关系,并将相应的文本块连接在一起。

(2)二值化

将一幅具有多种灰度值的图像变成白黑分布的二值图像的工作称为二值化处理,二值化的主要目的是将汉字从图像中分离出来。通常的方法为先确定像素的阈值,比较像素值和阈值的大小,从而确定为1或0,这个二值化阈值的选取较为关键。

(3)倾斜校正

通过输入设备获得的图像不可避免地会发生倾斜,这会给后面的行字分割、文字识别等图像处理与分析带来困难,因此,在汉字识别系统中,倾斜校正是图像预处理的重要部分。倾斜校正的核心在于如何检测出图像的倾斜角。

(4)汉字切分

汉字切分的目的是利用字与字之间、行与行之间的空隙,将单个汉字从整个图像中分离出来。汉字的切分分为行切分和字切分[9]。

(5)归一化

归一化也称规格化,它是把文字尺寸变换成统一大小,纠正文字位置(平移),文字笔画粗细变换等文字图像的规格化处理,并只对文字图像进行投影。

(6)平滑

对数字图像进行平滑,目的是去处孤立的噪声干扰,以平滑笔画边缘。平滑在图像处理中实质是一幅文字图像通过一个低通滤波器,去除高频分量,保留低频分量。

(7)细化

细化处理是将二值化文字点阵逐层剥去轮廓边缘上的点,变成笔画宽度只有一个比特的文字骨架图形。细化处理的目的是搜索图像的骨架,去除图像上多余的像素,从而在不改变图像主要特征的前提下,减少图像的信息量。

1.2.2汉字特征提取

  预处理的最终目的是为了更加方便、准确地进行汉字的特征提取,从而提高汉字识别率。对于汉字,其特征大致分为两类,包括结构特征和统计特征,至今总数已经不下百种。

要做到有的放矢,就需要研究已有的获得良好效果的各种汉字特征,分析它们的优点、缺点和适用环境。如下列出常用的一些的汉字结构特征和汉字统计特征。

1.结构特征

(1)抽取笔画法

抽取笔画法是利用汉字由笔画所构成的特点进行识别,它利用汉字的结构信息来进行汉字的联机识别,在印刷体和脱机手写识别中,由于笔画提取的困难,结果不是很理想。

 (2)松弛匹配法

松弛匹配法是一种基于全局特征的匹配方法,它对输入汉字作多边近似,抽取边界线段,将这些边界线段组成临近线段表,然后用松弛匹配操作,完成边与边的匹配。这种方法利用弹性吸收汉字的变形,一个字只用一个样本。

(3)非线性匹配法

非线性匹配法是由Tsukumo等提出的,用以解决字形的位移、笔画的变形等现象。此方法试图克服从图形中正确抽取笔画的困难,以提高正确判别的能力。

2.统计特征

(1)笔画复杂性(Complexity Index) 

笔画复杂性指数是指文字笔画的线段密度,其定义如下:

                           (1-1)

                           (1-2)

式(1-1)和(1-2)中

一横向和纵向的笔画复杂性指数;

一横向和纵向的文字线段总长度;

一横向和纵向质心二次矩的平方根;

分别反应了横向和纵向的笔画复杂性,横多的

大,竖多的

大。笔画复杂性指数与汉字的位移无关,受字体和字号的影响较小,但易受笔画断裂和粘连的影响,且其分类能力较差,常与另一种粗分类方法“四边码”连用。

(2)四边码(Four-side Code)

四边码是在汉字点阵图的四周各取一条带,计算其中的文字图像素点数,并将它分成四级,构成一个四元组。由于汉字边框不但含有丰富的结构信息,而且边框部分笔画一般较少,不易粘连,抗干扰能力强,但对汉字的位移和旋转比较敏感,与笔画复杂性指数正好形成互补。

 (3)特征点

特征点提取算法的主要思想是利用字符点阵中一些有代表性的黑点(笔画)、白点(背景)作为特征来区分不同的字符。特征点包括笔画骨架线的端点、折点、歧点和交点,汉字的背景也含有一定的区别于其它汉字的信息,选择若干背景点作为特征点,有利于提高系统的抗干扰能力。其特点是能够大大压缩特征库的容量,对于内部笔画粘连字符,其识别的适应性较强、直观性好,但不易表示为矢量形式,匹配难度大,不适合作为粗分类的特征。

(4)笔段特征

汉字是由笔画组成的,而笔画又由笔段组成,笔段可近似为一定方向、长度和宽度的矩形段。利用笔段与笔段之间的关系组成特征对汉字进行识别,受字体和字号的影响小,对于多体汉字的识别获得了良好效果。其缺点是笔段的提取会较为困难,匹配的难度大,抗内部笔画断裂或者粘连能力差。

1.2.3汉字识别分类

1.相关匹配

这是一种统计识别方法,它通过在特征空间中计算输入特征向量与各模板向量之间的距离进行分类判决。

(2)文法分析

文法分析的基本思想是将输入的汉字看作是一个语句或符号串,将识别问题转化为判断输入的语句是否属于某种语言,即句子是否符合某种语言的语法约束条件。

(3)松弛匹配

无论是相关匹配还是文法分析,都要求输入特征向量和模板特征向量的各分量之间具有确切的对应关系,然而在结构分析中,往往事先难以确定两者各分量间的对应关系,此时可以采用松弛匹配法。

(4)人工神经网络

汉字识别是一个非常活跃的分支,不断有新的方法涌现出来,为汉字识别的研究注入新的活力,其中基于人工神经网络的识别方法是非常引人注目的方向。目前神经网络理论的应用己经渗透到各个领域,并在模式识别、智能控制、计算机视觉、自适应滤波和信号处理、非线性优化、自动目标识别,连续语音识别、声纳信号的处理、知识处理、传感技术与机器人、生物等领域都有广泛地应用。

1.2.4 后处理

后处理就是利用相关算法对识别后的汉字文本或者初级识别结果做进一步的处理,纠正误识的汉字,给出拒识的汉字,确定模棱两可的汉字。汉字识别的后处理方法[12,13]从用户的参与程度来说,可分为三类:手工处理,交互式处理和计算机自动处理。以下对各种常用的后处理方法做简单的介绍。

(1)简单的词匹配

简单的词匹配就是利用文本中字的上下文匹配关系和词的使用频度,给识别后文本中的拒识字提供一个“最佳”的候选字,其关键是建立汉语词条数据库。

(2)综合词匹配

综合词匹配方法,就是综合利用初级识别结果和字的上下文关系及词的使用频度,来决定最后的识别结果。这种方法实际上己把识别过程和后处理过程融为一体了。

(3)词法分析

语言是语音和意义的结合体。语素是最小的语言单位。无论是词还是短语,都有其构成规则,利用这些规则,将它们分类。另外,不同的应用背景,也有不同的分类结果。

(4)句法、语义分析

语句无论是从结构上,还是从意思上都有一种人类共同理解、共同接受和共同遵守的语言组合法则。所以利用语义句法的方法,在初级识别结果的基础上,在利用词法分析进行匹配之后或匹配的同时,再进行句法分析和语义分析,从而确定要识别的汉字。

(5)人工神经元网络

利用人工神经元网络的汉字识别后处理可以采取两种方式。一种是把识别过程和后处理过程分开,网络的输入是初级识别结果的短语或者句子,其中包含不确定的汉字(或拒识的汉字),通过网络的运行,最终确定这些字。另一种方法是把识别过程和后处理过程综合在一起,初级识别给出的结果是每一个待识汉字的前几个候选字和每一候选字与待识字之间的相似度。然后,把这些候选字以及与之相连的相似度输入网络,通过网络的并行作用,找到最符合汉语语法和语义组合关系的词或句子,从而确定出要识别的汉字。

 印刷体汉字识别技术分析

1.3.1结构模式识别方法

汉字的数量巨大,结构复杂,但其特殊的组成结构中蕴藏着相当严的规律[14]。从笔画上讲,汉字有包括横、竖、撇、捺、点、折、勾等七种基本笔画,还有提挑、撇点、横捺等七种变形笔画。从部件上讲,部件是有特殊的笔画组合而成,故部件也是一定的。换而言之,汉字图形具有丰富的有规律可循的结构信息,可以设法提取含有这些信息的结构特征和组字规律,将它们作为汉字识别的依据。这就是结构模式识别。

结构模式识别理论在20 世纪70 年代初形成,是早期汉字识别研究的主要方法。其思想是直接从字符的轮廓或骨架上提取的字符像素分布特征,如笔画、圈、端点、节点、弧、突起、凹陷等多个基元组合,再用结构方法描述基元组合所代表的结构和关系。通常抽取笔段或基本笔画作为基元,由这些基元组合及其相互关系完全可以精确地对汉字加以描述,最后利用形式语言及自动机理论进行文法推断,即识别。结构模式识别方法的主要优点在于对字体变化的适应性强,区分相似字能力强;缺点是抗干扰能力差,从汉字图像中精确的抽取基元、轮廓、特征点比较困难,匹配过程复杂。因此,有人采用汉字轮廓结构信息作为特征,但这一方案需要进行松弛迭代匹配,耗时太长,而且对于笔画较模糊的汉字图像,抽取轮廓会遇到极大困难。也有些学者采用抽取汉字图像中关键特征点来描述汉字,但是特征点的抽取易受噪声点、笔画的粘连与断裂等影响。总之单纯采用结构模式识别方法的脱机手写汉字识别系统,识别率较低。

1.3.2统计模式识别方法

统计模式识别方法是用概率统计模型提取待识别汉字的特征向量,然后根据决策函数进行分类,识别就是判别待识汉字的特征向量属于哪一类。常用的判别准则是距离准则和类似度准则,典型的统计模式识别方法有最小距离分类、最邻近分类等。

1.最小距离分类

最小距离分类器(Minimum - Distance Classifier) 是以汉字与特征空间模型点之间的距离作为分类准则,它有着图3-2所描述的结构。其中,

是输入特征向量,他将被分配到

个类别中的某一个类

) ,这些类有各自的典型模式

 表示。

图1-2  最小距离分类器系统图

2. 最邻近分类

最邻近法的思想是对于

 个类别

 (

) ,每类有标明类别的样本

 个(

)。规定

 的判别函数如式(1-1) 所示。其中

的角标

表示

类,k 表示

个样本中的第

 个。     

           (1-3)

,                (1-4)

若式(1-2) 成立,则决策

 。即对未知样本

,比较

个已知类别的样本之间的欧式距离并决策

与离它最近的样本同类。

常用的汉字统计模式识别方法包括:

(1)模板匹配

(2)利用变换特征的方法

(3)笔画方向特征

(4)外围特征

(5)特征点特征

随着汉字识别技术的发展,已经有越来越多的统计特征出现。但几乎每种特征都不是完美的,都要在特殊条件下施加一些特殊的处理。

2.系统的实现与仿真

系统的实现

印刷品上的汉字输入,经过预处理后,对照标准汉字修补缺损部分,用修补后的汉字进行学习,形成初始的特征库后再进行大量样本的学习,建立实用的特征库。系统在识别过程中可进行自学习。取标准汉字,对每一个汉字计算面积。所有按面积由小到大排列,建立每一汉字与其国标码的指针。对神经网络设置其初始权值,选取大量标准汉字训练网络,反复修改权值,直至与面积序号对应的输出为有效,并建立每一输出与面积特征库之间的连接关系。以后随着学习过程的进行,将建立动态调整面积特征库及其与神经网络之间的对应关系。系统共包括5个子功能模块(见图2-1)。

图2-1   系统模块图

图2-2  系统流程框图

系统的工作流程如图2-2所示,文件首先由文件管理器加载。送人图像处理模块,经二值化转灰度,均值滤波,二值化,行字切分等图像预处理操作后。得到待识文字的点阵,汉字识别模块从点阵中提取识别特征,通过十三点特征提取,精确匹配得出识别结果。

系统的仿真

    此次采用MATLAB进行系统仿真(Matlab仿真程序见附录1),其中学习功能使用sim函数实现,特征提取用十三点特征提取法。

y = sim( net, P_test);%用训练出来的神经网络计算数据的第P_test行;其中net是SIMULINK的模型名(神经网络的对象见附录2);P_test是外部输入向量。

十三点特征提取法:

首先把字符平均分成8份,统计每一份内黑色像素点的个数作为8个特征,然后统计水平方向中间两列和竖直方向中间两列的黑色像素点的个数作为4个特征,最后统计所有黑色像素点的个数作为第13个特征。也就是说,画4道线,统计穿过的黑色像素的数目。可以得到4个特征。最后,将字符图像的全部黑色像素的数目的总和作为一个特征。十三点特征提取法有着极好的适应性,但是由于特征点的数目太少所以在样本训练的时候比较难收敛。

系统首先对标准图像(见图2-3)进行识别,识别过程中转灰度(见图2-4),均值滤(见图2-5),二值化(见图2-6),波识别结果见图(2-7)。

图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  乱序图像识别结果

由以上实验结果可以看出,当输入标准图像,经过转灰度,均值滤波,二值化,识别输出。然后,输入乱序图像在经过转灰度,均值滤波,二值化,特征提取,匹配识别后,系统能够将乱序图像中的图像识别输出。说明系统基本实现预先设想的功能,能够在学习标准图像识别后建立标准库,并根据标准字库与以后输入的图像进行匹配识别输出。但由于系统比较简单,实现的功能也比较单一,要想实现较完备功能还需进一步完善。

3.附录

附录1

%乱序图像识别:

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;

%--------均值滤波

d=im2bw(B1,;

%--------二值

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)文章来源地址https://www.toymoban.com/news/detail-824095.html

到了这里,关于印刷体汉字识别及其MATLAB实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python调用免费汉字识别模型大全

    现在有一些免费识别汉字的模型,其中一些包括: Tesseract OCR:可以用于中文文本识别,并且是开源、免费的。 EasyOCR:适用于多种语言和多种字符集的OCR模型,支持中文字符,并且是开源、免费的。 PaddleOCR:由PaddlePaddle开发,支持多种语言和多种字符集,包括中文字符,是

    2023年04月23日
    浏览(14)
  • 计算机设计大赛 深度学习中文汉字识别

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习中文汉字识别 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgr

    2024年02月21日
    浏览(18)
  • Matlab 透视变换 原理及其代码实现

    透视变换本质 :将一个图像投影到新的视平面 透视变换思路: 将二维坐标系转换为三维坐标系。 将三维坐标系投影到新的二维坐标系。 该过程属于非线性变换过程,一个菱形在经过非线性变换后得到一个四边形,但是不在平行。 透视变换又可以称为投影变换,仿射变换属

    2024年02月04日
    浏览(12)
  • 遗传算法及其MATLAB实现(附完整代码)

           遗传算法是经典的智能算法, 经常被用来求解各种N-P问题, 各种非线性函数的优化等, 可以实现各类模型的非最优解优化. 遗传算法稳定性比较强, 优化的效果比较好, 不是特别依赖初值, 尤其对离散自变量的函数优化是很合适的, 比较容易得到理论最优解, 整体的

    2024年02月13日
    浏览(16)
  • 关联规则及其Apriori算法实现(MATLAB)

    你是否有过这样的经历:在刷抖音的时候,总是容易刷到自己比较感兴趣的领域,比如说你喜欢玩游戏、看电影、看美女,那么你刷到的视频往往就在这几个之间徘徊;当你进入淘宝、京东想看点东西的时候,你想买的东西正好在搜索框的推荐项;当你QQ音乐的喜欢里有《稻

    2024年02月04日
    浏览(12)
  • 多尺度散布熵及其matlab实现方法

    多尺度散布熵是一种基于计算机的非线性时间序列分析方法,它可以用于描述时间序列的复杂性和非线性特征,适用于多种领域,如金融市场、医学、地质、工程等。多尺度散布熵将时间序列分解成多个时域尺度,计算每个尺度下的散布熵,然后将它们结合起来获得整个时间

    2024年02月05日
    浏览(13)
  • 基于pyqt和卷积网络CNN的中文汉字识别

    直接上效果演示图:  通过点击按钮可以实现在画板上写汉字识别和加载图片识别两个功能。 视频演示和demo仓库地址在b站视频001期: 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 所有代码展示: 十分的简洁,主要是01,02,03.py文件 运行01dataset.py可以将da

    2024年02月13日
    浏览(27)
  • 各种搜索引擎及其使用技巧 效率翻倍

    搜索引擎是我们日常生活中不可或缺的工具之一,通过搜索引擎,我们可以在互联网上找到任何我们需要的信息。 目前世界上最著名和最常用的搜索引擎包括 Google、百度、必应、雅虎等。 平时我们使用搜索引擎除来直接输入外,它们还包含了一些高级技巧​,接下来

    2023年04月08日
    浏览(20)
  • 自适应变异麻雀搜索算法及其Matlab实现

    麻雀搜索算法( sparrow search algorithm,SSA) 是2020 年新提出的一种元启发式算法[1],它是受麻雀种群的觅食和反捕食行为启发,将搜索群体分为发现者、加入者和侦察者 3 部分,其相互分工寻找最优值,通过 19 个标准测试函数验证 SSA 算法在搜索精度,收敛速度,稳定性和避免局

    2024年02月14日
    浏览(13)
  • BP神经网络理解及其MATLAB实现

    BP(Back Propagation)网络是一种 按误差逆传播 算法训练的多层前馈网络,是应用最广泛的神经网络模型之一。BP能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用 最速下降法 ,通过反向传播来不断调整网络的权值

    2024年02月06日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包