www.pudn.com > PCA(matlab).rar > feret.m, change:2007-01-06,size:5590b


function [FERET] = feret(distMat, rank) 
% 
% PROTOTYPE 
% function [FERET] = feret(distMat, rank) 
%  
% USAGE EXAMPLE(S) 
% pcaResultsCOS = feret(pcaDistMatCos, 50); 
% pcaResultsCOS.perc(1)         - gives rank 1 result 
% plot(pcaResultsL1.cms)        - plots the CMS curve 
% 
% GENERAL DESCRIPTION 
% Implements the standard FERET performance analysis, with standard FERET 
% test sets: fa (gallery), fb, fc, dup1, dup2. 
%  
% REFERENCES 
% P.J. Phillips, H. Moon, S.A. Rizvi, P.J. Rauss, The FERET Evaluation 
% Methodology for Face-Recognition Algorithms, IEEE Trans. on PAMI, 
% Vol. 22, No. 10, October 2000, pp. 1090-1104 
% 
% All references available on http://www.face-rec.org/algorithms/ 
%  
% INPUTS 
% distMat       - distance matrix for a given metric, produced by the 
%                 createDistMat function 
% rank          - wanted highest rank of a CMS curve 
% 
% OUTPUTS 
% FERET structure with the 4 main elements (fb, fc, dup1 and dup2) and the  
% folowing sub-elements: 
% perc          - performance (percentage of correctly recognized images) 
%                 at each rank. perc(1) rank 1 result, perc(2) the 
%                 improvement at rank 2: (result at rank 1) - (result at rank 
%                 2) 
% rank1			- rank 1 performance (percentage) 
% cms           - CMS curve 
% numProbeImgs  - total number of images in a given probe set 
% 
% NOTES / COMMENTS 
% * The following files must either be in the same path as this function 
%   or somewhere in Matlab's path: 
%       1. listAll.mat          - containing the list of all 3816 FERET images 
%       2. feretGallery.mat     - list of gallery images 
%       3. fb.mat               - list of fb probe set images        
%       4. fc.mat               - list of fc probe set images   
%       5. dup1.mat             - list of dup1 probe set images        
%       6. dup2.mat             - list of dup2 probe set images   
% 
% ** Developed using Matlab 7 
% 
% 
% REVISION HISTORY 
% - 
%  
% RELATED FUNCTIONS (SEE ALSO) 
% pca, createDistMat 
%  
% ABOUT 
% Created:        03 Sep 2005 
% Last Update:    - 
% Revision:       1.0 
%  
% AUTHOR:   Kresimir Delac 
% mailto:   kdelac@ieee.org 
% URL:      http://www.vcl.fer.hr/kdelac 
% 
% WHEN PUBLISHING A PAPER AS A RESULT OF RESEARCH CONDUCTED BY USING THIS CODE 
% OR ANY PART OF IT, MAKE A REFERENCE TO THE FOLLOWING PAPER: 
% Delac K., Grgic M., Grgic S., Independent Comparative Study of PCA, ICA, and LDA  
% on the FERET Data Set, International Journal of Imaging Systems and Technology, 
% Vol. 15, Issue 5, 2006, pp. 252-260 
% 
 
 
% Load feretGallery and probe lists 
load listAll; 
load feretGallery; 
load fb; 
load fc; 
load dup1; 
load dup2; 
 
% Constants (number of images in feretGallery and probes) 
numGalleryImgs = size   (feretGallery, 1); 
numFbImgs = size        (fb, 1); 
numFcImgs = size        (fc, 1); 
numDup1Imgs = size      (dup1, 1); 
numDup2Imgs = size      (dup2, 1); 
 
% Get the list of positions where feretGallery images are located in the list 
% of all images and store it in variable index 
feretGalleryIndex = getIndex (feretGallery, listAll); 
 
% Get the list of all the probe images 
fbIndex = getIndex (fb, listAll); 
fcIndex = getIndex (fc, listAll); 
dup1Index = getIndex (dup1, listAll); 
dup2Index = getIndex (dup2, listAll); 
 
% Calculate ranks for the CMS curve 
% The results are stores in a structure 
FERET.fb = getResults (distMat, feretGallery, feretGalleryIndex, fb, fbIndex, numFbImgs, rank); 
FERET.fc = getResults (distMat, feretGallery, feretGalleryIndex, fc, fcIndex, numFcImgs, rank); 
FERET.dup1 = getResults (distMat, feretGallery, feretGalleryIndex, dup1, dup1Index, numDup1Imgs, rank); 
FERET.dup2 = getResults (distMat, feretGallery, feretGalleryIndex, dup2, dup2Index, numDup2Imgs, rank); 
 
 
 
%************************************************************************** 
%   Statistics (CMS curve, total number of probe images)  
%************************************************************************** 
 
function [RESULTS] = getResults (distMat, feretGallery, feretGalleryIndex, probe, probeIndex, numProbeImgs, rank) 
 
for j = 1 : rank 
    for i = 1 : numProbeImgs 
 
        position = probeIndex(i); 
        currentRow = distMat(position,:); 
        reduced = currentRow(1, feretGalleryIndex); 
                 
        [Y, I] = sort(reduced); 
        inx = I(j); 
         
        % Determine if G=H based on the first 5 characters of the filename 
        G = char(feretGallery(inx)); 
        H = char(probe(i)); 
        correct(i) = strncmp(G, H, 5); 
        % if G=H correct(i)=1, else 0 
         
    end; 
     
    % Rank 1 result (percentage) 
    if j == 1 
    	RESULTS.rank1 = (sum(correct)/numProbeImgs)*100; 
    end; 
     
    % Percentage of correctly recognized images for a given probe set 
    RESULTS.perc(j) = (sum(correct)/numProbeImgs)*100; 
     
		% CMS curve 
    RESULTS.cms(j) = sum(RESULTS.perc(1:j)); 
     
end; 
 
% Total number of probe images 
RESULTS.numProbeImgs = numProbeImgs; 
%************************************************************************** 
 
 
 
 
%************************************************************************** 
%   Find positions of probe or feretGallery images in the list of all images  
%************************************************************************** 
 
function [index] = getIndex (sub, all) 
 
num = size (sub, 1); 
for i = 1 : num 
    index(i) = strmatch(sub(i), all); 
end; 
%**************************************************************************