PCA人脸识别

PCA人脸识别(带matlab程序)

前几天上数字图像处理的时候学习了PCA人脸识别,趁热打铁,做一些学习记录。PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。在人脸识别上面,用PCA的主要目的就是把原来维度很高的图像,提取图像的主要成分(用于识别的特征),去掉不重要的成分,使得可以用比较少的维度来表示图像,以方便进行图形识别。

一个非常不错的学习PCA资料PCA数学原理

看完这个应该对PCA 的原理有了更深刻的认识。

下面是matlab代码


%
%测试数据:40人,每人10张照片。每人取前ph张照片作为训练集,后(10-ph)张照片作为测试集。
clear;
clc;
ph=6;
%%
%第一步:计算特征脸并创建特征空间

tic %计算运行时间
%申请录入数据矩阵内存
imdata=zeros(112*92,40*ph);
for i=1:40    
    for j=1:ph  
%         addr=strcat('G:/orl_face/s',num2str(i),'/',num2str(j),'.pgm');
         addr=strcat('G:/orl_face/s',num2str(i),'/',num2str(j),'.pgm');
        a=imread(addr);%从地址中读入图像
        b=a(1:112*92); %把图像a矩阵按列顺序转为行向量b
        imdata(:,ph*(i-1)+j)=b'; %把b的转置矩阵存放到imdata矩阵的第ph*(i-1)+j列
    end; 
end;

%计算平均脸
 imaverage=mean(imdata,2); %按行求平均mean(a,2)  按列mean(a)
 %显示平均脸
 %向量矩阵化

    out=reshape(imaverage,112,92);
    figure;
    subplot(1,1,1);
    imshow(out,[]);
    title(strcat('MeanFace'));

clear i j a b addr 

%图像预处理
immin=zeros(112*92,40*ph);
for i=1:40*ph  
    %归一化处理,提升矩阵计算速度,但小数精度不够,会影响匹配率
    %immin(:,i) = (imdata(:,i)-imaverage)/col2medivation(imdata(:,i)-imaverage,112*92);
    %仅减去平均脸,不做归一化处理
    immin(:,i) = imdata(:,i)-imaverage;
end;
clear i imdata
%%
%计算协方差矩阵
%  W=immin*immin';%dxn*nxd =dxd 太大
k=32;
W=immin'*immin; %n*d x d*n= n*n 较小
%计算特征向量与特征值(向量)
[V,~]=eigs(W,k);%降到k维

%对特征向量进行排序
V=immin*V; %dxn*nxk=d*k
VT=
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值