基于matlab特征脸Eigenface算法的实现

  • 1.特征脸算法简介
  • 2.PCA
    • 2.1 什么是PCA
    • 2.2 PCA实现步骤(附matlab代码)
      • 2.2.1 前期准备
      • 2.2.2 具体步骤

1.特征脸算法简介

特征脸算法是将人脸从像素空间变换到另外一个空间,在另外一个空间做相似性的计算。特征量不能再像素空间直接进行相似性计算在于原像素空间中不同类别的图像在分布上很难用个简单的线或者面把他们切分开,然后如果变换到另一个空间,就可以很好的把他们分开了。这里我们用到的PAC(Principal Component Analysis)从而得到特征脸。

2.PCA

2.1 什么是PCA

PCA(principal components analysis)即主成分分析技术,又称主分量分析。主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。
在统计学中,主成分分析PCA是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用于减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。

2.2 PCA实现步骤(附matlab代码)

2.2.1 前期准备

接下来我们需要使用ORL Faces人脸数据库实现特征脸的提取,对于人脸数据库,大家可自行选择。

2.2.2 具体步骤

(1)获取数据,将图像的进行列拼接,然后合成一个大矩阵,该矩阵中每一列都是一个图像的列拼接。可以通过matlab实现如下:

humanNum=40;    %人数
trainNum=9;     %每个人的训练级人数
eigenFaceNum=20 %取特征向量数量
imgL=112;       %图像长宽
imgW=92;
faceData=zeros(imgL*imgW,trainNum*humanNum);%脸矩阵分配空间

对于图像的长宽获得,可以通过在matlab中导入图像后,点击查看图像的长宽。

我们需要将图像进行列拼接,每个图像将占据(imgW*imgL)*1,训练集图像为9,于是我们声明以上空间的数组。

