Você está na página 1de 5

1

Sistema de Reconocimiento de Rostros


utilizando Local Binary Pattern(LBP), Window
Local Pattern(WBP) y Transformada de
Wavelets Bidimensional
Gustavo Calderón-Auza, Gabriel Sanchez Perez, Jesús Olivares Mercado, José Portillo Portillo

Sección de Estudio de Posgrado e Investigación, ESIME-Culhuacán, Instituto Politécnico Nacional.


Av. Santa Ana No. 1000, Col. San Francisco Culhuacán, Coyoacán, México D.F., CP. 04420.
(email: gus_auza@hotmail.com)

Resumen—Este artículo presenta un sistema de sistema general de reconocimiento biométrico.
reconocimiento de rostro haciendo una comparación entre tres
métodos de extracción de características locales. El primer
método crea el vector característico considerando LBP. El
segundo método, crea el vector característico utilizando WBP y
finalmente el tercer método con los mismos puntos forma
vectores característicos de la matriz de coeficientes de
aproximación de la transformada Wavelets bidimensional
discreta a un nivel. Con las características obtenidas se realiza
una comparación paramétrica con los vectores de las imágenes
almacenadas en la base de datos conformantes de un conjunto de
entrenamiento. Los experimentos fueron hechos con la base de
datos MyDataBaseRostro, con el cual se obtuvo un grado
promedio de reconocimiento de 60.57% (método 1), 58.80%
(método 2) y 58.92% (método 3). Figura 1 Sistema General de Reconocimiento Biométrico

Palabras claves— Distancia euclidiana, LBP, Reconocimiento En esta Figura se ilustra un sistema de reconocimiento
de rostros, WBP, Wavelet. Biométrico general:

• El módulo de adquisición. Rasgo biométrico


I. INTRODUCCIÓN • El módulo de extracción y selección de
características. Representación del Rasgo biométrico
D esde la percepción humana, la forma más sencilla de
reconocer personas es mediante el rostro, este tiene
características únicas como la distancia entre los ojos, •
(LBP, WBP y Wavelet).
La base de datos. Almacenamiento del Rasgo
anchura de la nariz, forma de la barbilla, pómulos, forma de la biométrico.
boca, etc. la detección de personas en una imagen o video es • El módulo del administrador del sistema.
un tema ambicioso desde hace ya bastante tiempo, y cada vez Administrador
se exige una mayor precisión ante entornos cada vez más • El módulo del Comparador y toma de decisiones.
difíciles. El principal problema que se presenta es que las Clasificador (Distancia Euclidiana)
características del rostro varían en pequeñas modificaciones de • Finalmente, el usuario y la aplicación. Usuario/
la posición o gestos del rostro. Aplicación (Reconocimiento del rostro)

Aplicaciones como: sistema de seguridad, identificación de II. LOCAL BINARY PATTERN


criminales, control fronterizo de emigrantes, evitar El patrón binario local (LBP) es un operador de textura
suplantaciones por pérdida de documentos, etc., utilizan simple pero muy eficiente que etiqueta los píxeles de una
técnicas de reconocimiento de rostros. imagen mediante el umbral de la vecindad de cada píxel y
considera el resultado como un número binario. Debido a su
En este articulo analizaremos tres diferentes técnicas de poder discriminativo y simplicidad computacional, el operador
extracción de características del rostro utilizando el siguiente de textura LBP se ha convertido en un enfoque popular en
varias aplicaciones. Puede ser visto como un acercamiento
.
2

unificador a los modelos estadísticos y estructurales


