人臉識別圖像處理——PCA

本科論文作的是人臉識別,對一些算法進行復習。。。算法

概念spa

PCA (主成分分析算法)主要用於減小數據集的維數,同時保持數據集中方差最大的貢獻。(個人理解是,圖像處理時,數據量太大,一般須要下降數據維數,可是又但願保留貢獻大的特徵數據,PCA就是保留主要成分的降維算法)。人臉識別中,利用PCA算法構建特徵臉。code

算法實現流程orm

 PCA降維過程:blog

一、每一個樣本(一張人臉圖像 92*112=10304)做爲一個行向量,全部樣本(200張人臉圖像)共同構建成一個矩陣(200x10304)io

二、求矩陣的協方差矩陣(協方差簡單的說就是兩個維度的相關性的度量,協方差矩陣是每兩個維度的協方差組成的一個矩陣)圖像處理

三、求協方差矩陣的特徵值和特徵向量ast

四、將特徵向量按特徵值大小組合成一個映射矩陣,取前k列(或k行)做爲最終映射矩陣。(n就是你要保留的維度數)function

五、映射矩陣乘以原始數據構成的矩陣,達到降維效果。class

快速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');
相關文章
相關標籤/搜索