% 数字识别
number0=[0 1 1 1 0....
1 0 0 0 1....
1 0 0 0 1....
1 0 0 0 1....
1 0 0 0 1....
1 0 0 0 1....
0 1 1 1 0]';
number1=[0 0 1 0 0....
0 0 1 0 0....
0 0 1 0 0....
0 0 1 0 0....
0 0 1 0 0....
0 0 1 0 0....
0 0 1 0 0]';
number2=[1 1 1 1 1....
0 0 0 0 1....
0 0 0 1 0....
0 0 1 0 0....
0 1 0 0 0....
1 0 0 0 0....
1 1 1 1 1]';
number3=[1 1 1 1 1....
0 0 0 0 1....
0 0 0 0 1....
1 1 1 1 1....
0 0 0 0 1....
0 0 0 0 1....
1 1 1 1 1]';
number4=[1 0 0 0 1....
1 0 0 0 1....
1 0 0 0 1....
1 1 1 1 1....
0 0 0 0 1....
0 0 0 0 1....
0 0 0 0 1]';
number5=[1 1 1 1 1....
1 0 0 0 0....
1 0 0 0 0....
1 1 1 1 1....
0 0 0 0 1....
0 0 0 0 1....
1 1 1 1 1]';
number6=[1 1 1 1 1....
1 0 0 0 0....
1 0 0 0 0....
1 1 1 1 1....
1 0 0 0 1....
1 0 0 0 1....
1 1 1 1 1]';
number7=[1 1 1 1 1....
0 0 0 0 1....
0 0 0 0 1....
0 0 0 0 1....
0 0 0 0 1....
0 0 0 0 1....
0 0 0 0 1]';
number8=[1 1 1 1 1....
1 0 0 0 1....
1 0 0 0 1....
1 1 1 1 1....
1 0 0 0 1....
1 0 0 0 1....
1 1 1 1 1]';
number9=[1 1 1 1 1....
1 0 0 0 1....
1 0 0 0 1....
1 1 1 1 1....
0 0 0 0 1....
0 0 0 0 1....
1 1 1 1 1]';
alphabet=[number0,number1,number2,number3,number4,number5,number6,number7,number8,number9];
targets = eye(10);
%[alphabet,targets] = date;
P =alphabet; %alphabet=[number0,number1,number2,number3,number4,number5,number6,number7,number8,number9];
T = targets; %targets = eye(10);
[R,Q] = size(P);
S1 = 5;
[S2,Q] = size(T);
net = newff(minmax(alphabet),[S1 S2],{'logsig' 'logsig'},'traingdx');
net.LW{2,1} = net.LW{2,1}*0.01;
net.b{2} = net.b{2}*0.01;
% 无噪声字母识别网络的训练
net.performFcn = 'sse'; %执行函数为误差平方和函数
net.trainParam.epochs=800; %最大训练步长
net.trainParam.lr=0.01; %学习率
net.trainParam.lr_inc =1.05; %增长的学习率
net.trainParam.lr_dec =0.7;
net.trainParam.goal=0.1; %执行函数目标值
net.trainParam.mc =0.9; %附加动量因子
net.trainParam.min_grad=1e-10; %最小执行梯度
net.trainParam.show = 50;
P = alphabet;
T = targets;
[net,tr] = train(net,P,T);
pause % 按任意键继续
% 具有噪声的输入矢量识别网络的训练
netn = net;
netn.trainParam.goal = 0.1; %目标误差.
netn.trainParam.epochs = 300; %最大训练步长.
for pass=1:10
fprintf('Pass = %.0f\n',pass);
T = [targets targets targets targets];
P = [alphabet, alphabet, ...
(alphabet + randn(R,Q)*0.1), ...
(alphabet + randn(R,Q)*0.2)];
[netn,tr] = train(netn,P,T);
end
pause % 按任意键继续
% 再次用无噪声字母训练识别网络
netn.trainParam.goal = 0.1; % 均方误差目标.
netn.trainParam.epochs = 500; % 最大训练步长
net.trainParam.show = 5; % 训练中显示的频率
P = alphabet;
T = targets;
[netn,tr] = train(netn,P,T);
pause % 按任意键测试所训练的网络性能
% 测试所训练的网络性能
% ====================
noise_range = 0:.02:0.2;
max_test = 100;
network1 = [];
network2 = [];
T = targets;
% PERFORM THE TEST
for noiselevel = noise_range
fprintf('Testing networks with noise level of %.2f.\n',noiselevel);
errors1 = 0;
errors2 = 0;
for i=1:max_test
P = alphabet + randn(35,10)*noiselevel;
% TEST NETWORK 1
A = sim(net,P);
AA = compet(A);
errors1 = errors1 + sum(sum(abs(AA-T)))/2;
% fprintf('%.2f %.2f\n',AA,errors1);
%fprintf('AA is %6.2f and errors1 is %8.3f \n', AA, errors1)
% TEST NETWORK 2
An = sim(netn,P);
AAn = compet(An);
errors2 = errors2 + sum(sum(abs(AAn-T)))/2;
echo off
end
% 100组10个矢量的平均误差
network1 = [network1 errors1/10/100];
network2 = [network2 errors2/10/100];
end
echo on
pause % 按任意键显示结果
% 显示结果
% ========
clf
plot(noise_range,network1*100,'--',noise_range,network2*100);
grid
xlabel('Noise Level');
ylabel('Percentage of Recognition');
echo off
%三种情况下数字"8"的表示情况(改变alphabet(:,9)中的数字9为8.7...可以看到不同的数字情况)
%加入0.1的噪声
noisyY1 = alphabet(:,6)+randn(35,1) * 0.1;
figure(2);
plotchar(noisyY1);
A2=sim(net,noisyY1);
A2=compet(A2);
answer=find(compet(A2)==1);
figure(3);
%加入0.1的噪声后的识别结果
plotchar(alphabet(:,answer));
%noiseY2=alphabet(:,10)+randn(35,1)*0.1;
%figure(3);
%plotchar(noiseY2);
% %idealY=alphabet(:,10);
% figure(4)
% plotchar(idealY);
%加入0.2的噪声
% noisyY11 = alphabet(:,6)+randn(35,1) * 0.2;
% figure(4);
% plotchar(noisyY1);
% A21=sim(net,noisyY1);
% A21=compet(A21);
% answer=find(compet(A21)==1);
% figure(5);
% plotchar(alphabet(:,answer));
matlab数字识别
4星 · 超过85%的资源 需积分: 0 37 浏览量
更新于2009-08-09
11
收藏 2KB RAR 举报
在本文中,我们将深入探讨如何使用MATLAB进行数字识别,这是一种模式识别技术,常用于图像处理和计算机视觉领域。MATLAB作为一个强大的数学计算环境,提供了丰富的工具和函数库,使得开发数字识别系统变得相对简单。
我们来看一下标题"matlab数字识别"。这表明我们将使用MATLAB来构建一个系统,该系统能够识别数字图像,可能是从手写数字、扫描文档或图像捕获设备中获取的。数字识别通常涉及图像预处理、特征提取、分类和模型训练等步骤。
描述中提到"matlab源码 模式识别之数字识别,利用数字的特点,对数字进行分类,达到识别的效果"。这提示我们,我们需要编写MATLAB代码来实现这一过程。数字的特点可能包括形状、大小、方向、连通性等,这些都可以作为特征来区分不同的数字。分类是通过机器学习算法完成的,例如支持向量机(SVM)、神经网络或决策树等,它们可以学习并记住数字的特征,以便于对未知数据进行预测。
在提供的文件名"数字识别.m"中,我们可以推测这是一个MATLAB脚本或函数,包含了整个数字识别过程的实现。这个文件可能会包括以下几个部分:
1. **数据准备**:加载数字图像数据集,例如MNIST,这是一个广泛使用的手写数字数据库。数据预处理可能包括灰度化、二值化、尺寸归一化等步骤。
2. **特征提取**:从预处理的图像中提取有用的特征,例如边缘检测、直方图均衡化、结构元素分析等。
3. **模型训练**:选择合适的分类器,如SVM或神经网络,并使用训练集进行训练。训练过程中,特征和对应的标签会被用来调整模型参数,使其能准确地将数字分类。
4. **模型测试与优化**:使用验证集评估模型的性能,可能包括准确率、召回率、F1分数等指标。根据测试结果进行参数调优,如改变学习率、调整正则化参数等。
5. **应用模型**:用训练好的模型对新的、未见过的数字图像进行预测。
MATLAB中的`Image Processing Toolbox`和`Statistics and Machine Learning Toolbox`提供了丰富的函数支持上述过程。例如,`imread`用于读取图像,`im2gray`和`imbinarize`用于转换图像,`regionprops`用于分析图像特征,而`svmtrain`和`svmclassify`则用于SVM模型的训练和预测。
在实际项目中,数字识别可能还会涉及到深度学习,例如卷积神经网络(CNN),它在图像识别任务上表现出色。MATLAB的`Deep Learning Toolbox`提供了一套完整的工具来构建、训练和部署CNN模型。
MATLAB数字识别是一个涉及图像处理、特征工程和机器学习的综合性课题,通过理解和实践这段代码,可以深入了解这些领域的核心概念和技术。
gigglefurong
- 粉丝: 0
- 资源: 1
最新资源
- 组织架构设计流程-企业管理必备.docx
- 【岗位职责说明书】100000301 总经理(院长).doc
- 【岗位职责说明书】100000400 副总经理、院长.doc
- 【岗位职责说明书】100000500 总经理助理、院长助理.doc
- 【岗位职责说明书】100000503 安全保卫部主任.doc
- 【岗位职责说明书】100000601 安全保卫部副主任.doc
- 【岗位职责说明书】100000602 人力资源部副经理.doc
- 【岗位职责说明书】100000604 财务部副经理.doc
- 【岗位职责说明书】100000506 财务部经理.doc
- 【岗位职责说明书】100000702 人力资源部经理助理.doc
- 【岗位职责说明书】100000703 财务部经理助理.doc
- 【岗位职责说明书】100000704 室(职能部室)经理.doc
- 【岗位职责说明书】100000707 综合行政高级主管.doc
- 【岗位职责说明书】100000706 财务部经理(分公司).doc
- 【岗位职责说明书】100000701 安全保卫部主任助理.doc
- 【岗位职责说明书】100000705 综合部经理(分公司).doc
- 1
- 2
- 3
前往页