模式识别实验之PCA人脸识别

一、实验目的

1.通过实验加深对于PCA人脸识别过程的理解。
2.通过编程进一步提高对图像、特征向量等概念的理解。

二、实验原理

PCA方法实现人脸识别,PCA的思想在这里就不详细论述了。

三、实验步骤

1.人脸识别图像库中包含40个人的头像图片,每人10幅。将400张图像分成两组,每个人的前五张照片作为训练图像,后五张作为测试图像。读入图像,并对图像数据进行处理。
2.采用PCA方法实现本征脸方法,对特征进行降维。
3.对训练图像进行重构,观察当保留特征维数不同时,重构效果的差异。
4.对测试图像进行判别。对测试图像进行预处理,根据本征脸计算重构系数,与每一幅本征脸图像的重构系数进行比较,根据最小距离进行图像类别的判别,实现人脸识别。

四、matlab编程过程详解

1、PCA人脸识别的基本流程

在这里插入图片描述
从上图中可以看出PCA人脸识别分为以下几个阶段:特征提取、构造特征空间、投影计算、分类器决策,我们的程序就是根据流程图所示编写。

2、读入ROL库数据

%测试数据:40人,每人10张照片。每人取前train_num张照片作为训练集,后(10-train_num)张照片作为测试集。
clear;
clc;
train_num=5;

%计算特征脸并创建特征空间
imdata=zeros(112*92,40*train_num);
for i=1:40    
    for j=1:train_num  
        addr=strcat('I:/模式识别/实验四/1107/orl_faces/s',num2str(i),'/',num2str(j),'.pgm');
        a=imread(addr);%从地址中读入图像
        b=a(1:112*92); %把图像a矩阵按列顺序转为行向量b
        imdata(:,train_num*(i-1)+j)=b'; %把b的转置矩阵存放到imdata矩阵的第ph*(i-1)+j列
    end
end

3、PCA特征提取

3.1得到训练集的平均脸。
首先我们需要计算这个训练集的平均脸。

%计算平均脸并显示
average_face=mean(imdata,2); %按行求平均mean(a,2)  按列mean(a)
Average_face=reshape(average_face,112,92);%[112*92,1]的脸灰度数据转成[112,92]
figure;
subplot(1,1,1);
imshow(Average_face,[]);%imshow(I,[]) 显示灰度图像 I,根据 I 中的像素值范围对显示进行转换。
title(strcat('40*5张训练样本的平均脸'));
clear i j a b addr 

运行后得到下图
在这里插入图片描述
这就是该库中的平均脸,平均脸和样本库有很大的关系,不同数据库得到的平均脸是不一样的。
3.2计算协方差矩阵并得到特征向量。

%图像预处理:减去平均均值
immin=zeros(112*92,40*train_num);
for i=1:40*train_num  
    immin(:,i) = imdata(:,i)-average_face;
end
clear i 
%计算协方差矩阵
%W=immin*immin';%dxn*nxd =dxd,由N*N降为d*d 
W=immin'*immin; %n*d x d*n= n*n 较小
%计算特征向量与特征值(向量)
[V,D]=eig(W)
  • 14
    点赞
  • 189
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值