%
原型百分比
%函數pca(路徑、訓練列表、子數據)
%
%使用示例
% PCA(' C:/FERET _ normalized/',trainList500Imgs,200);
%
%壹般描述
%實現了標準的Turk-Pentland Eigenfaces方法。作為決賽
% result,此函數將pcaProj矩陣與所有圖像壹起保存到磁盤
%投影到由PCA找到的亞次元空間上。
%
%引用
用於識別的特征臉,認知雜誌
%神經科學,第3卷,第1號,第71-86頁
%
% M.A. Turk,A.P. Pentland,使用特征臉的人臉識別,程序
%的IEEE計算機視覺和模式識別會議,
% 3-6 6月1991,美國夏威夷毛伊島,第586-591頁
%
%
%輸入:
% path-FERET數據庫中標準化圖像的完整路徑
% trainList -用於訓練的圖像列表。名字應該是
%不帶擴展名和。將自動添加pgm
% subDim -要保留的維數(所需的子空間
%維度)。如果此參數被忽略,最大
%非零維度將被保留,即(訓練圖像的數量)- 1
%
%輸出:
%函數將生成以下輸出並保存到磁盤:
% DATA - matrix,其中每壹列都是壹個經過矢量整形的圖像
% -這個矩陣的大小是(像素數)x(圖像數),uint8
% imSpace -與數據相同,但只是訓練集中的圖像
% psi -平均臉(訓練圖像的)
% zeroMeanSpace -從imSpace中的每壹行減去平均面
% pcaEigVals -特征值
% w -低維PCA子空間
% pcaProj -投影到亞維空間的所有圖像
%
%註釋/評論
% *下列文件必須與該函數位於同壹路徑
%或Matlab路徑中的某處:
% 1.包含所有3816 FERET圖像的列表
%
% **所得子空間的每個維度都被歸壹化為單位長度
%
% ***使用Matlab 7開發
%
%
%修訂歷史記錄
% -
%
%相關功能(另請參見)
% createDistMat,feret
%
%大約
%創建時間:2005年9月3日
%上次更新:-
%修訂版:1.0
%
%作者:克雷西米爾·德拉奇
% mailto:kdelac@ieee.org
% URL:
%
%當發表壹篇論文作為使用此代碼進行的研究的結果時
%或其任何部分,請參考以下文件:
%德拉奇k,格吉奇m,格吉奇s,獨立比較研究的主成分分析,獨立成分分析和線性判別分析
FERET數據集上的%,國際成像系統與技術雜誌,
%第15卷,2006年第5期,第252-260頁
%
%如果未給出子尺寸,則n - 1尺寸為
%保留,其中n是訓練圖像的數量
如果nargin & lt三
subDim = dim-1;
結束;
顯示(“”)
加載listAll
%常數
numIm = 3816;
數據矩陣的內存分配百分比
fprintf('創建數據矩陣\n ')
tmp = imread([path char(listAll(1))'。PGM ']);
[m,n] =大小(tmp);%圖像大小-稍後也會用到!!!
DATA = uint8(零(m*n,numIm));分配的內存百分比
清除str tmp
%創建數據矩陣
對於i = 1 : numIm
im = imread ( [path char(listAll(i))'。PGM ']);
DATA(:,I)= shape(im,m*n,1);
結束;
保存數據資料;
清除im;
%創建訓練圖像空間
fprintf('創建訓練圖像空間\n ')
dim =長度(train list);
imSpace = zeros (m*n,dim);
對於i = 1 : dim
index = strmatch (trainList(i),list all);
imSpace(:,i) = DATA(:,index);
結束;
保存imSpace imSpace
清除數據;
%從訓練圖像計算平均臉
fprintf('零均值\n ')
psi = mean(double(im space '))';
保存psi psi
%零均值
zeroMeanSpace = zeros(size(im space));
對於i = 1 : dim
zeroMeanSpace(:,i) = double(imSpace(:,I))-psi;
結束;
保存zeroMeanSpace zeroMeanSpace
清除imSpace
% PCA
fprintf('PCA\n ')
l = zeroMeanSpace ' * zeroMeanSpace;%土耳其-彭特蘭詭計(零件1)
[eigVecs,EIG vals]= EIG(L);
對角線= diag(EIG vals);
[對角線,索引] = sort(對角線);
index = flip ud(index);
pcaEigVals = zeros(size(EIG vals));
對於i = 1 : size(eigVals,1)
pcaEigVals(i,i) = eigVals(index(i),index(I));
pcaEigVecs(:,i) = eigVecs(:,index(I));
結束;
pcaEigVals = diag(pcaEigVals);
pcaEigVals = pcaEigVals/(dim-1);
pcaEigVals = pcaEigVals(1:subDim);%僅保留最大的子項目
pcaEigVecs = zeroMeanSpace * pcaEigVecs;%土耳其-彭特蘭騙局(第二部分)
保存pcaEigVals pcaEigVals
單位長度標準化百分比
fprintf('正常化\n ')
對於i = 1 : dim
pcaEigVecs(:,i) = pcaEigVecs(:,i) / norm(pcaEigVecs(:,I));
結束;
%維度減少。
fprintf('創建低維子空間\n ')
w = pcaEigVecs(:,1:subDim);
保存w w
清除w;
%從所有圖像中減去平均臉
加載數據;
負載psi
zeroMeanDATA = zeros(size(DATA));
對於i = 1 : size(DATA,2)
zeroMeanDATA(:,i) = double(DATA(:,I))-psi;
結束;
清除psi
清除數據;
%將所有圖像投影到新的低維子空間(w)
fprintf('將所有圖像投影到新的低維子空間上\n ')
負載w;
pcaProj = w ' * zeroMeanDATA
清除w;
清除zeroMeanDATA
保存pcaProj pcaProj