Escolar Documentos
Profissional Documentos
Cultura Documentos
Palabras claves— Distancia euclidiana, LBP, Reconocimiento En esta Figura se ilustra un sistema de reconocimiento
de rostros, WBP, Wavelet. Biométrico general:
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
a. Entrenamiento
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.
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')