tradicionalmente divergentes del análisis de la textura. Quizás
la propiedad más importante del operador LBP en aplicaciones
del mundo real es su robustez a los cambios mono tónicos a
escala de grises causados, por ejemplo, por variaciones de
iluminación. Otra propiedad importante es su simplicidad
computacional, que permite analizar imágenes en desafiantes
Figura 4 Ejemplo de una transformación WBP. A) imagen original
configuraciones en tiempo real.
con valores en escala de grises y B) imagen transformada con código
WBP,1/3 más pequeña de tamaño.
Para calcular el LBP se tiene que calcular un código LBP
para cada pixel de la imagen, es decir obtendremos una matriz IV. TRANSFORMADA DE WAVELET BIDIMENSIONAL DISCRETA
del mismo tamaño de la imagen original, pero con valores DE UN NIVEL
LBP ya no con valores de escala de grises.
La Transformada Wavelet se utiliza para la compresión
tanto de imágenes como de audio. En el proceso de análisis de
la Wavelet, las señales son representadas utilizando un grupo
de funciones básicas producidas por el desplazamiento y el
escalado de una función madre o función principal. La
transformada Wavelet es una descomposición de una señal en
frecuencias.

Figura 2 Ejemplo de LBP para una ventana de 3 × 3 pixeles. a) La DWT bidimensional se ha aplicado en análisis multi-
valores en escala de grises, b) Binary Pattern, c) matriz de peso, d)
resolución visión por computador, y compresión de imágenes.
código LBP
La DWT bidimensional trabaja sobre una señal 2-D como
LBP está definido por la siguiente ecuación puede ser una imagen. Tal como los filtros 1-D se utilizan para
computar la DWT 1-D, para computar la DWT 2-D utilizamos
filtros 2-D calculados a partir de la convolución de los filtro 1-
(1) D sobre ellos mismos. Estos filtros 2-D pueden ser separables
o no separables, donde un filtro 2-D f(n1, n2) es separable si
es expresable como f(n1, n2)= f1(n1) f2(n2). La DWT 2-D
separable descompone una imagen Si(n1, n2) en una imagen
Esto significa que los signos de las diferencias en un barrido promedio y tres imágenes detalle, de acuerdo con las
se interpretan como un número binario P-bit, lo que resulta en expresiones
valores distintos 2p para el Código LBP.

(2)

(3)

(4)

(5)
Figura 3 Ejemplo de una transformación LBP. A) imagen original
con valores en escala de grises y B) imagen transformada con código
LBP.
donde H(z) y G(z) son los filtros Wavelet 1-D. La señal Si+1
III. WINDOW BINARY PATTERN (n1, n2) es un suavizado de baja resolución de la imagen Si
(n1, n2). Este suavizado se calcula desde Si(n1, n2) mediante
El patrón binario de ventana WBP es un operador similar al
un filtro pasa-baja y diezmando por 2 a lo largo de filas y
LBP, se calcula de la misma manera que la ecuación 1 y como
columnas. Las señales Wi+1 1 (n1,n2), Wi+1 2 (n1,n2), y
lo muestra la figura 2. Sin embargo, la única diferencia con
Wi+1 3 (n1,n2) contienen el detalle de Si(n1,n2). El nivel 1 de
LBP es que este operador no se calcula a cada pixel, es decir
la DWT 2-D se calcula como muestra la figura 2.
no tiene traslape las ventanas de 3x3, por lo tanto, la matriz
resultante será 1/3 más pequeña que la matriz de la imagen
original.
3

VII. SISTEMA DE RECONOCIMIENTO


El sistema de reconocimiento contara con dos etapas, la
primera de entrenamiento y la segunda de prueba. Esta
implementado en Matlab.

a. Entrenamiento

1. Se toman 5 imágenes de cada clase.


