当前位置:编程学习 > Matlab >>

急求基于pca人脸识别matlab程序的一些指导

function pca (path, trainList, subDim) if nargin < 3 subDim = dim - 1; end; disp(' ') load listAll; % Constants numIm = 3816; % Memory allocation for DATA matrix fprintf('Creating DATA matrix\n') tmp = imread ( [path char(listAll(1)) '.pgm'] ); [m, n] = size (tmp); % image size - used later also!!! DATA = uint8 (zeros(m*n, numIm)); % Memory allocated clear str tmp; % Creating DATA matrix for i = 1 : numIm im = imread ( [path char(listAll(i)) '.pgm'] ); DATA(:, i) = reshape (im, m*n, 1); end; save DATA DATA; clear im; % Creating training images space fprintf('Creating training images space\n') dim = length (trainList); imSpace = zeros (m*n, dim); for i = 1 : dim index = strmatch (trainList(i), listAll); imSpace(:, i) = DATA(:, index); end; save imSpace imSpace; clear DATA; % Calculating mean face from training images fprintf('Zero mean\n') psi = mean(double(imSpace'))'; save psi psi; % Zero mean zeroMeanSpace = zeros(size(imSpace)); for i = 1 : dim zeroMeanSpace(:, i) = double(imSpace(:, i)) - psi; end; save zeroMeanSpace zeroMeanSpace; clear imSpace; % PCA fprintf('PCA\n') L = zeroMeanSpace' * zeroMeanSpace; % Turk-Pentland trick (part 1) [eigVecs, eigVals] = eig(L); diagonal = diag(eigVals); [diagonal, index] = sort(diagonal); index = flipud(index); pcaEigVals = zeros(size(eigVals)); for i = 1 : size(eigVals, 1) pcaEigVals(i, i) = eigVals(index(i), index(i)); pcaEigVecs(:, i) = eigVecs(:, index(i)); end; pcaEigVals = diag(pcaEigVals); pcaEigVals = pcaEigVals / (dim-1); pcaEigVals = pcaEigVals(1 : subDim); % Retaining only the largest subDim ones pcaEigVecs = zeroMeanSpace * pcaEigVecs; % Turk-Pentland trick (part 2) save pcaEigVals pcaEigVals; % Normalisation to unit length fprintf('Normalising\n') for i = 1 : dim pcaEigVecs(:, i) = pcaEigVecs(:, i) / norm(pcaEigVecs(:, i)); end; % Dimensionality reduction. fprintf('Creating lower dimensional subspace\n') w = pcaEigVecs(:, 1:subDim); save w w; clear w; % Subtract mean face from all images load DATA; load psi; zeroMeanDATA = zeros(size(DATA)); for i = 1 : size(DATA, 2) zeroMeanDATA(:, i) = double(DATA(:, i)) - psi; end; clear psi; clear DATA; % Project all images onto a new lower dimensional subspace (w) fprintf('Projecting all images onto a new lower dimensional subspace\n') load w; pcaProj = w' * zeroMeanDATA; clear w; clear zeroMeanDATA; save pcaProj pcaProj; 这个程序运行时总有毛病,希望大神们帮忙指导一下。我QQ214883996
答案:你的路径还有训练图片,测试图片都没有定义啊,肯定不能运行啊.
其他:princomp你可以看下这个函数,matlab提供的pca函数~
而且你也可以查下K-L变换和svd,希望对你有帮助吧,程序是看不太明白。 

上一个:matlab中输出
下一个:如何用matlab画二维方势阱的波形图和概率密度图

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,