65.9K
CodeProject 正在变化。 阅读更多。
Home

使用MLP进行字符识别

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.43/5 (5投票s)

2017年5月22日

CPOL

1分钟阅读

viewsIcon

11018

downloadIcon

387

使用MLP神经网络进行字符识别

引言

这是一个简单的“英语字符识别”代码,使用MLP神经网络(多层感知器),性能超过80%,你可以通过设置更多的输入来改进它。

Using the Code

要使用此代码,最好了解它的工作原理。

有一些名为inputconverttestalltester的函数。

在脚本“Main”中,我们运行此代码。

使用函数“inputpic()”,我们获取所有资源,这里是英文字母(i,m,n,t,v,w,y)的9*7张图片。

%% Load Images
i= inputpic();

在input函数中,我们获取每张图片并使用名为“convert”的函数将其转换为一列二进制数据。

I1 =  imread('./pics/i1.png');
I2 =  imread('./pics/i2.png');
I3 =  imread('./pics/i3.png');
I1 = convert(I1); 
I2 = convert(I2);
I3 = convert(I3);

在input函数中

function out = convert(pic)
pic = rgb2gray(pic);    %change the picture to gray picture 
pic = im2bw(pic);       %%change the picture to black/white picture(binery picture)
pic = pic';
pic = pic(:);
out = pic;
end

提示:我们没有从图片中提取任何特征,我们的数据是一列二进制图片数据。

0”表示黑色像素,“1”表示白色像素。

在input函数的末尾,我们将所有图片数据收集在一列中,并设置在一个矩阵中。

M = [I1 I2 I3 M1 M2 M3 N1 N2 N3 T1 T2 T3 V1 V2 V3 W1 W2 W3 Y1 Y2 Y3];

现在回到Main脚本。

t是目标,显示哪个数字代表哪个字符。

例如,(0,0,0)表示字符“i”。

%% Load Images and Set Target
i= inputpic();
       t = [ 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1;
             0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1;
             0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0];
   %target:  i i i m m m n n n t t t v v v w w w y y y

之后,我们应该使用输入数据和目标来训练我们的网络。

我们使用多层感知器网络进行机器学习。

使用100个隐藏层,使用MLP训练数据和目标。

%% Train mlp
mlp = newff(i,t,100);
mlp = train(mlp,i,t);

测试数字“i”作为示例

p = mlp(test);

网络给我们一个介于01之间的数字,我们需要将其归一化为01数字。

使用阈值0.5归一化答案。

p=abs(p);
k=0;
for k=1:3
    if(p(k)>0.5)
        p(k)=1;
    else
        p(k)=0;
    end
end

该网络的性能超过80%。

使用MLP进行字符识别 - CodeProject - 代码之家
© . All rights reserved.