2. Se calcula su vector característico (LBP, WBP o
wavelet) de cada una de estas 5 imágenes.
3. Se suman los 5 vectores característicos y se
Figura 5 Diagrama de bloques del banco de filtros de análisis promedian, para obtener un solo vector promedio
utilizado para calcular la DWT 2-D
de cada clase.
Para el vector característico solo tomamos la matriz promedio 4. Finalmente, ya que tenemos 20 clases diferentes,
obtenida de aplicar la dwt2 y repetimos el procedimiento a obtenemos una plantilla de 20 vectores
esta matriz promedio para hacer mas pequeño el vector promedios de características (LBP, WBP o
característico. wavelet) la cual será la plantilla de
entrenamiento con la cual compararemos en la
etapa de prueba.
V. DISTANCIA EUCLIDIANA
En matemáticas, la distancia euclidiana o euclídea es la b. Prueba
distancia "ordinaria" (que se mediría con una regla) entre dos
puntos de un espacio euclídeo, la cual se deduce a partir del Tenemos 130 imágenes por clase, como utilizamos 5 imágenes
teorema de Pitágoras. para la etapa de entrenamiento, solo tendremos 125 imágenes
por clase para esta etapa.
En general, la distancia euclidiana entre los puntos P y Q ,
del espacio euclidiana n-dimensional, se define como: 1. Tomamos una imagen Query (de prueba) de las
125 de cada clase.
2. Se calcula su vector característico (LBP, WBP o
(6) wavelet).
3. Se calcula la distancia (distancia euclidiana) que
existe entre esta imagen query y la plantilla del
VI. BASE DE DATOS UTILIZADA entrenamiento.
La base de datos utilizada cuenta con 2600 imágenes tipo 4. Se escoge el vector característico de la plantilla
.jpg, de tamaño 288x192 pixeles, en escala de grises. Cuenta con el que tuvo menor distancia.
con 10 clases de hombres y 10 clases de mujeres, a su vez 5. Se compara la etiqueta del vector característico
cada clase cuenta con 70 imágenes sin oclusión, 30 imágenes con la etiqueta de la imagen query para ver si
con lentes y 30 imágenes con bufanda. Para nuestro sistema la pertenecen a la misma clase.
etapa de entrenamiento se hizo con 5 imágenes sin oclusión de 6. Se realiza el paso 1 de la etapa de prueba hasta
cada clase y la prueba con las 125 imágenes restantes de cada completar las 125 imágenes de cada clase que se
clase. tienen en la base de datos.

VIII. RESULTADOS
En la siguiente figura se muestra un ejemplo de la aplicación
de los 3 diferentes descriptores utilizados en la prueba a una
imagen de la base de datos.

Figura 6 Ejemplo de imágenes de una clase de la base de datos


utilizada.

Figura 7 Muestra de las 3 diferentes extracciones de características


de una imagen de la base de datos.
4

A continuación, se muestra una grafica con el porcentaje de Tabla 2 Porcentaje total de reconocimiento de cada descriptor en
reconocimiento de cada clase utilizando 65 imágenes sin toda la base de datos
oclusión, 30 imágenes con lentes y 30 imágenes con bufanda.

Figura 8 Porcentaje de reconocimiento de cada uno de los tres Figura 10 Porcentaje total de reconocimiento de cada descriptor en
descriptores utilizados. toda la base de datos
En la siguiente tabla se muestra un resumen de la grafica de la
figura 8, donde nos muestra el porcentaje total de Como podemos observar los porcentajes de reconocimiento no
reconocimiento de cada descriptor especificando las varían mucho, por lo que analizamos el tiempo de
características de las imágenes de la base de datos y en la procesamiento de cada descriptor en una imagen, los cuales se
figura 9 muestra los datos graficados de la tabla 1. muestran en la siguiente tabla
Sin oclusión Con lentes Con bufanda
LBP 63.0% 63.6% 45.6% Tiempo de procesamiento
WBP 62.5% 62.5% 40.1% LBP 0.147314 segundos
Wavelet 64.6% 63.0% 35.0% WBP 0.059641 segundos
Tabla 1 Porcentajes de reconocimiento de cada descriptor. Wavelet 0.326593 segundos
Tabla 3 Tiempos de procesamiento de cada descriptor en una
imagen.

