Red de conocimiento informático - Consumibles informáticos - Buscando puntuaciones altas para el programa de reconocimiento facial matlab pca

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>

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

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;