clc % 清屏
clear all; % 删除workplace变量
close all; % 关掉显示图形窗口
images=[ ];
M_train=3;%表示人脸
N_train=5;%表示方向
sample=[];
pixel_value=[];
sample_number=0;
for j=1:N_train
for i=1:M_train
%读取图像,连接字符串形成图像的文件名。
str=strcat('Images\',num2str(i),'_',num2str(j),'.bmp');
img= imread(str);
[rows cols]= size(img);%获得图像的行和列值。
img_edge=edge(img,'Sobel');
%由于在分割图片中,人脸的眼睛部分位置变化比较大,边缘检测效果好
sub_rows=floor(rows/6);%最接近的最小整数,分成6行
sub_cols=floor(cols/8);%最接近的最小整数,分成8列
sample_num=M_train*N_train;%前5个是第一幅人脸的5个角度
sample_number=sample_number+1;
for subblock_i=1:8 %因为这还在i,j的循环中,所以不可以用i
block_num=subblock_i;
pixel_value(sample_number,block_num)=0;
for ii=sub_rows:(2*sub_rows)
for jj=(subblock_i-1)*sub_cols+1:subblock_i*sub_cols
pixel_value(sample_number,block_num)=pixel_value(sample_number,block_num)+img_edge(ii,jj);
end
end
end
end
end
%将特征值转换为小于1的值
max_pixel_value=max(pixel_value);
max_pixel_value_1=max(max_pixel_value);
for i=1:3
mid_value=10^i;
if(((max_pixel_value_1/mid_value)>1)&&((max_pixel_value_1/mid_value)<10))
multiple_num=1/mid_value;
pixel_value=pixel_value*multiple_num;
break;
end
end
% T 为目标矢量
t=zeros(3,sample_number);
%因为有五类,所以至少用3个数表示,5介于2的2次方和2的3次方之间
for i=1:sample_number
% if((mod(i,5)==1)||(mod(i,5)==4)||(mod(i,5)==0))
if(i<=3)||((i>9)&&(i<=12))||((i>12)&&(i<=15))
t(1,i)=1;
end
%if((mod(i,5)==2)||(mod(i,5)==4))
if((i>3)&&(i<=6))||((i>9)&&(i<=12))
t(2,i)=1;
end
%if((mod(i,5)==3)||(mod(i,5)==0))
if((i>6)&&(i<=9))||((i>12)&&(i<=15))
t(3,i)=1;
end
end
% NEWFF——生成一个新的前向神经网络
% TRAIN——对 BP 神经网络进行训练
% SIM——对 BP 神经网络进行仿真
% 定义训练样本
% P 为输入矢量
P=pixel_value'
% T 为目标矢量
T=t
size(P)
size(T)
% size(P)
% size(T)
% 创建一个新的前向神经网络
net_1=newff(minmax(P),[10,3],{'tansig','purelin'},'traingdm')
% 当前输入层权值和阈值
inputWeights=net_1.IW{1,1}
inputbias=net_1.b{1}
% 当前网络层权值和阈值
layerWeights=net_1.LW{2,1}
layerbias=net_1.b{2}
% 设置训练参数
net_1.trainParam.show = 50;
net_1.trainParam.lr = 0.05;
net_1.trainParam.mc = 0.9;
net_1.trainParam.epochs = 10000;
net_1.trainParam.goal = 1e-3;
% 调用 TRAINGDM 算法训练 BP 网络
[net_1,tr]=train(net_1,P,T);
% 对 BP 网络进行仿真
A = sim(net_1,P);
% 计算仿真误差
E = T - A;
MSE=mse(E)
x=[0.14 0 1 1 0 1 1 1.2]';
sim(net_1,x)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于MATLAB利用BP神经网络实现人脸朝向判断.zip,详细内容及运行结果可以参考文章:https://blog.csdn.net/didi_ya/article/details/130438268
资源推荐
资源详情
资源评论
收起资源包目录
基于MATLAB的人脸朝向判断.zip (51个子文件)
main.m 3KB
Images
9_5.bmp 173KB
10_2.bmp 173KB
9_4.bmp 173KB
5_1.bmp 173KB
7_5.bmp 173KB
2_4.bmp 173KB
3_2.bmp 173KB
4_4.bmp 173KB
10_5.bmp 173KB
6_1.bmp 173KB
6_4.bmp 173KB
6_3.bmp 173KB
1_3.bmp 173KB
2_5.bmp 173KB
8_5.bmp 173KB
1_2.bmp 173KB
4_2.bmp 173KB
9_3.bmp 173KB
6_2.bmp 173KB
7_1.bmp 173KB
1_5.bmp 173KB
10_3.bmp 173KB
5_4.bmp 173KB
6_5.bmp 173KB
1_4.bmp 173KB
3_3.bmp 173KB
10_4.bmp 173KB
5_5.bmp 173KB
7_2.bmp 173KB
5_2.bmp 173KB
3_5.bmp 173KB
9_2.bmp 173KB
3_4.bmp 173KB
4_5.bmp 173KB
2_1.bmp 173KB
5_3.bmp 173KB
8_3.bmp 173KB
3_1.bmp 173KB
4_1.bmp 173KB
2_3.bmp 173KB
10_1.bmp 173KB
8_4.bmp 173KB
8_2.bmp 173KB
9_1.bmp 173KB
1_1.bmp 173KB
7_3.bmp 173KB
7_4.bmp 173KB
2_2.bmp 173KB
8_1.bmp 173KB
4_3.bmp 173KB
共 51 条
- 1
资源评论
- 伽利略略略略2024-02-09怎么能有这么好的资源!只能用感激涕零来形容TAT...
- cxy_ye2023-12-08内容与描述一致,超赞的资源,值得借鉴的内容很多,支持!
wendy_ya
- 粉丝: 3w+
- 资源: 202
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功