load faceData.mat load eigenFaceResult.mat % Load A2, eigVec, cumVarPercent, rowDim, colDim groundTruth=ones(10,1)*(1:40); groundTruth=groundTruth(:)'; % Create the groundtruth dim=28; % Take the first 28 eigenvectors A2=A2(1:dim, :); eigVec2=eigVec(:, 1:dim); % === Compute the nearest neighbors in the face space imageNum=size(A2,2); for i=1:imageNum query=A2(:,i); distance=distPairwise(query, A2); distance(i)=inf; [sortDistance, sortIndex]=sort(distance); misclassifiedData(i).nearestIndex=sortIndex; misclassifiedData(i).distance=sortDistance; misclassifiedData(i).miss=0; if groundTruth(i)~=groundTruth(sortIndex(1)) misclassifiedData(i).miss=1; end end missIndex=find([misclassifiedData.miss]); missNum=length(missIndex); n=7; % === Display the query and the nearest-neighbor faces for i=1:missNum faceIndex=missIndex(i); subplot(missNum, n+1, 1+(i-1)*(n+1)); imagesc(faceData(faceIndex).image); axis image title(sprintf('Query %d', i)); for j=1:n subplot(missNum, n+1, 1+j+(i-1)*(n+1)); imagesc(faceData(misclassifiedData(faceIndex).nearestIndex(j)).image); axis image title(sprintf('d=%.2f', misclassifiedData(faceIndex).distance(j))); end end colormap(gray); h=findobj(0, 'type', 'axes'); set(h, 'xticklabel', ''); set(h, 'yticklabel', '');