码迷,mamicode.com
首页 > 其他好文 > 详细

人脸识别图像处理——PCA

时间:2015-04-17 09:36:56      阅读:705      评论:0      收藏:0      [点我收藏+]

标签:

本科论文做的是人脸识别,对一些算法进行复习。。。

概念

PCA (主成分分析算法)主要用于减少数据集的维数,同时保持数据集中方差最大的贡献。(我的理解是,图像处理时,数据量太大,通常需要降低数据维数,但是又希望保留贡献大的特征数据,PCA就是保留主要成分的降维算法)。人脸识别中,利用PCA算法构建特征脸。

算法实现流程

 PCA降维过程:

1、每个样本(一张人脸图像 92*112=10304)作为一个行向量,所有样本(200张人脸图像)共同构建成一个矩阵(200x10304)

2、求矩阵的协方差矩阵(协方差简单的说就是两个维度的相关性的度量,协方差矩阵是每两个维度的协方差组成的一个矩阵)

3、求协方差矩阵的特征值和特征向量

4、将特征向量按特征值大小组合成一个映射矩阵,取前k列(或k行)作为最终映射矩阵。(n就是你要保留的维度数)

5、映射矩阵乘以原始数据构成的矩阵,达到降维效果。

快速PCA:

样本矩阵Znxd中的每个样本减去样本平均值m后的矩阵,则散布矩阵S(就是协方差矩阵)为(ZTZ)dxd。现在考虑矩阵R=(ZZT)nxn,在本文中的人脸识别系统,n=200,d=10304,d远远大于n,但他们有相同的特征值。

         设n为列向量v是R的特征值f对应的特征向量,则有:(ZZT)v=fv

         上式两边同时左乘ZT,并应用矩阵乘法结合律得:(ZTZ)(ZTv)=f(ZTv)

        ZTv散布矩阵S的特征值f对应的特征向量e=ZTv。因此,我们可以计算小矩阵R=(ZZT)nxn的特征向量v,之后左乘ZT得到散布矩阵S的特征向量 ZTv。

代码

function [pcaA V] = fastPCA( A, k )
% 快速PCA
%
% 输入:A --- 样本矩阵,每行为一个样本
%      k --- 降维至 k 维
%
% 输出:pcaA --- 降维后的 k 维样本特征向量组成的矩阵,每行一个样本,列数 k 为降维后的样本特征维数
%      V --- 主成分向量

[r c] = size(A);

% 样本均值
meanVec = mean(A);

%DASF
% 计算协方差矩阵的转置 covMatT(Z 200x10304 ,Z‘ 10304x200)
Z = (A-repmat(meanVec, r, 1));
covMatT = Z * Z;

% 计算 covMatT 的前 k 个特征值和特征向量(10304xk)
[V D] = eigs(covMatT, k);

% 得到协方差矩阵 (covMatT) 的特征向量
V = Z * V;

% 特征向量归一化为单位特征向量
for i=1:k
    V(:,i)=V(:,i)/norm(V(:,i));
end

% 线性变换(投影)降维至 k 维(200xk)
pcaA = Z * V;

% 保存变换矩阵 V 和变换原点 meanVec
save(Mat/PCA.mat, V, meanVec);

 

人脸识别图像处理——PCA

标签:

原文地址:http://www.cnblogs.com/lilanhua/p/4432293.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!