%用KPCA进行人脸识别的Matlab代码
global h_axes1;
global h_axes2;
global edit2;
h_f=figure('name','KPCA人脸识别系统','position',[300,200,600,400]);
%clf reset;%clf 清除当前的图像的所有自图像,Reset重新设置图像的目标属性为默认值
set(h_f,'defaultuicontrolfontsize',12);
set(h_f,'defaultuicontrolfontname','宋体');
h_axes1=axes('parent',h_f,'position',[0.2,0.28,0.25,0.56],'Unit','normalized','visible','on');
h_axes2=axes('parent',h_f,'position',[0.55,0.28,0.25,0.56],'Unit','normalized','visible','on');
figcolor=get(h_f,'color');
edit2=uicontrol(h_f,'style','text','position',[150,330,300,40],...
'backgroundcolor',figcolor);%动态变化提示
button_open=uicontrol(h_f,'style','push','string','选择照片'...
,'position',[250 40 100 50],'callback','GUIopen');
button_recg=uicontrol(h_f,'style','push','string','测试准确率',...
'position',[100 40 100 50],'callback','face');
button_match=uicontrol(h_f,'style','push','string','KPCA图像识别',...
'position',[400 40 100 50],'callback','GUIrecg');
set(edit2,'string','读取训练数据并训练....')
drawnow
allsamples=[];%所有训练图像
for i=1:40
for j=6:10
a=imread(strcat('Data\s',num2str(i),'\',num2str(j),'.pgm'));
%a=imread(strcat('./Data/s',num2str(i),'/',num2str(j),'.jpg'));
b=a(1:112*92); % b是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右
b=double(b);
allsamples=[allsamples; b]; % allsamples 是一个200 * 10304 矩阵,allsamples 中每一行数据代表一张图片。
end
end
cov_size=size(allsamples,1);
train_num=cov_size;
patterns=allsamples;
for i=1:cov_size
for j=i:cov_size
K(i,j) =(patterns(i,:)*patterns(j,:)'+1)^0.7;
K(j,i) = K(i,j); %核函数是对称的
end
end
unit = ones(cov_size, cov_size)/cov_size;
K_n = K - unit*K - K*unit + unit*K*unit; %改变核矩阵以实现数据在高维空间去均值
[evecs,evals] = eig(K_n); %求去均值后的核矩阵的特征值、特征向量
evals = real(diag(evals)); %取特征值实部
[l1,l2]=sort(-1*evals');
evals=l1*(-1);
evecs=evecs(:,l2); % 取排序后特征值对应的特征向量
for i=1:cov_size, %因为K为满秩矩阵
evecs(:,i) = evecs(:,i)/(sqrt(evals(i))); %这样可以使特征空间中协方差矩阵C的特征向量归一化
end
% 90%的贡献率
dsum = sum(evals);
dsum_extract = 0;
p = 0;
while( dsum_extract/dsum < 0.9)
p = p + 1;
dsum_extract = sum(evals(1:p));
end
max_ev=p;
unit_train = ones(train_num,cov_size)/cov_size;
for i=1:train_num,
for j=1:cov_size,
K_train(i,j) =(patterns(i,:)*patterns(j,:)'+1)^0.7;
end
end
K_train_n = K_train - unit_train*K - K_train*unit + unit_train*K*unit;
features = zeros(train_num, max_ev);
features = K_train_n * evecs(:,1:max_ev); % 训练样本在特征空间的投影
allcoor = features;
accu=0;
% 测试过程
for i=1:40
for j=1:5 %读入40 x 5 副测试图像
a=imread(strcat('Data\s',num2str(i),'\',num2str(j),'.pgm'));
%a=imread(strcat('./Data/s',num2str(i),'/',num2str(j),'.jpg'));
b=a(1:10304);
b=double(b);
unit_test = ones(1,cov_size)/cov_size;
K_test = zeros(1,cov_size);
for j=1:cov_size,
K_test(j) = (b*patterns(j,:)'+1)^0.7;
end
K_test_n = K_test - unit_test*K - K_test*unit + unit_test*K*unit; % 去均值
test_features = zeros(1, max_ev);
test_features = K_test_n * evecs(:,1:max_ev);
tcoor=test_features; %计算坐标,是1×p阶矩阵
for k=1:200
mdist(k)=norm(tcoor-allcoor(k,:)); %求2范数
end;
[dist,index2]=sort(mdist);
class=ceil( index2(1)/5 );
if class==i
accu=accu+1;
end;
end;
end;
accuracy=accu/200;%输出识别率
set(edit2,'string','测试完成!')
drawnow
msgbox(['识别准确率:',num2str(accuracy*100),'%。'])
global h_axes1
[filename,pathname]=uigetfile({'*.pgm';'*.jpg';'*.tif';'*.*'},'请选择一张用于识别的照片');
if filename==0
msgbox('请选择一张照片文件')
else
filepath=[pathname,filename];
axes(h_axes1);
imshow(imread(filepath));
end
disp(filename)
global h_axes1
global h_axes2
global edit2
set(edit2,'string','读取待识别图片......')
drawnow
img=getimage(h_axes1);%获得之前选中的照片的信息
if isempty(img)
msgbox('请先选择一张图片!')
end
% 测试图片
set(edit2,'string','识别中......')
drawnow
pause(5)
%a=imread(strcat('Data\s',num2str(i),'\',num2str(j),'.pgm'));
%a=imread(strcat('./Data/s',num2str(i),'/',num2str(j),'.jpg'));
a=img;
b=a(1:10304);
b=double(b);
unit_test = ones(1,cov_size)/cov_size;
K_test = zeros(1,cov_size);
for j=1:cov_size,
K_test(j) = (b*patterns(j,:)'+1)^0.7;
end
K_test_n = K_test - unit_test*K - K_test*unit + unit_test*K*unit; % 去均值
test_features = zeros(1, max_ev);
test_features = K_test_n * evecs(:,1:max_ev);
size(test_features)
tcoor=test_features; %计算坐标,是1×p阶矩阵
for k=1:200
mdist(k)=norm(tcoor-allcoor(k,:)); %求2范数
end;
[dist,index2]=sort(mdist);
class=ceil( index2(1)/5 );
set(edit2,'string','识别完成!')
drawnow
axes(h_axes2);
imshow(imread(['Data\s',num2str(class),'\1.pgm']));
msgbox(['样本识别为第',num2str(class),'个人'])
figure
B=reshape(test_features',112,92);
imshow(B,[])
%msgbox(['样本识别为第',num2str(class),'个人'])
p;
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1、资源内容:基于Matlab实现PCA与KPCA的SVM人脸识别系统+GUI操作界面的毕业设计(源码+数据集).rar 2、适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用。 3、更多仿真源码和数据集下载列表(自行寻找自己需要的):https://blog.csdn.net/m0_62143653?type=download 4、免责声明:本资源作为“参考资料”而不是“定制需求”不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试,能够自行添加功能修改代码。由于作者大厂工作较忙,不提供答疑服务,如不存在资源缺失问题概不负责,谢谢理解。
资源推荐
资源详情
资源评论
收起资源包目录
基于Matlab实现PCA与KPCA的SVM人脸识别系统+GUI操作界面的毕业设计(源码+数据集).rar (812个子文件)
.DS_Store 12KB
kpca.m 5KB
faceGui.m 4KB
ReadFace.m 1KB
fastPCA.m 771B
multiSVMtrain.m 395B
multiSVM.m 364B
scaling.m 341B
kfun_rbf.m 242B
recognize.mat 11.2MB
recognize.mat 4.18MB
6.pgm 10KB
7.pgm 10KB
8.pgm 10KB
4.pgm 10KB
3.pgm 10KB
1.pgm 10KB
1.pgm 10KB
3.pgm 10KB
4.pgm 10KB
2.pgm 10KB
4.pgm 10KB
9.pgm 10KB
2.pgm 10KB
6.pgm 10KB
9.pgm 10KB
5.pgm 10KB
8.pgm 10KB
7.pgm 10KB
10.pgm 10KB
10.pgm 10KB
8.pgm 10KB
7.pgm 10KB
5.pgm 10KB
6.pgm 10KB
8.pgm 10KB
3.pgm 10KB
2.pgm 10KB
1.pgm 10KB
10.pgm 10KB
3.pgm 10KB
6.pgm 10KB
4.pgm 10KB
9.pgm 10KB
5.pgm 10KB
2.pgm 10KB
1.pgm 10KB
7.pgm 10KB
8.pgm 10KB
7.pgm 10KB
2.pgm 10KB
5.pgm 10KB
10.pgm 10KB
9.pgm 10KB
4.pgm 10KB
3.pgm 10KB
5.pgm 10KB
1.pgm 10KB
9.pgm 10KB
4.pgm 10KB
9.pgm 10KB
2.pgm 10KB
8.pgm 10KB
2.pgm 10KB
7.pgm 10KB
5.pgm 10KB
3.pgm 10KB
8.pgm 10KB
6.pgm 10KB
1.pgm 10KB
4.pgm 10KB
9.pgm 10KB
5.pgm 10KB
7.pgm 10KB
3.pgm 10KB
7.pgm 10KB
10.pgm 10KB
10.pgm 10KB
6.pgm 10KB
6.pgm 10KB
4.pgm 10KB
5.pgm 10KB
1.pgm 10KB
3.pgm 10KB
2.pgm 10KB
1.pgm 10KB
8.pgm 10KB
10.pgm 10KB
9.pgm 10KB
10.pgm 10KB
5.pgm 10KB
9.pgm 10KB
8.pgm 10KB
3.pgm 10KB
1.pgm 10KB
4.pgm 10KB
6.pgm 10KB
10.pgm 10KB
6.pgm 10KB
7.pgm 10KB
共 812 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
Matlab仿真实验室
- 粉丝: 4w+
- 资源: 2431
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于二阶自抗扰ADRC的轨迹跟踪控制,对车辆的不确定性和外界干扰具有一定抗干扰性,基于carsim和simulink仿真 跟踪轨迹为双移线,效果良好,有对应复现资料,是学习自抗扰技术快速入门很好的资料
- 基于python的网页自动化工具项目全套技术资料100%好用.zip
- MATLAB【逆变器二次调频模型】 微电网分布式电源逆变器DROOP控制二次调频模型,加入二次控制实现二次调频控制,及二次调压控制,程序可实现上图功能,工况有所改变 需要matlab2021A版
- 抢购软件:快速复制信息
- 单机无穷大系统发生各类(三相短路,单相接地,两相接地,两相相间短路)等短路故障,各类(单相断线,两相断线,三相断线)等断线故障,暂态稳定仿真分析
- 微信文章爬虫项目全套技术资料100%好用.zip
- 基于动态窗口算法的AGV仿真避障 可设置起点目标点,设置地图,设置移动障碍物起始点目标点,未知静态障碍物 动态窗口方法(DynamicWindowApproach) 是一种可以实现实时避障的局部规划算
- Power Quality Disturbance:基于MATLAB Simulink的各种电能质量扰动仿真模型,包括配电线路故障、感应电机启动、变压器励磁、单相 三相非线性负载等模型,可用于模拟各种
- 数据爬虫项目全套技术资料100%好用.zip
- 聊天系统项目全套技术资料100%好用.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页