for j=1:humanNumfor i=1:trainNumpath = ['F:\orl_faces\s',num2str(j),'\',num2str(i),'.pgm'];tempFace = imread(path);faceData(:,(j-1)*trainNum+i)=reshape(tempFace, [], 1);  %进行列向拼接end
end

(2)计算求每行图像的平均值,然后每一行减去该平均值,由于平均值是共同分量,减去可以将数据值减小,同时并不影响数据间的差值,对于后期的求特征值特征向量会更加简便。

%求平均脸
avgface=mean(faceData,2);%平均脸(一列)
%减去平均脸
A=faceData;
for i=1:humanNum*trainNumA(:,i)=A(:,i)-avgface;
end

(3)求特征值和特征向量

convT=A'*A;              %求协方差矩阵的转置 10304*10304
[Vs,Ds]= eig(convT);     %求特征向量,特征值
D=Ds;V=Vs;
Dtemp=abs(diag(D));       %转化成列向量
ind=find(Dtemp<1e-6);     %寻找0特征值Dtemp(ind)=[];            %去除相应的特征值
V(:,ind)=[];              %去除相应的特征向量[DD,ind]=sort(Dtemp,'descend');%将特征值从大到小排列V=V(:,ind);                    %将特征向量按特征值从大到小排列

(4)取特征向量,按理说特征向量越多,在后面的人脸识别中会更加准确。

%取前eigenFaceNum个特征向量
for i=1:eigenFaceNumVG(:,i)=V(:,i);
end

以上为PCA的主要步骤,接下来我们进行特征脸的显示。

EigenVectors=A*VG;     %将A向特征空间映射%转化成特征脸
for j=1:eigenFaceNumtempA=reshape(EigenVectors(:,j),112, 92);   %将平均脸数据构成平均脸图象if(j==1)eigenVectorsImg=tempA;elseeigenVectorsImg=[eigenVectorsImg,tempA];  %将特征脸拼接成一个图片end
end

测试集进行匹配,将数据分为测试集和训练集,大家可根据自己的人脸数据库中每个人物的图片数来分。识别率较低,就增加训练集,减少测试集。

% 一个图片进行匹配
s=5;
number=10;
path = ['F:\orl_faces\s',num2str(s),'\',num2str(number),'.pgm'];
comimg=imread(path);
comFaceData=reshape(comimg, [], 1);
comFaceData=double(comFaceData);
comFaceData=comFaceData-avgface;
W1=(comFaceData')*EigenVectors;   %计算特征区域的投影坐标distance=zeros(rows,1);
for i=1:rowstempW=W(i,:);distance(i)=pdist2(W1,tempW);
end
[m,index]=min(distance);         %在特征区域找最小距离
matchImg=reshape(faceData(:,index),112, 92);%匹配图片
matchNum=ceil(index/trainNum);figure(3)
subplot(1,2,1)
imshow(comimg,[]);
title(['被识别图片,来自第',num2str(s),"组人像"])
subplot(1,2,2)
imshow(matchImg,[]);
if(s==matchNum)title(['匹配图片成功,匹配第',num2str(matchNum),"组人像"])
elsetitle(['匹配图片失败,匹配第',num2str(matchNum),"组人像"])
end

基于matlab特征脸Eigenface算法的实现相关推荐

  1. 基于MATLAB的图像压缩感知 算法的实现

    摘要 获取项目源文件,联系Q:1415736481,可指导毕设,课设 数据压缩技术是提高无线数据传输速度的有效措施之一.传统的数据压缩技术是基于奈奎斯特采样定律进行采样,并根据数据本身的特性降低其冗余 ...

  2. 基于matlab的动态规划程序实现,基于MATLAB的动态规划常用算法的实现

    第7 卷 第4 期 2008 年12 月 太 原 师 范 学 院 学 报 (自然科学版) JOU RNAL O F TA IYUAN NORMAL UN IV ERSITY (N atural Sci ...

  3. r语言pls分析_基于R语言的PLS算法的实现解读.pptx

    基于R语言的PLS算法的实现及研究 目录 使用的开发工具 偏最小二乘的设计思想 基于R语言.MATLAB的偏最小二乘的实现 通径分析 测定系数 实验分析 使用的开发工具 R 语言(R是用于统计分析.绘 ...

  4. ML之SVM:基于Js代码利用SVM算法的实现根据Kaggle数据集预测泰坦尼克号生存人员

    ML之SVM:基于Js代码利用SVM算法的实现根据Kaggle数据集预测泰坦尼克号生存人员 目录 实验数据 设计思路​ 实现代码(部分代码) 实验数据 设计思路 实现代码(部分代码) /**js代码实 ...

  5. matlab写函数进行坐标正反算,基于matlab的坐标正反算

    <基于matlab的坐标正反算>由会员分享,可在线阅读,更多相关<基于matlab的坐标正反算(6页珍藏版)>请在人人文库网上搜索. 1.基于 matlab 的坐标正反算测量程 ...

  6. matlab高斯投影坐标,基于matlab的高斯投影正反算与相邻带坐标换算程序设计

    第 15 卷 第 2 期 中 国 水 运 Vol.15 No.2 2015 年 2 月 China Water Transport February 2015 收稿日期:2014-01-15 作者简介 ...

  7. 【印刷字符识别】基于matlab特征匹配英文印刷字符识别【含Matlab源码 310期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [印刷字符识别]基于matlab特征匹配英文印刷字符识别[含Matlab源码 310期] 获取代码方式2: 通过订阅紫极神光博客付费专栏 ...

  8. 心率变异性 matlab,心率变异性及其相关算法的实现.ppt

    心率变异性及其相关算法的实现 附加功能参考文献 附加功能 该算法除了可以计算心率变异性之外,还有以下2种附加功能: 对心率的正常与否进行判断,输出有心率正常.心动过速.心动过缓3种情况: 对心脏的早搏 ...

  9. matlab高斯正反算程序6,基于matlab的高斯投影正反算与相邻带坐标换算程序设计...

    第 卷 第 期 在 月 中 国 水 运 基于 的高斯投影正反算与相邻带坐标换 算程 序设计 徐 翰 ,周 强 波 (核 工 业 二 三 研 究所 ,湖 南 长 沙 ) 摘 要 :地 图投影方法众多 , ...

  10. matlab程序FP-tree,FP-Tree算法的实现

    在关联规则挖掘领域最经典的算法法是Apriori,其致命的缺点是需要多次扫描事务数据库.于是人们提出了各种裁剪(prune)数据集的方法以减少I/O开支,韩嘉炜老师的FP-Tree算法就是其中非常高效 ...

最新文章

  1. AJAX的post请求与上传文件
  2. 利用HTML中的XML数据岛记录浏览
  3. 贴片电阻上写着“0”,所谓的“零欧电阻”,在电子电路中的用处很大
  4. wordpress主题ajax,为自制WordPress主题/插件的后台设置页面添加ajax支持
  5. mac用python爬虫下载图片_利用Python爬虫采集mac电脑皮肤|简明python教程|python入门|python教程...
  6. OS函数:sleep-exit-wait
  7. float与double精度丢失问题
  8. BN(Batch Normalization)层原理与作用
  9. BZOJ 4807(車-高精度)
  10. 从学生到专家,C语言开发必读的8本书
  11. *Unity程序报错“缺少根元素msbuild\current\bin\microsoft.common.currentversion.targets“
  12. 我用php构建了魔兽世界服务器,只为证明php是世界上最好的语言
  13. 探秘 Containerd 容器中的 Shim 进程
  14. 离散数学——逻辑推理系统
  15. matlab函数积分怎么写,Matlab求分段函数的积分
  16. ESP8266/ESP32/nodeMcu/wemos D1 MINI开发板用TFT_eSPI库驱动ST7789(240*240)TFT显示屏
  17. 股价大跌、现金流承压,工业富联风光不再?
  18. ringbuffer的特别之处
  19. 11项关键先进制造技术解读!
  20. 小傻蛋的妹妹跟随小甲鱼学习Python的第十七节017

热门文章

  1. 理财产品的收益率也抵不上通货膨胀
  2. 劝学诗整理:安居不用架高堂,书中自有黄金屋。
  3. 微信小程序:蓝牙通讯,搜索、发送与接收
  4. WinDbg调试入门
  5. 小程序云开发点赞案例实现及环境vant插件配置等问题
  6. golang 开源项目
  7. 基于Pandas的股票数据分析
  8. HDU-4747 二分+线段树
  9. 安卓推送、android文本推送、安卓富媒体推送解决方案
  10. iOS开发之SEL用法