【小波神经网络】基于小波神经网络的手写汉字识别算法的matlab仿真

1.软件版本

matlab2015b

2.算法概述

       通过小波神经网络,实现“中”/“东”/“西”三个汉字的识别并统计识别率。

       汉字是以图片形式存在,首先对图片进行预处理,包括:二值化/细化/去噪/等

       然后对汉字提取特征,利用提取笔画特征将汉字分为横竖撇捺四个分量图像,再分别对四个分量图像划分4×4的弹性网格,最终每个汉字得到4×4×4=64维作为小波神经网络的输入。

       通过小波神经网络训练,对每一个汉字用100个不同人的字体进行训练,训练完成之后,每一个汉字用20个字测试。

HOT特征提取过程如下所示:

1HOG特征:

       方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。

1)主要思想:

       在一副图像中,局部目标的表象和形状(appearance and shape)能够被梯度或边缘的方向密度分布很好地描述。(本质:梯度的统计信息,而梯度主要存在于边缘的地方)。

2)具体的实现方法是:

       首先将图像分成小的连通区域,我们把它叫细胞单元。然后采集细胞单元中各像素点的梯度的或边缘的方向直方图。最后把这些直方图组合起来就可以构成特征描述器。

3)提高性能:

       把这些局部直方图在图像的更大的范围内(我们把它叫区间或block)进行对比度归一化(contrast-normalized),所采用的方法是:先计算各直方图在这个区间(block)中的密度,然后根据这个密度对区间中的各个细胞单元做归一化。通过这个归一化后,能对光照变化和阴影获得更好的效果。

4)优点:

       与其他的特征描述方法相比,HOG有很多优点。首先,由于HOG是在图像的局部方格单元上操作,所以它对图像几何的和光学的形变都能保持很好的不变性,这两种形变只会出现在更大的空间领域上。其次,在粗的空域抽样、精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。因此HOG特征是特别适合于做图像中的人体检测的。

2HOG特征提取算法的实现过程:

大概过程:

HOG特征提取方法就是将一个image(你要检测的目标或者扫描窗口):

1)灰度化(将图像看做一个x,y,z(灰度)的三维图像);

2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;

3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。

4)将图像划分成小cells(例如6*6像素/cell);

5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个celldescriptor

6)将每几个cell组成一个block(例如3*3cell/block),一个block内所有cell的特征descriptor串联起来便得到该blockHOG特征descriptor

7)将图像image内的所有blockHOG特征descriptor串联起来就可以得到该image(你要检测的目标)的HOG特征descriptor了。这个就是最终的可供分类使用的特征向量了。

3.部分源码

clc;
clear;
close all;
warning off;
addpath 'func\'
addpath 'func\hog_catch\'
% rng(1);
% RandStream.setDefaultStream(RandStream('mt19937ar','seed',1));
          s = RandStream('mt19937ar','Seed',1)
          RandStream.setGlobalStream(s);
%这个是另外一个方法, 性能更好,
load feature.mat

%train
for i = 1:100
    P_train(i,:) = [Fd{i}];
end
for i = 1:100
    P_train(100+i,:) = [Fx{i}];
end
for i = 1:100
    P_train(200+i,:) = [Fz{i}];
end
T_train = [1*ones(100,1);2*ones(100,1);3*ones(100,1);];


%test
for i = 1:20
    P_test(i,:) = [Fd{100+i}];
end
for i = 1:20
    P_test(20+i,:) = [Fx{100+i}];
end
for i = 1:20
    P_test(40+i,:) = [Fz{100+i}];
end
T_test = [1*ones(20,1);2*ones(20,1);3*ones(20,1);];
net1   = newgrnn(P_train',T_train',0.1);
yout   = round(net1(P_test'));
disp('正确率:'); 
100*length(find(yout==T_test'))/length(T_test')






load feature.mat

%train
for i = 1:100
    P_train(i,:) = [Fd{i}];
end
for i = 1:100
    P_train(100+i,:) = [Fx{i}];
end
for i = 1:100
    P_train(200+i,:) = [Fz{i}];
end
T_train = [1*ones(100,1);2*ones(100,1);3*ones(100,1);];


%test
for i = 1:20
    P_test(i,:) = [Fd{100+i}];
end
for i = 1:20
    P_test(20+i,:) = [Fx{100+i}];
end
for i = 1:20
    P_test(40+i,:) = [Fz{100+i}];
end
T_test = [1*ones(20,1);2*ones(20,1);3*ones(20,1);];

%WNN训练
[Net_wnn1,Net_wnn2,Weight_A,Weight_B,Weight_HA,Weight_HB,Num_H,Num_I,Num_O]=func_wnn_train(P_train,P_test,T_train,T_test);

%WNN预测
final = func_wnn_test(P_test,Net_wnn1,Net_wnn2,Weight_A,Weight_B,Weight_HA,Weight_HB,Num_H,Num_I,Num_O);

%转换为1~3
[V,I] = sort(final);
final2= final;
final2(I(1:20))  = 1;
final2(I(21:40)) = 2;
final2(I(41:60)) = 3;
disp('正确率:'); 
100*length(find(final2==T_test'))/length(T_test')

 
figure;
flag1 = final2(1:20);
for i = 1:20
    NAME = ['images\d\',num2str(100+i),'.jpg'];
    tmps = imread(NAME);
    subplot(6,10,i);
    imshow(tmps);
    if flag1(i) == 1
       title('识别正确','Color','b');
    else
       title('识别错误','Color','r');
    end
end
 
 
flag2 = final2(21:40);
for i = 1:20
    NAME = ['images\x\',num2str(100+i),'.jpg'];
    tmps = imread(NAME);
    subplot(6,10,20+i);
    imshow(tmps);
    if flag2(i) == 2
       title('识别正确','Color','b');
    else
       title('识别错误','Color','r');
    end
end


 
flag3 = final2(41:60);
for i = 1:20
    NAME = ['images\z\',num2str(100+i),'.jpg'];
    tmps = imread(NAME);
    subplot(6,10,40+i);
    imshow(tmps);
    if flag3(i) == 3
       title('识别正确','Color','b');
    else
       title('识别错误','Color','r');
    end
end

4.仿真结论

A05-39

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/125240312