Buscando puntuaciones altas para el programa de reconocimiento facial matlab pca
función pca (ruta,listatren,subDim)
PROTOTIPO
función pca (ruta,listatren,subDim)
EJEMPLO(S) DE USO
pca ('C:/FERET_Normalised/', trainList500Imgs, 200
<); p> DESCRIPCIÓN GENERAL
Implementa el método estándar Turk-Pentland Eigenfaces. Como resultado final
, esta función guarda la matriz pcaProj en el disco con todas las imágenes
. proyectado en el subespacio subDim-dimensional encontrado por PCA
REFERENCIAS
M. Turk, A. Pentland, Eigenfaces for Recognition, Journal of Cognitive p> p>
Neurosicence, Vol. 3, No. 1, 1991, págs. 71-86
M.A. Turk, A.P. Pentland, Reconocimiento facial mediante caras propias, Procedimientos
p>
de la Conferencia IEEE sobre visión por computadora y reconocimiento de patrones,
3-6 de junio de 1991, Maui, Hawaii, EE. UU., págs. 586-591
ENTRADAS:
ruta - ruta completa a las imágenes normalizadas de la base de datos FERET
trainList - lista de imágenes Los nombres que se utilizarán para el entrenamiento deben ser
sin extensión y .pgm se agregará automáticamente
subDim: número de dimensiones que se conservarán (el subespacio deseado
dimensionalidad). :
La función generará y guardará en
el disco genera las siguientes salidas:
DATOS - matriz donde cada columna es una imagen transformada en un vector
- el tamaño de esta matriz es (número de píxeles) x (número de imágenes), uint8
imSpace - igual que DATA pero solo imágenes en el conjunto de entrenamiento
psi - cara media (de las imágenes de entrenamiento)
zeroMeanSpace - cara media restada de cada una fila en imSpace
pcaEigVals - valores propios
w - subespacio PCA de dimensiones inferiores
pcaProj - todas las imágenes proyectadas en un espacio de dimensiones subDim
NOTAS / COMENTARIOS
* Los siguientes archivos deben estar en la misma ruta que esta función
o en algún lugar de la ruta de Matlab:
1. listAll.mat: contiene la lista de las 3816 imágenes FERET
** Cada dimensión del subespacio resultante está normalizada a la unidad de longitud
*** Desarrollado usando Matlab 7
HISTORIAL DE REVISIONES
-
FUNCIONES RELACIONADAS (VER TAMBIÉN)
createDistMat, feret
ACERCA de
Creado : 03 de septiembre de 2005
Última actualización: -
Revisión: 1.0
AUTOR: Kresimir Delac
mailto: kdelac@ieee.org
URL: http://www.vcl.fer.hr/kdelac
AL PUBLICAR UN ARTÍCULO COMO RESULTADO DE LA INVESTIGACIÓN REALIZADA UTILIZANDO ESTE CÓDIGO
O CUALQUIER PARTE DEL ÉL, HAGA UNA REFERENCIA AL SIGUIENTE DOCUMENTO:
Delac K., Grgic M., Grgic S
., Estudio comparativo independiente de PCA, ICA y LDA
sobre el conjunto de datos FERET, Revista internacional de sistemas y tecnología de imágenes,
Vol. 15, número 5, 2006, págs. 252-260
Si no se proporciona subDim, se retienen n - 1 dimensiones
, donde n es el número de imágenes de entrenamiento
.si nargin lt; 3
subDim = tenue - 1
end
disp(' ')
cargar; listAll;
Constantes
numIm = 3816
Asignación de memoria para la matriz de DATOS
fprintf('Creando matriz de DATOS\n')
tmp = imread ([path char(listAll(1)) '.pgm']
[m, n] = tamaño (tmp) también!!!
DATA = uint8 (zeros(m*n, numIm)); Memoria asignada
clear str tmp
Creando matriz de DATOS
p> p>
para i = 1: numIm
im = imread ([path char(listAll(i)) '.pgm']
DATA(: , i ) = remodelar (im, m*n, 1);
end;
guardar DATOS
borrar im; p> Creando espacio de imágenes de entrenamiento
fprintf('Creando espacio de imágenes de entrenamiento\n')
dim = length (trainList
imSpace = zeros (m); *n , dim);
para i = 1: dim
index = strmatch (trainList(i), listAll
imSpace(:, i); ) = DATOS(:, índice);
end;
guardar imSpace imSpace;
borrar DATOS
Calculando la cara media; imágenes de entrenamiento
fprintf('Zero mean\n')
psi = mean(double(imSpace'))'
save psi psi ; p>
Cero significa
zeroMeanSpace = zeros(size(imSpace));
for i = 1: dim
zeroMeanSpace(:, i) = double (imSpace(:, i)) - psi;
fin;
guardar zeroMeanSpace zeroMeanSpace
borrar imSpace
PCA; /p>
fprintf('PCA\n')
L = zeroMeanSpace' * zeroMeanSpace; truco Turk-Pentland (parte 1)
[eigVecs, eigVals] = eig (L);
diagonal = diag(eigVals);
[diagonal, índice] = sort(diagonal);
índice = flipud(índice);
pcaEigVals = zeros(size(eigVals));
para i = 1: tamaño(eigVals, 1)
pcaEigVals(i, i) = eigVals (índice(i), índice(i));
pcaEigVecs(:, i) = eigVecs(:, índice(i));
end; p>pcaEigVals = diag(pcaEigVals);
pcaEigVals = pcaEigVals / (dim-1);
pcaEigVals = pcaEigVals(1: subDim); p>
p>
pcaEigVecs = zeroMeanSpace * pcaEigVecs; truco Turk-Pentland (parte 2)
guardar pcaEigVals pcaEigVals
Normalización a longitud unitaria
fprintf( 'Normalizar\n')
para i = 1: dim
pcaEigVecs(:, i) = pcaEigVecs(:, i) / norm(pcaEigVecs(: , i));
end;
Reducción de dimensionalidad
fprintf('Creando subespacio de dimensiones inferiores\n')
w. = pcaEigVecs(:, 1: subDim);
save w w;
clear w
Restar la cara media de todas las imágenes
cargar DATOS;
borrar w;
p>
cargar psi
ceroMeanDATA = ceros(tamaño(DATOS)); p>para yo
= 1: tamaño(DATOS, 2)
ceroDATAMedio(:, i) = doble(DATOS(:, i)) - psi
fin; >clear psi;
clear DATA;
Proyectar todas las imágenes en un nuevo subespacio de dimensión inferior (w)
fprintf('Proyectar todas las imágenes en un nuevo subespacio inferior subespacio dimensional\n')
cargar w;
pcaProj = w' * zeroMeanDATA
clear
clear zeroMeanDATA;
guardar pcaProj pcaProj;