您当前的位置:五五电子网电子知识单片机-工控设备DSP/FPGA技术基于FPGA的脱机手写体汉字识别系统 正文
基于FPGA的脱机手写体汉字识别系统

基于FPGA的脱机手写体汉字识别系统

点击数:7297 次   录入时间:03-04 11:49:09   整理:http://www.55dianzi.com   DSP/FPGA技术

      2.2.1基于分类识别的选择

      BP神经网络:具有自适应性,通过反复训练不断修正连接权值以进行特征提取。该方法具有较高的普适性,并且可以通过调整学习方法得到一种较优的网络。但该方法并未利用汉字的特征,适用于子类中单字识别。

      字型特征:通过对水平和垂直方向上投影得出的直方图的分析,可得出一个汉字的字型统计特征(左右、上下等),适于粗分类。

      笔画密度特征:从水平,垂直方向等间隔取多根扫描线,取穿过笔画数的最大值,形成2维特征向量,适于粗分类。

      弹性网格特征:根据笔画位置将单个汉字分割为几个网格,通过计算每个网格内笔画的矢量特征进行特征提取,特征向量较多,适用于子类中单字识别。

      笔画结构特征:通过寻找交叉点和拐点将汉字分为笔段,然后将笔段按倾斜度和连通性合并成笔画,提取笔画的矢量特性作为特征向量,向量数较多,适用于子类中单字识别。但该方法同时可以统计出笔画总数和交叉点总数,可用于粗分类。

      四角特征:通过提取四角的笔画结构特征进行分类,向量中包含四个元素,可结合(5)进行粗分类。

      我们将通过MATLAB对以上算法进行实验,以确定最优的分类和子分类中单字识别的算法。

      2.2.2基于并行化运算的选择

      BP神经网络:由于神经网络由神经元构成,每个神经元的计算以及权值调整计算都为乘法和加法,以上特征使之很适合并行化和流水线计算。

      字型特征:投影运算为串并行结合加法运算,最大值计算为串行运算,字型判断部分为较复杂串并行结合逻辑运算。

      笔画密度特征:水平和垂直扫描运算为串行,多根扫描线并行,取最大值运算为串行。

      弹性网格特征:分格后可对每格进行并行化运算,但其中的向量计算包含大量除法,其实现效率有待验证。

      笔画结构特征:交叉点寻找为并行,倾斜度计算为并行,提取矢量特性为并行,但以上步骤的结果入库过程为串行扫描。

      四角特征:四角可并行运算。

      在进行MATLAB进行算法实验的同时,我们会同时使用System Generator进一步对算法的并行化及流水线计算可能性进行评估实验,并结合2.2.1进行总体效率评估。

      2.3分类识别

      在分别对样本和标准样本提取特征后,分类和识别可采用神经网络、决策树、支持向量机或统计方法等。对于在FPGA上实现文字识别来说,神经网络和统计方法可行性较好,下面对这两种算法的特点进行简单说明。

      2.3.1神经网络

      人工神经网络通过网络节点间的连接来存储信息并完成分类计算。神经网络分类器通过学习,根据训练样本集来调整连接的权值,构造出相应的分类曲面。由于其较强的曲线拟合和模式分类能力,为手写签名识别的研究提供了新的手段。

      神经网络有很强的信息处理能力,它能以任意精度逼近连续非线性函数;它信息处理的并行机制中的冗余性可以实现很强的容错能力;对复杂不确定问题具有自适应和自学习能力。在一定多的训练次数以及合适的参数选择下,神经网络可以得出很理想的结果。

      神经网络是由大量神经元构成的,其自身的特点使其非常适合并行化和流水线计算。

      2.3.2 统计方法

      统计方法主要有最近邻归类、基于事例的学习等,这些方法本质上是基于某种距离进行相应变换,得到具有另外一些参数的分类公式。统计学上主要用的基本距离公式有绝对值距离、欧氏距离、明斯基距离等。

      其中,最小距离分类器作为一种直观有效的分类方法,在实际应用中受到广泛重视,尤其对于高维多模式问题,使用类聚等分类方法存在计算量巨大、难以保证算法收敛等问题,距离函数分类器更显其优越性。在实际问题中,常把各类模式矢量的统计平均值作为该类模式的基准模板,用待识别样本与此基准模板做比较。

      统计计算多为乘累加运算,在FPGA中采用分级流水线乘法器和加法器可获得较高的计算效率。



www.55dianzi.com

      2.4仿真识别结果(以数字测试)

     

      附:

      (部分matlab主要程序代码)

      主程序:main.m

      clear

      clc

      global X; %图像特征矩阵

      global S; %样本特征矩阵

      sample_training; %训练样本

      E=imread('6_1.jpg'); %待识别图像读入

      %A=gca;

      imshow(E);%axis(A);

      initial(E);

      i=0;j=0;d=0;

      Dm=zeros(10,15);

      for i=1:10

      for j=1:15

      Dm(i,j)=abs(S(i,j)-X(1,j));

      end

      end

      D=sum(Dm,2);

      Position=find(D==min(D));

      % i=Position;

      if Position==10

      Position=0;

      else break;

      end

      set(handles.edit1,'String',Position);

      预处理程序:initial.m

      function initial(RGB)

      GRAY=rgb2gray(RGB);

      %高斯滤波

      g=fspecial('gaussian',3,3);

      GRAY1=imfiLTEr(GRAY,g);

      %切割图像

      BW=im2bw(GRAY1);

      [m,n]=size(BW);

      %竖直投影

      I1=sum(BW);

      L=max(I1);

      L1=L-2;

      x1=0;x2=0;k=0;

      for k=1:m

      if I1(k)

      x1=k;break;

      else

      k=k+1;

      end

      end

      for k=x1:m

      if I1(k)>L1

      x2=k;break;

      else

      k=k+1;

      end

      end

      %水平投影

      BW1=BW';

      I2=sum(BW1);

      L=max(I2);

      L2=L-2;

      y1=0;y2=0;k=0;

      for k=1:n

      if I2(k)

      y1=k;break;

      else

      k=k+1;

      end

      end

      for k=y1:n

      if I2(k)>L2

      y2=k;break;

      else

      k=k+1;

      end

      end

      %行,子切分

      BW2=BW(y1:y2,x1:x2);

      %图像归一化

      NOR=imresize(BW2,[120 90]);

      %特征提取

      X=zeros(1,15);

      X(1)=bwarea(NOR(1:40,1:30))/10800;

      X(2)=bwarea(NOR(1:40,31:60))/10800;

      X(3)=bwarea(NOR(1:40,61:90))/10800;

      X(4)=bwarea(NOR(41:80,1:30))/10800;

      X(5)=bwarea(NOR(41:80,31:60))/10800;

      X(6)=bwarea(NOR(41:80,61:90))/10800;

      X(7)=bwarea(NOR(81:120,1:30))/10800;

      X(8)=bwarea(NOR(81:120,31:60))/10800;

      X(9)=bwarea(NOR(81:120,61:90))/10800;

      X(10)=X(1)+X(2)+X(3);

      X(11)=X(4)+X(5)+X(6);

      X(12)=X(7)+X(8)+X(9);

      X(13)=X(1)+X(4)+X(7);

      X(14)=X(2)+X(5)+X(8);

      X(15)=X(3)+X(6)+X(9);



上一页  [1] [2] 


本文关键字:汉字  手写体  DSP/FPGA技术单片机-工控设备 - DSP/FPGA技术