基于PCA的人脸识别的Matlab实现代码
基于PCA的人脸识别算法
--Matlab
Face recognition
Based on PCA
目录
一.人脸识别简介...3
二.主元分析...3
三.原理说明...3
四.算法流程图...4
五.测试数据库...4
六.算法设计及测试...4
6.1训练阶段...4
6.2探究各特征值所占有的能量数...7
6.3 测试阶段...8
七.参考文献:...8
附录1. 基于PCA的人脸识别的Matlab实现代码...9
一.人脸识别简介
广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等;而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。
二.主元分析
三.原理说明
四.算法流程图
五.测试数据库
测试数据库为ORL_92x112,其中含40个人,每人10张图片,共400张图片。
六.算法设计及测试
6.1训练阶段
6.1.2 现在训练库里有m张人脸图片,把这些图片都表示成上述的向量形式,即d1,d2,。。。dm,把这m个向量取平均值得向量avg=(y1,y2......yn)。
6.1.4.矩阵A乘以A的逆矩阵A‘得A的协方差矩阵B,B的大小m×m,求B的特征向量。取最大的K个特征向量组成新的矩阵T,T的大小m×k。
6.1.6 用图片向量d乘以C得到图片向量d在特征脸的投影向量pn,有多少张图片就有多少个pn。pn的大小1×k
6.2探究各特征值所占有的能量数
6.2.1 第n个特征值占所有特征值之和的百分比 (特征值从小到大排列)。
6.2.2前n个特征值占所有特征值之和的百分比 (特征值从小到大排列)。
在实验中,要求保留90%的能量,所以当取前57个特征值得时候就可以满足要求了。
6.3测试阶段
6.3.1.一张新的图片也表示为d的向量,记为D,D的大小1×n
6.3.2. D乘以上面训练得到的特征脸C得到这个图片向量D在C下的投影向量P,p的大小1×k。
6.3.3.计算p与上面所有的pn的向量距离,与p最小的那个向量所对应的人脸图片跟这张新人脸图片最像。
运行程序后,将读取40个人的后5张图片,并进行比对,代码附录给出。
七.参考文献:
附录1.基于PCA的人脸识别的Matlab实现代码
function FaceRecognition
clear % calc xmean,sigma and its eigen decomposition
close all
allsamples=[];%所有训练图像
for i=1:40 for j=1:5 if(i<10)a=imread(strcat('E:\ORL_92x112\00',num2str(i),'0',num2str(j),'.bmp')); elsea=imread(strcat('E:\ORL_92x112\0',num2str(i),'0',num2str(j),'.bmp')); end b=a(1:112*92); % b是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右 b=double(b); allsamples=[allsamples; b]; % allsamples 是一个M * N 矩阵,allsamples 中每一行数据代表一张图片,其中M=200 end
end
samplemean=mean(allsamples); % 平均图片,1 × N
figure%平均图
imshow(mat2gray(reshape(samplemean,112,92)));
for i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; % xmean是一个M × N矩阵,xmean每一行保存的数据是“每个图片数据-平均图片”
end;
% figure%平均图
% imshow(mat2gray(reshape(xmean(1,:),112,92)));
sigma=xmean*xmean'; % M * M 阶矩阵
[v,d]=eig(sigma);
d1=diag(d);
[d2,index]=sort(d1); %以升序排序
cols=size(v,2);% 特征向量矩阵的列数for i=1:cols vsort(:,i) = v(:, index(cols-i+1) ); % vsort 是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量,每一列构成一个特征向量 dsort(i) = d1( index(cols-i+1) ); % dsort 保存的是按降序排列的特征值,是一维行向量
end %完成降序排列 %以下选择90%的能量
dsum = sum(dsort);
dsum_extract = 0;
p = 0;
while( dsum_extract/dsum < 0.9) p = p + 1; dsum_extract = sum(dsort(1:p));
end
a=1:1:200;
for i=1:1:200
y(i)=sum(dsort(a(1:i)) );
end
figure
y1=ones(1,200);
plot(a,y/dsum,a,y1*0.9,'linewidth',2);
grid
title('前n个特征特占总的能量百分比');
xlabel('前n个特征值');
ylabel('占百分比');
figure
plot(a,dsort/dsum,'linewidth',2);
grid
title('第n个特征特占总的能量百分比');
xlabel('第n个特征值');
ylabel('占百分比');
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 % add by wolfsky 就是下面两行代码,将训练样本对坐标系上进行投影,得到一个 M*p 阶矩阵allcoor
%
% for i=1:20
% figure%平均图
% b=reshape(base(:,i)',112,92);%
% imshow(mat2gray(b));
% endallcoor = allsamples * base; accu = 0; % 测试过程for i=1:40 for j=6:10 %读入40 x 5 副测试图像 if(i<10)if(j<10)a=imread(strcat('E:\ORL_92x112\00',num2str(i),'0',num2str(j),'.bmp')); elsea=imread(strcat('E:\ORL_92x112\00',num2str(i),num2str(j),'.bmp')); endelseif(j<10)a=imread(strcat('E:\ORL_92x112\0',num2str(i),'0',num2str(j),'.bmp')); elsea=imread(strcat('E:\ORL_92x112\0',num2str(i),num2str(j),'.bmp')); endend b=a(1:10304); b=double(b); tcoor= b * base; %计算坐标,是1×p阶矩阵 for k=1:200 mdist(k)=norm(tcoor-allcoor(k,:)); end; %三阶近邻 [dist,index2]=sort(mdist); class1=floor( index2(1)/5 )+1; class2=floor(index2(2)/5)+1; class3=floor(index2(3)/5)+1; if class1~=class2 && class2~=class3 class=class1; elseif class1==class2 class=class1; elseif class2==class3 class=class2; end; if class==i accu=accu+1; end; end;
end;
accuracy=accu/200 %输出识别率
基于PCA的人脸识别的Matlab实现代码相关推荐
- 人脸识别 pca matlab,基于PCA的人脸识别的Matlab实现代码
基于PCA的人脸识别算法 --Matlab Face recognition Based on PCA 目录 人脸识别技术是基于人的脸部特征,对输入的人脸图象或者视频流 . 首先判断其是否存在人脸 , ...
- 基于PCA的人脸检测(Matlab版代码)
花了几天,终于把matlab版的人脸检测运行成功了,虽然正确率不是很高,看着各种论文上的人脸检测正确率都出奇的高,我是不怎么相信的,有的论文连基于平均脸的人脸检测正确率都能达到98%,汗啊-- 也许 ...
- matlab做pca人脸识别,[转载]一个修改后的PCA进行人脸识别的Matlab代码,识
一个修改后的PCA进行人脸识别的Matlab代码,识别率达到88% % calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练 ...
- 2dpca的matlab代码,2DPCA人脸识别的matlab代码
[实例简介] 很好用的2DPCA人脸识别的matlab代码 [实例截图] [核心代码] 2dpcamatlab └── 2dpcamatlab ├── CreateDatabase.m ├── orl ...
- 基于 PCA 的人脸识别系统及人脸姿态分析
文章目录 1 PCA 1.1 原理 1.2 算法流程 1.2.1 零均值化 1.2.2 计算协方差矩阵 1.2.3 特征值和特征向量 1.2.4 降维得到 K 维特征 1.2.5 PCA 的优缺点 2 ...
- 基于PCA的人脸识别
基于PCA的人脸识别 实验简介 PCA算法分析 PCA实现具体步骤 构造特征空间 识别 PCA方法的优劣 优势 劣势 实验步骤 训练 测试 计算识别准确率 显示结果 核心代码 分组一 分组二 实验结果 ...
- 【CSDN下载】第三期:多AGV调度系统软件、基于PCA的人脸识别系统
为便于广大开发者对热门资源的下载需求,下载频道专为广大开发者开辟了推荐一周IT优质资源通道,以供开发者参考下载,同时欢迎大家上传优质资源并留言所需的资源,小编会汇总所需,及时奉上所求. 工具安装包系列 ...
- 基于PCA的人脸识别_Matlab实现(个人研读之后的一些总结)
以下是我在查阅相关文献之后的一些个人的总结,望大神们指正. 基于PCA的人脸识别 PCA简介 这是百度百科的解析: "对于一个训练集,100个对象模板,特征是10维,那么它可以建立一个100 ...
- 基于PCA的故障诊断方法(matlab)
1. PCA原理分析 PCA的原理主要是将原始数据进行降维.其具体工作原理参照:CodingLabs - PCA的数学原理 2. 数据预处理 训练数据集(只有正样本)为维数据,即有n个采样值,每个采样 ...
最新文章
- 何恺明等人新作:效果超ResNet,利用NAS方法设计随机连接网络 | 技术头条
- 【Coursera】经验风险最小化
- 19道小米运维面试题
- 思维构造——cf1090D
- 跟我学调试-必备神器:Postman
- H5调用手机摄像头,实时拍照上传(旧)
- MAC OS 烧录ISO文件到U盘
- python装饰器的顺序_python中装饰器的装饰顺序和执行顺序
- java退出登录_java实现注销登录
- 腾达u12如何安装linux驱动,解决Centos7 安装腾达U12无线网卡驱动问题
- 机器学习算法 07 —— 朴素贝叶斯算法(拉普拉斯平滑系数、商品评论情感分析案例)
- 破解PDF打开密码、复制限制
- 【Java例题】3.6	计算arcsin(x)的值
- 【SSL_2020.10.27】小biu闯关
- Python数据分析及可视化的基本环境
- [解读] GTN: Generative Teaching Networks
- AMBA总线协议AHB、APB、AXI对比分析
- dcs常用的冗余方式_dcs试题
- python中的与或非 | ^
- Python作业day2购物车
热门文章
- web前端之路 第一个脚印
- 拿捏大厂面试,2022最新版的Java面试突击班手册
- [Network licensing error: license fill“e:\maxplus2\license\license.dat“is missing or corrupted]解决方法
- QQ空间热修复思想学习总结
- LeetCode笔记:Biweekly Contest 33 比赛记录
- Tribon用户自定义属性综述
- Linux命令:tar压缩/解压包, zip/unzip
- 印记中文:Mdpress + 云开发 CMS 打造动态内容站点
- 11.4 实施定量风险分析
- GPS/LBS定位技术