www.pudn.com > PCA-SIFT.rar > pca.m


function [meanvec, P] = pca(fn, numcomps)
patchsize = 41;
patchlen = patchsize*patchsize;

if nargin < 2
   error( 'Not enough input arguments.' );
end

disp('Reading patch file.');

fid = fopen(fn, 'r');
array = fscanf(fid, '%d', [patchlen, inf]);

disp('Computing covariance matrix');
meanvec = mean(array, 2);
meanarray = repmat(meanvec, 1, size(array,2));
A = array-meanarray;
covA = A*A';

disp('Computing principle components.');
[V, D] = eig(covA);

P = V(:, (size(V, 2) - numcomps + 1) : size(V, 2));
P = fliplr(P);

figure(3);
plot(flipud(diag(D)));