印刷体汉字识别及其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)

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值