IX. CONCLUSIONES
Como se puede observar en la figura 8, el reconocimiento
de rostro puede variar dependiendo las características de cada
clase, en algunas clases es mejor LBP o WBP y en otras
Wavelets. Sin embargo, podemos ver que viendo los
resultados de una manera mas general el descriptor LBP tiene
ligeramente un mejor resultado. Otra característica que
podemos tomar en cuenta en la elección del descriptor es el
tiempo de procesamiento de cada uno, en este caso WBP tiene
un tiempo de 1/3 parte menos que el LBP, por lo que podemos
Figura 9 Porcentaje de reconocimiento de cada descriptor utilizar WBP en base de datos muy grandes y así ahorrar
especificando características de las imágenes de la base de datos. tiempo de procesamiento. Sin embargo, depende de las
necesidades de nuestra aplicación para elegir el descriptor que
mejor se adapte.
Finalmente, en la tabla 2 se muestra el porcentaje total de
reconocimiento de cada descriptor en toda la base de datos y REFERENCIAS
en la figura 10 se grafican los datos de esta tabla mostrando
que el descriptor LBP tiene mejor porcentaje de
[1] Ahonen, T., Hadid, A., Pietikäinen, M.: Face description
reconocimiento.
with local binary patterns: Application to face recognition.
IEEE Trans. Pattern Anal. Mach. Intell. 28(12), 2037–2041
Base de Datos
(2006)
Completa [2] Ojala, T., Pietikäinen, M., Harwood, D.: A comparative
LBP 60.5% study of texture measures with classification
WBP 58.8% based on feature distributions. Pattern Recognit. 29(1), 51–59
Wavelet 58.9% (1996)
5

