Beruflich Dokumente
Kultur Dokumente
TEMA:
INFORME FINAL
DOCENTE:
ING. LUCY DELGADO BARRA
REALIZADO POR:
PINTO MEDINA, BRIAN
CUTIPA NOA, HECTOR
Arequipa – Perú
2016
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
INFORME FINAL
PROYECTO DE RECONOCIMIENTO FACIAL POR METODO DE EIGENFACES
1. INTRODUCCION:
2. MARCO TEORICO
METODO DE EIGENFACES:
El proceso de reconocimiento de caras consiste en tomar una imagen de dos dimensiones, a filas
y b columnas, a la que se transforma en un vector unitario contenido en un espacio de imágenes
n-dimensional (n = a × b). Luego se le substrae la imagen promedio y se proyecta el vector
resultante en un subespacio de menor dimensión utilizando uno de los métodos de reducción de
dimensión.
Este método realiza una proyección lineal del espacio de imágenes a un espacio de características
de menor dimensión. Esta reducción se realiza utilizando la técnica PCA la cual toma aquella
proyección lineal que maximiza la dispersión de todas las imágenes proyectadas.
2
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
Se asume además que cada una de las imágenes pertenece a una de las c clases {X1, X2,. . ., Xc}.
Asimismo se considera una transformación lineal que lleva el espacio de imágenes original de n
dimensiones al espacio de características de dimensión m, donde m < n. Los nuevos vectores de
características yk ∈ ℜm son definidos por la siguiente transformación lineal.
Donde W ∈ ℜnxm es una matriz con columnas ortonormales. Se define además la matriz de
distribución total ST como:
Donde µ ∈ ℜn es la media de todas las imágenes. Luego de aplicar la transformación lineal WT, la
distribución de los vectores de características {y1, y2,..., yN} es WT ST W. Se toma aquella
proyección Wopt que maximiza el determinante de la distribución total de la matriz de las
imágenes proyectadas, esto es:
3. OBJETIVOS
3
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
4. DESARROLLO
Como primer objetivo tenemos que realizar la base de datos para lo cual le pediremos ayuda a
nuestros compañeros y también implementaremos el algoritmo de Eigenfaces mediante el
software de Matlab.
Las fotos que utilizaremos poseerán un tamaño de 640 x 480 pixeles. Se pedirá la participación
de nuestros compañeros para así lograr un reconocimiento de rostros en un tiempo real. Las
personas que colaboraran con el proyecto serán:
4
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
Una vez armado nuestro registro de fotografías procedemos con la implementación del
algoritmo las imágenes deberán estar en una misma carpeta asociada al Path de Matlab para
facilitar el trabajo.
Cada imagen ri con i=1,2,…, M es reorganizada como un vector de dimensión NxN cuyo
valor es construido como la concatenación de cada una de las filas de la imagen, formando
así una matriz de NxNxM.
% TAMAÑO DE LA PANTALLA
scrsz=get(0,'ScreenSize');
ancho=scrsz(3);
alto=scrsz(4);
ancho=round(ancho/3);
alto=round(alto/2)-40;
5
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
% Hector
Hector=imread('C:\Users\TOSHIBA\Desktop\entrenar\Hector.jpg','jpg
');
Hector=rgb2gray(Hector);
Hector=imresize(Hector,[N N]);
figure('Position',[10 alto ancho alto])
subplot(2,3,1),imshow(Hector,'Initialmagnification','fit');title(
'Hector')
% Brian
Brian=imread('C:\Users\TOSHIBA\Desktop\entrenar\Brian.jpg','jpg')
;
Brian=rgb2gray(Brian);
Brian=imresize(Brian,[N N]);
subplot(2,3,2),imshow(Brian,'Initialmagnification','fit');title('
Brian')
% Martha
Martha=imread('C:\Users\TOSHIBA\Desktop\entrenar\Martha.jpg','jpg
');
Martha=rgb2gray(Martha);
Martha=imresize(Martha,[N N]);
subplot(2,3,3),imshow(Martha,'Initialmagnification','fit');title(
'Martha')
% Andres
Andres=imread('C:\Users\TOSHIBA\Desktop\entrenar\Andres.jpg','jpg
');
Andres=rgb2gray(Andres);
Andres=imresize(Andres,[N N]);
subplot(2,3,4),imshow(Andres,'Initialmagnification','fit');title(
'Andres')
% CaraFeliz
carafeliz=imread('C:\Users\TOSHIBA\Desktop\entrenar\carafeliz.jpg
','jpg');
carafeliz=rgb2gray(carafeliz);
carafeliz=imresize(carafeliz,[N N]);
subplot(2,3,5),imshow(carafeliz,'Initialmagnification','fit');tit
le('carafeliz')
6
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
avImg=zeros(N);
figure('Position',[ancho alto ancho alto])
for k=1:M
st.data{k}=im2single(st.data{k}); %Obtiene el promedio de la
imagen con respecto a la siguiente
avImg=avImg+(1/M)*st.data{k}; %Acumula la imagen y el
promedio
subplot(2,3,k),imshow(avImg,'Initialmagnification','fit');
title(['Promedio con ',st.names{k},])
pause(2)
end
c) ELIMINAR EL PROMEDIO
El rostro promedio Ψ obtenido es restado a cada una de las imágenes ri con i entre 1…M
obteniendo un nuevo conjunto de vectores
De dimensión N2 xN2. Estos vectores propios son los vectores ortonormales usados para
construir la representación de las imágenes. El tamaño de la matriz C hace intratable este
paso por el espacio y el tiempo requerido). Para solucionar este problema, se obtiene una
aproximación de dichos vectores.
7
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
A(:,k)=st.dataAvg{k}(:);
end
C=A'*A;
figure(6),imagesc(C);title('convarianza')
e) VECTORES DE EIGENFACES
f) OBTENER EL PATRON
Se obtiene el patron:
Donde:
% PATRONES DE RECONOCIMIENTO
nsel=3 %Seleccion de eigenfaces
for mi=1:M %Numero de imagenes
for k=1:nsel %Eigenface para numero de coeficiente
wi(mi,k)=sum(A(:,mi).*eigenfaces{xci(k)}(:));
end
end
g) RECONOCIMIENTO DE LA CAMARA
En esta parte se presentó un problema debido a que Matlab no mostraba los dispositivos
de videos conectados mediante el comando imaqhwinfo después de instalar los toolbox
Vision for Matlab y Image Acquisition se logró solucionar el problema satisfactoriamente.
Se agregó otro dispositivo para captura de imágenes mediante celular el cual estaba
conectado por Wi-Fi. El cual paso a ser (‘winvideo’,1) dejando a la webcam como
(‘winvideo’,2).
8
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
9
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
% RECONOCIMIENTO DE LA CAMARA
video1=videoinput('winvideo',1); %Reconoce la camara
info1=imaqhwinfo('winvideo',1);
video1.BayerSensorAlignment='grbg';
set(video1, 'SelectedSourceName','input1')
preview(video1)
pause(2)
s=getsnapshot(video1); %Toma una fotografia con la camara
s=rgb2gray(s); %Pasa a escala de grises la fotografia
imwrite(s,'C:\Users\TOSHIBA\Desktop\entrenar\camara.jpg','jpg')
closepreview(video1) %Cierra el entorno de la camara
testFaceMic=imresize(s,[N N]); %Convierte la fotografia en un
vector de NxN
testFaceMic=im2single(testFaceMic);
figure('Position',[ancho 10 ancho alto]),
imshow(testFaceMic,'Initialmagnification','fit')
pause(5)
% RECONOCIMIENTO FACIAL
Aface=testFaceMic(:)-avImg(:); %Normalizacion del rostro.
for tt=1:nsel
wface(tt)=sum(Aface.*eigenfaces{xci(tt)}(:));
end
%Calcula la distancia
for mi=1:M
fsumcur=0;
for(tt=1:nsel)
fsumcur=fsumcur+(wface(tt)-wi(mi,tt)).^2;
end
diferencia(mi)=sqrt(fsumcur); %Diferencia entre la foto y el
registro
end
desconocido=imread('C:\Users\TOSHIBA\Desktop\entrenar\desconocido
.png','png');
[val in]=min(diferencia);
if val<=200 %Si el rostro es conocido se mostrara la foto de la
persona
figure('Position',[2*ancho 10 ancho alto]),
imshow(st.data{in}),title(['La imagen corresponde a
',st.names{in},])
else
figure,imshow(desconocido) % Si el rostro es desconocido se
mostrara un mensaje de DESCONOCIDO
end
10
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
Una vez completado el primer objetivo pasaremos con el siguiente el cual será probar nuestro
programa en tiempo real y ver si reconoce el rostro de la persona fotografiada y que también ver
qué pasaría si tomamos una fotografía a una persona que no está en nuestro registro.
Primero se muestran las imágenes cargadas (las que están en nuestro registro) y se muestran
en pantalla.
Después el programa realiza el promedio de la primera foto con la segunda, luego el promedio
obtenido de la primera con la segunda se promedia con la tercera y así sucesivamente con
todo el registro.
11
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
Una vez realizado el promedio de todas las fotografías se restan dichos promedios para
eliminar dicho promedio.
Como se puede observar en la Figura 9 los promedios han sido eliminados quedando así
características únicas de cada fotografía. Una vez tengamos las características de cada foto
hallamos la covarianza de estas mismas.
12
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
13
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
Resultado
En esta parte tuvimos algunas dificultades debido a que los fondos se confundían y el
programa al no tener el umbral bien definido, elegía a la persona con menor diferencia. La
diferencia tenía que variar bastante para que muestre el mensaje de “DESCONOCIDO”.
Por último y para concluir todos nuestros objetivos trazados implementaremos el Hardware
mediante un arduino para esto necesitaremos instalar el paquete de arduino para Matlab una vez
instalado procederemos con la programación.
Para nuestro proyecto decidimos utilizar el arduino UNO el cual hará que se encienda el led1
si la persona reconocida por el programa pertenece a la persona 1, que en este caso sería
Héctor, el led2 para Brian, el led3 para Martha, el led4 para Andrés y por último el led5 para
Maryelin.
Una vez instalada la librería de Matlab procederemos con el código que es el que se muestra
a continuación:
14
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
if in==2 % si es brian
ard.digitalWrite(9,1);
else
ard.digitalWrite(9,0);
end
if in==3 % si es martha
ard.digitalWrite(10,1);
else
ard.digitalWrite(10,0);
end
if in==4 % si es andres
ard.digitalWrite(11,1);
else
ard.digitalWrite(11,0);
end
if in==5 % si es maryorin
ard.digitalWrite(12,1);
else
ard.digitalWrite(12,0);
end
end
Como podemos ver en este caso la persona elegida fue el número 1 que corresponde a
Héctor por eso se hace el prendido del led 1 y los demás se mantienen apagados
5. CONCLUSIONES
15
PROCESAMIENTO DIGITAL DE SENALES PROYECTO
FINAL
http://sedici.unlp.edu.ar/bitstream/handle/10915/22881/Documento_completo
.pdf?sequence=1.
http://www.bib.uia.mx/tesis/pdf/014620/014620_00.pdf
http://www.justdocument.com/download/4827134690/eigenfaces-para-
recongnition-analisis-preliminar-de-algoritmos/
https://www.youtube.com/c/adaniieel
16