function FaceRecognitionByBPneuralnetwork
%% 基于BP神经网络的人脸识别
%%2014-05-14
clc
global base net %定义全局变量,用于 TestofFaceRecognition.m 函数中
%% 第一步,利用主元分析PCA法提取图像的特征矩阵
allsamples=[]; %所有训练图像
for i=1:40
for j=1:5
a=imread(strcat('D:\MATLAB\人脸库\s',num2str(i),'\',num2str(j),'.bmp'));
b=a(1:112*92); % b是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右
b=double(b);
allsamples=[allsamples; b]; % allsamples 是一个M * N 矩阵,allsamples 中每一行数据代表一张图片,其中M=400
end
end
samplemean=mean(allsamples); % 平均图片,1 × N
for i=1:200
xmean(i,:)=allsamples(i,:)-samplemean; % xmean是一个M × N矩阵,xmean每一行保存的数据是“每个图片数据-平均图片”
end
sigma=xmean*xmean'; % M * M 阶矩阵
[v d]=eig(sigma);
d1=diag(d);
[d2 index1]=sort(d1); %以升序排序
cols=size(v,2); % 特征向量矩阵的列数
for i=1:cols
vsort(:,i) = v(:, index1(cols-i+1) ); % vsort 是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量,每一列构成一个特征向量
dsort(i) = d1( index1(cols-i+1) ); % dsort 保存的是按降序排列的特征值,是一维行向量
end %完成降序排列
%以下选择85%的能量
dsum = sum(dsort);
dsum_extract = 0;
p= 0;
while( dsum_extract/dsum < 0.85)
p=p + 1;
dsum_extract = sum(dsort(1:p));
end
i=1;
%计算特征脸形成的坐标系
while (i<=p && dsort(i)>0)
base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base是N×p阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化
i = i + 1;
end
%下面的代码,将训练样本对坐标系上进行投影,得到一个 M*p 阶矩阵allcoor
allcoor = allsamples * base;
%% 第二步,创建并训练BP神经网络
%生成训练BP神经网络的输入 P
P= mapminmax(allcoor); %归一化
%生成目标输出矢量 T
T=zeros(200,40);
for i=1:40
for j=1:5
T((i-1)*5+j,i)=1;
end
end
%打乱训练样本顺序
gx2(:,1:47)=P;
gx2(:,48:87)=T;
xd=gx2(randperm(numel(gx2)/87),:);
gx=xd(:,1:47);d=xd(:,48:87);
P=gx';
T=d';
%创建BP神经网络
[R,Q]=size(P);
[S2,Q]=size(T);
net=newcf(minmax(P),T,[60,15],{'tansig','logsig'},'trainscg');
%训练BP神经网络
net.trainparam.epochs=5000;
net.trainparam.goal=0.0001;
net.divideFcn = '';
net=train(net,P,T);
%仿真BP神经网络
Y=sim(net,P);
%% 第三步,测试BP神经网络并计算其识别率
%测试BP神经网络
s=0;
for i=1:40
for j=6:10 %读入40x5副测试图像
a=imread(strcat('D:\MATLAB\人脸库\s',num2str(i),'\',num2str(j),'.bmp'));
b=a(1:10304);
b=double(b);
tcoor= b * base; %计算坐标,是1×p阶矩阵
X = mapminmax(tcoor); %归一化
Z=sim(net,X');
[zi,index2]=max(Z);
if index2==i
s=s+1;
else
i %输出识别出错的那个人 i
j %输出识别出错的那张图片 j
index2 %输出误识别成的那个人
end
end
end
%计算识别率
accuracy=s/Q
end
%% 完成
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
matlab基于BP神经网络的人脸识别 (792个子文件)
3.bmp 11KB
1.bmp 11KB
4.bmp 11KB
8.bmp 11KB
2.bmp 11KB
5.bmp 11KB
9.bmp 11KB
10.bmp 11KB
7.bmp 11KB
6.bmp 11KB
3.bmp 11KB
1.bmp 11KB
4.bmp 11KB
8.bmp 11KB
2.bmp 11KB
5.bmp 11KB
9.bmp 11KB
10.bmp 11KB
7.bmp 11KB
6.bmp 11KB
3.bmp 11KB
1.bmp 11KB
4.bmp 11KB
8.bmp 11KB
2.bmp 11KB
5.bmp 11KB
9.bmp 11KB
10.bmp 11KB
7.bmp 11KB
6.bmp 11KB
3.bmp 11KB
1.bmp 11KB
4.bmp 11KB
8.bmp 11KB
2.bmp 11KB
5.bmp 11KB
9.bmp 11KB
10.bmp 11KB
7.bmp 11KB
6.bmp 11KB
3.bmp 11KB
1.bmp 11KB
4.bmp 11KB
8.bmp 11KB
2.bmp 11KB
5.bmp 11KB
9.bmp 11KB
10.bmp 11KB
7.bmp 11KB
6.bmp 11KB
3.bmp 11KB
1.bmp 11KB
4.bmp 11KB
8.bmp 11KB
2.bmp 11KB
5.bmp 11KB
9.bmp 11KB
10.bmp 11KB
7.bmp 11KB
6.bmp 11KB
3.bmp 11KB
1.bmp 11KB
4.bmp 11KB
8.bmp 11KB
2.bmp 11KB
5.bmp 11KB
9.bmp 11KB
10.bmp 11KB
7.bmp 11KB
6.bmp 11KB
3.bmp 11KB
1.bmp 11KB
4.bmp 11KB
8.bmp 11KB
2.bmp 11KB
5.bmp 11KB
9.bmp 11KB
10.bmp 11KB
7.bmp 11KB
6.bmp 11KB
3.bmp 11KB
1.bmp 11KB
4.bmp 11KB
8.bmp 11KB
2.bmp 11KB
5.bmp 11KB
9.bmp 11KB
10.bmp 11KB
7.bmp 11KB
6.bmp 11KB
3.bmp 11KB
1.bmp 11KB
4.bmp 11KB
8.bmp 11KB
2.bmp 11KB
5.bmp 11KB
9.bmp 11KB
10.bmp 11KB
7.bmp 11KB
6.bmp 11KB
共 792 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
- 萝卜头喜欢张若昀2021-03-21结果根本就是设定好的,输入几,就回答几,不是识别出来的
昵称不火
- 粉丝: 43
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功