a=1;
ANEXO Res_so=zeros(20,3);
%Reconocimiento de Rostro LBP Res_lent=zeros(20,3);
%%Inicializacion Res_buf=zeros(20,3);
clear; clc; close all; for i=1:130:length(Data)
%% Cargar imagenes y sus etiquetas Res_so(a,1)=((sum(Result_lbp(i+5:i+69)))*100)/65;
diract = cd;%guarda la direccion del directorio actual Res_lent(a,1)=((sum(Result_lbp(i+70:i+99)))*100)/30;
directorio = uigetdir(diract,'Elegir carpeta de imagenes de la Base Res_buf(a,1)=((sum(Result_lbp(i+100:i+129)))*100)/30;
de Datos que desea cargar'); Res_so(a,2)=((sum(Result_wbp(i+5:i+69)))*100)/65;
cd(directorio) Res_lent(a,2)=((sum(Result_wbp(i+70:i+99)))*100)/30;
lista = dir('*.jpg'); Res_buf(a,2)=((sum(Result_wbp(i+100:i+129)))*100)/30;
n= size(lista,1); Res_so(a,3)=((sum(Result_wavelet(i+5:i+69)))*100)/65;
Data = cell(n,8); Res_lent(a,3)=((sum(Result_wavelet(i+70:i+99)))*100)/30;
i=1; Res_buf(a,3)=((sum(Result_wavelet(i+100:i+129)))*100)/30;
for j=1:10 a=a+1;
for p=1:130 end
Data{i,1} =strcat('m-',num2str(j),'-',num2str(p),'.jpg');%Etiquetas
de la base de datos %%
buff =strcat(directorio,'\','m-',num2str(j),'-',num2str(p),'.jpg'); for i=1:20
Data{i,2}=double(imread(buff));
Data{i+1300,1} =strcat('w-',num2str(j),'- fprintf('LBP-Clase %s Sin Oclusion tiene el %4.2f %% de
',num2str(p),'.jpg');%etiquetas de la base da detos reconocimiento \n',Train_etiq{i,1},Res_so(i,1));
buff1 =strcat(directorio,'\','w-',num2str(j),'- fprintf('LBP-Clase %s Con lentes tiene el %4.2f %% de reconocimiento
',num2str(p),'.jpg'); \n',Train_etiq{i,1},Res_lent(i,1));
Data{i+1300,2}=double(imread(buff1)); fprintf('LBP-Clase %s Con bufanda tiene el %4.2f %% de reconocimiento
i=i+1; \n\n',Train_etiq{i,1},Res_buf(i,1));
end
end fprintf('WBP-Clase %s Sin Oclusion tiene el %4.2f %% de
cd(diract) reconocimiento \n',Train_etiq{i,1},Res_so(i,2));
%% Calcular LBP y WBP para la base de datos fprintf('WBP-Clase %s Con lentes tiene el %4.2f %% de reconocimiento
for i=1:n \n',Train_etiq{i,1},Res_lent(i,2));
Data{i,3}=LBP_Gus(Data{i,2}); fprintf('WBP-Clase %s Con bufanda tiene el %4.2f %% de reconocimiento
Data{i,4}=WBP_Gus(Data{i,2}); \n\n',Train_etiq{i,1},Res_buf(i,2));
Data{i,5}=wavelet_Gus(Data{i,2});
end fprintf('Wavelet-Clase %s Sin Oclusion tiene el %4.2f %% de
%% guardar datos para no volver a cargar los datos reconocimiento \n',Train_etiq{i,1},Res_so(i,3));
save('LWBP_Wav.mat','Data','-v7.3') fprintf('Wavelet-Clase %s Con lentes tiene el %4.2f %% de
reconocimiento \n',Train_etiq{i,1},Res_lent(i,3));
%% Cargar Base de Datos con LBP y WBP guardados fprintf('Wavelet-Clase %s Con bufanda tiene el %4.2f %% de
% load ('L_W_BP.mat') reconocimiento \n\n',Train_etiq{i,1},Res_buf(i,3));
figure(1)
for i=1:size(Data,1) end

subplot(1,4,1); imshow(uint8(Data{i,2})); title('Original') fprintf('LBP-En todas las clases Sin Oclusion tiene el %4.2f %% de
subplot(1,4,2); imshow(uint8(Data{i,3})); title('LBP') reconocimiento \n',(sum(Res_so(:,1))/20));
subplot(1,4,3); imshow(uint8(Data{i,4})); title('WBP') fprintf('LBP-En todas las clases Con lentes tiene el %4.2f %% de
subplot(1,4,4); imshow(uint8(Data{i,5})); title('Wavelet') reconocimiento \n',(sum(Res_lent(:,1))/20));
pause(0.00001) fprintf('LBP-En todas las clases Con bufanda tiene el %4.2f %% de
end reconocimiento \n\n',(sum(Res_buf(:,1))/20));

subplot(1,3,1); imshow(uint8(Data{1,2})); title('Sin Oclusion') fprintf('WBP-En todas las clases Sin Oclusion tiene el %4.2f %% de
subplot(1,3,2); imshow(uint8(Data{80,2})); title('Con Lentes') reconocimiento \n',(sum(Res_so(:,2))/20));
subplot(1,3,3); imshow(uint8(Data{120,2})); title('Con Bufanda') fprintf('WBP-En todas las clases Con lentes tiene el %4.2f %% de
reconocimiento \n',(sum(Res_lent(:,2))/20));
%% crear Template para la etapa de entrenamiento fprintf('WBP-En todas las clases Con bufanda tiene el %4.2f %% de
load ('LWBP_Wav.mat') reconocimiento \n\n',(sum(Res_buf(:,2))/20));
Train_etiq=cell(20,1);
for i=1:10 fprintf('Wavelet-En todas las clases Sin Oclusion tiene el %4.2f %%
Train_etiq{i,1} =strcat('m-',num2str(i));%Etiquetas del template de reconocimiento \n',(sum(Res_so(:,3))/20));
Train_etiq{i+10,1} =strcat('w-',num2str(i)); fprintf('Wavelet-En todas las clases Con lentes tiene el %4.2f %% de
end reconocimiento \n',(sum(Res_lent(:,3))/20));
a=1; fprintf('Wavelet-En todas las clases Con bufanda tiene el %4.2f %% de
for i=1:130:length(Data) reconocimiento \n\n',(sum(Res_buf(:,3))/20));
buff_lbp=((Data{i,3}+Data{i+1,3}+Data{i+2,3}+Data{i+3,3}+Data{i+4,3})
./5); %%
Train_temp_lbp(a,:)=buff_lbp(:); figure(1)
buff_wbp=((Data{i,4}+Data{i+1,4}+Data{i+2,4}+Data{i+3,4}+Data{i+4,4}) c =
./5); categorical({'m1','m2','m3','m4','m5','m6','m7','m8','m9','m9+1','w1'
Train_temp_wbp(a,:)=buff_wbp(:); ,'w2','w3','w4','w5','w6','w7','w8','w9','w9+1'});
buff_wbp=((Data{i,5}+Data{i+1,5}+Data{i+2,5}+Data{i+3,5}+Data{i+4,5}) y=[Res_so(:,1),Res_so(:,2),Res_so(:,3),Res_lent(:,1),Res_lent(:,2),Re
./5); s_lent(:,3),Res_buf(:,1),Res_buf(:,2),Res_buf(:,3)];
Train_temp_wavelet(a,:)=buff_wbp(:); bar(c,y)
a=a+1; legend('LBP-Sin Oclusion','WBP-Sin Oclusion','Wav-Sin Oclusion','LBP-
end Con lentes','WBP-Con lentes','Wav-Con lentes','LBP-Con Bufanda','WBP-
%% Test Con Bufanda','Wav-Con Bufanda')
Result_lbp=zeros(1,length(Data)); xlabel('# de Clases(m=men w=women)')
Result_wbp=zeros(1,length(Data)); ylabel('% de Reconocimiento')
Result_wavelet=zeros(1,length(Data)); title('%% de Reconocimiento utilizando LBP,WBP y Wavelet')
for j=1:length(Data)
figure(2)
query_lbp=Data{j,3}(:)'; y=[sum(Res_so(:,1))/20;sum(Res_so(:,2))/20;sum(Res_so(:,3))/20;sum(Re
query_wbp=Data{j,4}(:)'; s_lent(:,1))/20;sum(Res_lent(:,2))/20;sum(Res_lent(:,3))/20;sum(Res_b
query_wavelet=Data{j,5}(:)'; uf(:,1))/20;sum(Res_buf(:,2))/20;sum(Res_buf(:,3))/20];
query_etiq=Data{j,1}; c = categorical({'1LBP-Sin Oclusion','2WBP-Sin Oclusion','3Wav-Sin
Oclusion','4LBP-Con lentes','5WBP-Con lentes','6Wav-Con
distancia_lbp= sum(((repmat(query_lbp,20,1)- lentes','7LBP-Con Bufanda','8WBP-Con Bufanda','9Wav-Con Bufanda'});
Train_temp_lbp).^2),2).^0.5; bar(c,y,'g')
[~,Ind_lbp]=min(distancia_lbp); ylabel('% de Reconocimiento')
Result_lbp(1,j)=startsWith(query_etiq,Train_etiq{Ind_lbp,1}); title('%% de Reconocimiento TOTAL con LBP, WBP y Wavelet')

distancia_wbp= sum(((repmat(query_wbp,20,1)- Resultado_LBP=sum(Result_lbp)*100/2600


Train_temp_wbp).^2),2).^0.5; Resultado_WBP=sum(Result_wbp)*100/2600
[~,Ind_wbp]=min(distancia_wbp); Resultado_Wavelet=sum(Result_wavelet)*100/2600
Result_wbp(1,j)=startsWith(query_etiq,Train_etiq{Ind_wbp,1});
figure(3)
distancia_wavelet= sum(((repmat(query_wavelet,20,1)- y=[Resultado_LBP,Resultado_WBP,Resultado_Wavelet];
Train_temp_wavelet).^2),2).^0.5; c = categorical({'LBP','WBP','Wavelet'});
[~,Ind_wav]=min(distancia_wavelet); bar(c,y,'r')
ylabel('% de Reconocimiento')
Result_wavelet(1,j)=startsWith(query_etiq,Train_etiq{Ind_wav,1}); title('%% de Reconocimiento TOTAL con LBP, WBP y Wavelet')
end

Você também pode gostar