Estudio de técnicas de caracterización de la figura humana, para su

Transcripción

Estudio de técnicas de caracterización de la figura humana, para su
Estudio de técnicas de caracterización de la figura
humana, para su posible aplicación a problemas de
reconocimiento de género
Universitat Jaume I
Autor:
Alejandro Mateo Ingelmo
Supervisado por:
Raúl Montoliu Colás
Castellón, 25 de mayo de 2009
Resumen
Este proyecto consiste en el estudio y desarrollo de técnicas de reconocimiento
de patrones para discernir el género de una persona. Partiendo de una fotografı́a en
la cual la persona está centrada en la imagen, el algoritmo debe inferir el género de
dicha persona mediante técnicas de reconocimiento de patrones.
Los objetivos principales que motivan este proyecto son: El estudio de técnicas
de extracción de caracterı́sticas para el reconocimiento de género y la elaboración de
ideas para futuras investigaciones en este ámbito. El estudio de técnicas de extracción
de caracterı́sticas consiste en utilizar algoritmos utilizados en problemas similares
y adaptarlos y modificarlos a este problema. En base a la información obtenida
del proyecto, se pueden idear vı́as de desarrollo que sirvan para orientar a trabajos
posteriores.
Para la consecución de dichos objetivos se siguió una metodologı́a cı́clica de
desarrollo, que consiste en un proceso repetitivo de diseño, implementación, test y
evaluación de resultados. Una vez implementada una versión del algoritmo, se realizan los test y se evalúan los resultados obtenidos. De esos resultados se extraen las
conclusiones que permiten enfocar una mejora del algoritmo o una implementación
de una técnica nueva, repitiendo el ciclo tantas veces como sea requerido.
En concreto, en este proyecto se han implementado tres versiones: la primera,
que usa histogramas de las orientaciones del gradiente para obtener las caracterı́sticas de la imagen; la segunda, que aplica un enfoque local al estudio de la imagen
y por último; la tercera, que emplea el algoritmo Local Binary Patterns para obtener las caracterı́sticas de la imagen. Los resultados obtenidos muestran que con
las versiones implementadas no se obtiene una solución efectiva al problema, pero si
permiten alcanzar el objetivo marcado, que no es otro que verificar el uso de ambos
algoritmos. Con el fin de evitar conclusiones erróneas, se sometió a las implementaciones diferentes pruebas para verificar su correcto funcionamiento, descartando
errores de implementación.
Descriptores
Reconocimiento de patrones,Vision por computador, HOG, Knn, Biometrı́a
iii
iv
Índice general
1. Introducción
1.1. Motivación . . . . . . . . . . . . . . . . . . .
1.2. Conceptos . . . . . . . . . . . . . . . . . . .
1.2.1. Visón por computador . . . . . . . .
1.2.2. Reconocimiento de patrones . . . . .
1.2.3. Biometrı́a . . . . . . . . . . . . . . .
1.2.4. Histograma de gradientes orientados
1.2.5. Algoritmo KNN . . . . . . . . . . . .
1.2.6. Editado de Wilson . . . . . . . . . .
1.2.7. Local Binary Patterns . . . . . . . .
1.3. Objetivos . . . . . . . . . . . . . . . . . . .
1.4. Consideraciones previas sobre el problema .
1.5. Vista previa del trabajo realizado . . . . . .
1.6. Antecedentes . . . . . . . . . . . . . . . . .
1.7. Organización del documento . . . . . . . . .
2. Planificación
2.1. A priori . . . . . . . . . . . . . .
2.1.1. Análisis y planificación . .
2.1.2. Proceso de desarrollo . . .
2.1.3. Revisión final del proyecto
2.2. A posteriori . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3. Matlab / PRTools
3.1. Introducción a Matlab . . . . . . . . . . . . . . . . .
3.2. Conceptos en el procesamiento de imágenes . . . . .
3.3. Rutinas de lectura y escritura de imágenes . . . . . .
3.4. Funciones dedicadas a la conversión de imágenes . . .
3.5. Funciones para la extracción de bordes . . . . . . . .
3.6. Librerı́a PRTools para el reconocimiento de patrones
v
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
2
3
3
5
6
7
7
8
9
9
9
10
14
14
.
.
.
.
.
17
18
19
19
19
20
.
.
.
.
.
.
25
26
26
27
29
29
30
vi
ÍNDICE GENERAL
4. Descripción del proyecto
4.1. Analisis y planificación . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1. Determinar el ámbito del proyecto . . . . . . . . . . . . . . .
4.1.2. Definir herramientas a utilizar . . . . . . . . . . . . . . . . .
4.1.3. Definición de objetivos . . . . . . . . . . . . . . . . . . . . .
4.1.4. Estudio de investigaciones previas y tecnologı́as de desarrollo
4.1.5. Estudio y planificación temporal de tareas . . . . . . . . . .
4.1.6. Búsqueda e instalación del SW requerido . . . . . . . . . . .
4.2. Desarrollo versión inicial . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.3. Ejecución de los test y resultados . . . . . . . . . . . . . . .
4.3. Desarrollo mejora 1, editado de Wilson . . . . . . . . . . . . . . . .
4.3.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.3. Ejecución de los test y resultados . . . . . . . . . . . . . . .
4.4. Desarrollo mejora 2, enfoque local . . . . . . . . . . . . . . . . . . .
4.4.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.3. Ejecución de los test y resultados . . . . . . . . . . . . . . .
4.5. Desarrollo mejora 3, Local binary patterns . . . . . . . . . . . . . .
4.5.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.3. Ejecución de los test y resultados . . . . . . . . . . . . . . .
4.6. Revisión del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6.1. Proceso de comprobación . . . . . . . . . . . . . . . . . . . .
4.6.2. Evaluación global de los resultados . . . . . . . . . . . . . .
4.6.3. Futuras vı́as de investigación . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
37
37
37
37
38
38
39
40
40
49
53
59
59
60
61
63
63
65
69
75
75
75
78
81
81
82
83
5. Conclusiones
85
Bibliografı́a
87
Índice de figuras
1.1. Sistema de control biométrico por reconocimiento de rostro. . . . . . .
1.2. Identificación del protagonista mediante el iris, en Minority Report. .
1.3. Esquema de relaciones entre visión por computadora y otras áreas
afines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4. Autentificación biométrica en la entrada de unas instalaciones de ocio.
1.5. Ejemplo del algoritmo Knn. . . . . . . . . . . . . . . . . . . . . . . .
1.6. Ejemplo conjuntos sin editado de Wilson. . . . . . . . . . . . . . . . .
1.7. Extracción de caracterı́sticas de una imagen . . . . . . . . . . . . . .
1.8. Ejemplo de imágenes ambiguas. . . . . . . . . . . . . . . . . . . . . .
1.9. Algunas imágenes utilizadas en el proyecto. . . . . . . . . . . . . . . .
1.10. Metodologı́a seguida en el proyecto. . . . . . . . . . . . . . . . . . . .
1.11. Diferencias fisiológicas entre hombres y mujeres. . . . . . . . . . . . .
1.12. Esquema del proceso entrenamiento. . . . . . . . . . . . . . . . . . . .
1.13. Esquema del proceso clasificación. . . . . . . . . . . . . . . . . . . . .
1.14. Ventanas de extracción. . . . . . . . . . . . . . . . . . . . . . . . . . .
2
3
4
6
7
8
10
11
11
12
13
13
14
15
2.1. Diagrama de Gantt a priori. . . . . . . . . . . . . . . . . . . . . . . . 21
2.2. Diagrama de Gantt a posteriori de las primeras 34 tareas. . . . . . . 22
2.3. Diagrama de Gantt a posteriori de las 29 tareas restantes tareas. . . . 23
3.1.
3.2.
3.3.
3.4.
Representación de una imagen a escala de grises en Matlab
Representación de una imagen a color RGB en Matlab . .
Resultado de la aplicación del algoritmo canny . . . . . . .
Gráfica de los distintos clasificadores. . . . . . . . . . . . .
4.1.
4.2.
4.3.
4.4.
4.5.
4.6.
Tareas principales del proyecto. . . . . . . . . . .
Muestra de imágenes de la BBDD . . . . . . . . .
Esquema de módulos del proyecto . . . . . . . . .
Conversión de una imagen a valores comprendidos
Preproceso de una imagen. . . . . . . . . . . . . .
Ejemplo de obtención del vector de caracterı́sticas.
vii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
27
33
34
34
. . . . . . .
. . . . . . .
. . . . . . .
entre 0 y 1.
. . . . . . .
. . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
38
41
42
44
45
46
viii
ÍNDICE DE FIGURAS
4.7. Cálculo del valor de la imagen integral. . . . . . . . . . . . . . . . .
4.8. Normalización de una imagen. . . . . . . . . . . . . . . . . . . . . .
4.9. Variaciones del gradiente. . . . . . . . . . . . . . . . . . . . . . . .
4.10. Cálculo del gradiente. . . . . . . . . . . . . . . . . . . . . . . . . . .
4.11. Aplicación de un vector de pesos a los pixels de una determinada fila
en al imagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.12. Proceso detallado del proyecto. . . . . . . . . . . . . . . . . . . . . .
4.13. Resultados de la versión inicial sin pos-proceso del vector. . . . . . .
4.14. Resultados de la versión inicial con normalización del vector. . . . .
4.15. Resultados de la versión inicial con normalización y umbralización
del vector. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.16. Resultado del editado de Wilson. . . . . . . . . . . . . . . . . . . . .
4.17. Selección del editado de Wilson. . . . . . . . . . . . . . . . . . . . .
4.18. Resultados con el conjunto de entrenamiento editado. . . . . . . . .
4.19. Transformación de la estructura de vectores. . . . . . . . . . . . . .
4.20. Procesado de los vectores en versiones anteriores. . . . . . . . . . .
4.21. Procesado de los vectores actualmente. . . . . . . . . . . . . . . . .
4.22. Resultados de la versión local para valores de sigma entre 0.5 y 4.5
4.23. Resultados de la versión local para valores de sigma entre 5.5 y 9.5
4.24. Resultados de la versión local para valores de tamVentanaX entre 12
y 18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.25. Resultados de la versión local para valores de tamVentanaX entre 20
y 26 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.26. Resultados de la versión local para valores de desplazamiento entre 2
y8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.27. Resultados de la versión local para valores de desplazamiento entre 10
y 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.28. Procesado de pixeles con local binary patterns. . . . . . . . . . . . .
4.29. Esquema de módulos para la versión LBP. . . . . . . . . . . . . . .
4.30. Resultados de la versión LBP para valores de sigma entre 0.5 y 4.5 y
de tamVentanaX entre 4 y 32 . . . . . . . . . . . . . . . . . . . . .
4.31. Resultados de la versión LBP para valores de desplazamiento entre 4
y 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.32. Gradiente medio de las imágenes en la BBDD. . . . . . . . . . . . .
.
.
.
.
47
48
49
50
.
.
.
.
50
51
55
56
.
.
.
.
.
.
.
.
.
57
59
60
62
64
65
66
69
70
. 71
. 72
. 73
. 74
. 75
. 76
. 79
. 79
. 81
Capı́tulo 1
Introducción
Contenido
1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.2. Conceptos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.2.1. Visón por computador . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.2.2. Reconocimiento de patrones . . . . . . . . . . . . . . . . . . . . . . .
5
1.2.3. Biometrı́a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.2.4. Histograma de gradientes orientados . . . . . . . . . . . . . . . . . .
7
1.2.5. Algoritmo KNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.2.6. Editado de Wilson . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.2.7. Local Binary Patterns . . . . . . . . . . . . . . . . . . . . . . . . . .
9
1.3. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
1.4. Consideraciones previas sobre el problema . . . . . . . . . . . . .
9
1.5. Vista previa del trabajo realizado
. . . . . . . . . . . . . . . . . .
10
1.6. Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
1.7. Organización del documento . . . . . . . . . . . . . . . . . . . . . .
14
1
2
CAPÍTULO 1. INTRODUCCIÓN
Este proyecto consiste principalmente en el estudio de técnicas de extracción de
caracterı́sticas para reconocer el género de una persona centrada en una imagen.
Dichas técnicas serán las utilizadas en problemas similares, con sus pertinentes modificaciones. A continuación se realizará una aproximación para conocer “a grosso
modo”los conceptos claves de este proyecto.
1.1.
Motivación
Las tecnologı́as biométricas han adquirido gran importancia en los últimos años,
especialmente a raı́z de los acontecimientos del 11-S de 2001. La preocupación por
la seguridad es un tema que ha ido creciendo desde entonces y son cada vez más
los equipos de seguridad que utilizan la biometrı́a para paliar la falta de seguridad
existente en ciertos entornos.
Uno de los propósitos más destacables de la biometrı́a es la identificación automática de personas por medio del rostro (ver Figura 1.1), iris, voz, huellas dactilares, etc. Los sistemas biométricos también tienen un gran peso en cuestiones de
seguridad como se ejemplifica seguidamente. Imaginemos por un momento que una
organización terrorista desea atentar contra un edificio gubernamental. Si dicho edificio tuviese un sistema de detección de rostros integrado con una base de datos de
terroristas, se podrı́a llegar a prever el atentado antes de producirse. Otro ejemplo,
un preso se escapa de la cárcel, con un sistema biométrico en puntos clave de un
ciudad, podrı́a facilitar el arresto de dicho individuo.
Figura 1.1: Sistema de control biométrico por reconocimiento de rostro.
Estos casos han sido llevados al cine de forma muy futurista, como es el caso de
la pelı́cula Minority Report. Una escena de esta pelı́cula muestra como un fugitivo
es identificado por cámaras de seguridad mediante el iris (ver Figura 1.2). Aunque
1.2. CONCEPTOS
3
parezca un caso impensable, todo apunta a que en un medio plazo no se estará tan
lejos de ese nivel tecnológico.
Figura 1.2: Identificación del protagonista mediante el iris, en Minority Report.
Dentro de los distintos métodos biométricos, el campo de la identificación del
género es muy novedoso. Los argumentos para desarrollar este ámbito son variados.
A los directivos de unos grandes almacenes les puede interesar conocer el porcentaje
de hombres y mujeres que entran en sus tiendas para hacer posteriores estudios
de mercado. También se podrı́a integrar este sistema con pantallas dinámicas de
anuncios, que pusiesen un anuncio en función del género de la persona que pasa por
la pantalla. Lo que terminarı́a por repercutir directamente en la eficacia del anuncio.
Otra aplicación para el uso de técnicas de identificación de género serı́a acotar
las búsquedas en Bases de Datos para identificar a las personas. Hay que tener en
cuenta que un sistema de identificación automático de personas integran Bases de
datos de un tamaño muy considerable. Resulta especialmente útil reducir el tiempo
de búsqueda prácticamente a la mitad si conseguimos identificar a priori el género
del individuo a identificar.
1.2.
Conceptos
A continuación se explicarán algunos conceptos relacionados con el proyecto que
ayudarán a la comprensión del resto del documento.
1.2.1.
Visón por computador
La Visión artificial, también conocida como Visión por Computador (del inglés
Computer Vision) o Visión técnica, es un subcampo de la inteligencia artificial. El
propósito de la visión artificial es programar un computador para que entienda una
escena o las caracterı́sticas de una imagen.
4
CAPÍTULO 1. INTRODUCCIÓN
Los objetivos tı́picos de la visión artificial incluyen:
La detección, segmentación, localización y reconocimiento de ciertos objetos
en imágenes (por ejemplo, caras humanas).
La evaluación de los resultados (ej.: segmentación, registro).
Registro de diferentes imágenes de una misma escena u objeto, i.e., hacer
concordar un mismo objeto en diversas imágenes.
Seguimiento de un objeto en una secuencia de imágenes.
Mapeo de una escena para generar un modelo tridimensional de la escena; tal
modelo podrı́a ser usado por un robot para navegar por la escena.
Estimación de las posturas tridimensionales de humanos.
Búsqueda de imágenes digitales por su contenido.
En la Figura 1.3 se sitúa la visión por computador respecto a sus áreas afines.
Figura 1.3: Esquema de relaciones entre visión por computadora y otras áreas afines.
Estos objetivos se consiguen por medio de reconocimiento de patrones, aprendizaje estadı́stico, geometrı́a de proyección, procesado de imágenes, teorı́a de gráficos
y otros campos. La visión artificial cognitiva está muy relacionada con la psicologı́a
cognitiva y la computación biológica.
1.2. CONCEPTOS
1.2.2.
5
Reconocimiento de patrones
El reconocimiento de patrones, también llamado lectura de patrones, identificación de figuras y reconocimiento de formas es el reconocimiento de patrones en
señales. No sólo es un campo de la informática sino un proceso fundamental que se
encuentra en casi todas las acciones humanas.
El punto esencial del reconocimiento de patrones es la clasificación. Se requiere
clasificar una señal dependiendo de sus caracterı́sticas. Señales, caracterı́sticas y
clases pueden ser de cualquiera forma, por ejemplo se puede clasificar imágenes
digitales de letras en las clases ((A)) a ((Z)) dependiente de sus pixels o se puede
clasificar ruidos de cantos de los pájaros en clases de órdenes aviares dependiente de
las frecuencias.
El objetivo es clasificar patrones con base en un conocimiento a priori o información estadı́stica extraı́da de los patrones. Los patrones a clasificar suelen ser grupos
de medidas u observaciones, definiendo puntos en un espacio multidimensional apropiado.
Un sistema de reconocimiento de patrones completo consiste en un sensor que
recoge las observaciones a clasificar, un sistema de extracción de caracterı́sticas que
transforma la información observada en valores numéricos o simbólicos, y un sistema
de clasificación o descripción que, basado en las caracterı́sticas extraı́das, clasifica la
medición.
La clasificación utiliza habitualmente uno de las siguientes procedimientos: clasificación estadı́stica (o teorı́a de la decisión), clasificación sintáctica (o estructural). El
reconocimiento estadı́stico de patrones está basado en las caracterı́sticas estadı́sticas
de los patrones, asumiendo que han sido generados por un sistema probabilı́stico. El
reconocimiento estructural de patrones está basado en las relaciones estructurales
de las caracterı́sticas.
Para la clasificación se puede usar un conjunto de aprendizaje, del cual ya se
conoce la clasificación de la información a priori y se usa para entrenar al sistema,
siendo la estrategia resultante conocida como aprendizaje supervisado. El aprendizaje puede ser también no supervisado, el sistema no tiene un conjunto para aprender
a clasificar la información a priori, sino que se basa en cálculos estadı́sticos para
clasificar los patrones.
Unos ejemplos de aplicaciones de reconocimiento de patrones serı́an: la clasificación de documentos (por ejemplo: spam/no spam), el reconocimiento de escritura,
reconocimiento de caras humanas y muchas más. Los dos últimos ejemplos son representativos del análisis de imágenes, un subconjunto del reconocimiento de patrones
que toma imágenes digitales como entradas del sistema.
El reconocimiento de patrones es más complejo cuando se usan plantillas para
generara variantes. Por ejemplo, en castellano, las frases a menudo siguen el patrón
”sujeto-predicado”, pero se requiere cierto conocimiento de la lengua para detectar
6
CAPÍTULO 1. INTRODUCCIÓN
el patrón. El reconocimiento de patrones se estudia en muchos campos, incluyendo
psicologı́a, etologı́a, informática y procesamiento digital de señales.
1.2.3.
Biometrı́a
La biometrı́a es el estudio de métodos automáticos para el reconocimiento único
de humanos basados en uno o más rasgos conductuales o fı́sicos intrı́nsecos. El
término se deriva de las palabras griegas ”bios”de vida y ”metron”de medida.
La biometrı́a informática es la aplicación de técnicas matemáticas y estadı́sticas
sobre los rasgos fı́sicos o de conducta de un individuo, para verificar identidades o
para identificar individuos.
En las tecnologı́as de la información (TI), la autentificación biométrica se refiere a
las tecnologı́as para medir y analizar las caracterı́sticas fı́sicas y del comportamiento
humanas con propósito de autentificación.
Figura 1.4: Autentificación biométrica en la entrada de unas instalaciones de ocio.
Las huellas dactilares, las retinas, el iris, los patrones faciales, las venas de la
mano o la geometrı́a de la palma de la mano, representan ejemplos de caracterı́sticas fı́sicas (estáticas), mientras que entre los ejemplos de caracterı́sticas del comportamiento se incluye la firma, el paso y el tecleo (dinámicas). La voz se considera
una mezcla de caracterı́sticas fı́sicas y del comportamiento, pero todos los rasgos
biométricos comparten aspectos fı́sicos y del comportamiento.
Un ejemplo del uso de la biometrı́a se muestra en la Figura 1.4, donde una mujer
es identificada mediante sus huellas dactilares en unas instalaciones de ocio.
1.2. CONCEPTOS
1.2.4.
7
Histograma de gradientes orientados
El algoritmo Histograma de gradientes orientados [7] se usa en ámbitos como la
visión por computador y el procesamiento de imágenes con el propósito de detectar
objetos en una imagen. La esencia de dicho algoritmo es que la forma de un objeto
en una imagen puede ser descrito por medio de la distribución de los gradientes.
El objetivo principal de esta técnica es la extracción de caracterı́sticas de una
imagen. Las caracterı́sticas son extraı́das teniendo en cuenta los bordes. El proceso de
obtener información de los bordes presentes en una imagen, se consigue calculando
los gradientes y las orientaciones de los pixels. Este proceso será explicado más
extensamente en capı́tulos posteriores.
1.2.5.
Algoritmo KNN
El algoritmo KNN (K nearest neighbors)[1] es un método de clasificación supervisada que sirve para estimar la probabilidad de que un elemento x pertenezca a
la clase C(j) a partir de la información proporcionada por el conjunto de prototipos, donde k determina el número de vecinos que son contemplados para realizar la
clasificación.
En el reconocimiento de patrones, el algoritmo KNN es usado como método de
clasificación de objetos basado en un entrenamiento mediante ejemplos cercanos en
el espacio de los elementos.
Figura 1.5: Ejemplo del algoritmo Knn.
En la Figura 1.5 se muestra un ejemplo sencillo del funcionamiento de este algoritmo. Supongamos que el elemento que se desea clasificar es el cı́rculo verde. Para
8
CAPÍTULO 1. INTRODUCCIÓN
k = 3 éste es clasificado con la clase triángulo, ya que de los 3 vecinos más cercanos
al cı́rculo verde hay sólo un cuadrado y 2 triángulos. Si k = 5 éste es clasificado
con la clase cuadrado, ya que entre los 5 vecinos más cercanos hay 2 triángulos y 3
cuadrados. Las relaciones de vecindad para K = 3 y K = 5 se han destacado en la
Figura mediante dos circunferencias concéntricas.
1.2.6.
Editado de Wilson
Una vez se tenga el clasificador entrenado, con el algoritmo Knn por ejemplo. Cabe la posibilidad de que el conjunto de elementos que se han utilizado para entrenar
al clasificador no sea el más conveniente. Es posible que algunos de esos elementos
sean algo ambiguos y no sean apropiados para enseñar al clasificador a diferenciar
entre un conjunto u otro.
Un ejemplo es la Figura 1.6(a), en ella se puede ver como los conjuntos marcados
en verde están fuera de lugar respecto a su clase. Si el clasificador los tiene en cuenta
obtendrá peores resultados ya que se trata de un caso extremo. Otro ejemplo con
más conjuntos es el 1.6(b), se pueden apreciar nueve conjuntos bien definidos y una
serie de elementos que nos e ajustan a los elementos de su clase y están dispersos
sin clase definida. Estos son los elementos que el editado de Wilson eliminarı́a.
Figura 1.6: Ejemplo conjuntos sin editado de Wilson.
Por lo tanto se puede resumir que el editado de Wilson [11] elimina del conjunto
de entrenamiento todos los elementos que no representen fidelignamente a su clase.
1.3. OBJETIVOS
1.2.7.
9
Local Binary Patterns
La técnica Local Binary Patterns [8] se ha empleado en multitud de ocasiones
con éxito en problemas de reconocimiento de rostros. Es otro algoritmo para extraer
caracterı́sticas de una imagen. Lo que diferencia una técnica de extracción de otra
es el método que se sigue para extraer las caracterı́sticas. En este caso, se compara
cada pixel con sus vecinos para conseguir detectar un cambio sustancial entre ellos,
es decir, un borde. A lo largo de este documento se profundizará más en este método.
1.3.
Objetivos
El objetivo principal al que se quiere llegar con este proyecto es estudiar el uso de
métodos de extracción de caracterı́sticas para la caracterización del género de humanos presentes en imágenes. En particular, los algoritmos Histograma de gradientes
orientados [7] y Local Binary Patterns [8]. Para cada uno de estos algoritmos, se
desarrollaran sus respectivas implementaciones y se evaluarán sus resultados. Con
dichos resultados se valorará la conveniencia de diseñar mejoras para los algoritmos,
o en caso contrario de implementar una técnica nueva. Con todos estos resultados
se podrá realizar una valoración sobre si los algoritmos estudiados son aptos para el
reconocimiento de género.
Otro objetivo que se plantea para este proyecto es la elaboración de ideas y pautas
que sirvan como guı́a para futuras investigaciones. Gracias a los datos extraı́dos en
este proyecto se estará en disposición de redactar conclusiones que ayudarán al
desarrollo de trabajos encaminados hacia este problema.
1.4.
Consideraciones previas sobre el problema
La medida del éxito de este trabajo depende de lo fidedignas que sean las caracterı́sticas extraı́das de las imágenes. Es decir, si en el caso de estudio se desea obtener
información sobre el perfil de una persona, este método tendrá mayor éxito si esa
información representa dicho perfil y además evita contener información superflua.
En la Figura 1.9(a) se muestra una imagen de la que obtenemos un patrón de caracterı́sticas el cual representa inequı́vocamente el perfil de una persona y además,
incluye poca información irrelevante para el propósito del proyecto. Por el contrario,
en la Figura 1.9(b) se puede observar como la información que se obtiene no muestra
el perfil de una forma tan obvia y presenta mucha más información superflua.
Para que se entienda mejor este concepto se puede hacer una analogı́a sobre
él: Dos profesores de instituto quieren hacer una estimación de los alumnos que
aprobarán sus asignaturas al final de curso. El profesor A ha ido anotando (entrenamiento) por cada alumno de cursos anteriores, su estatura, color de pelo, las horas
10
CAPÍTULO 1. INTRODUCCIÓN
Figura 1.7: Extracción de caracterı́sticas de una imagen
que dedicó al estudio y su calificación (extracción de caracterı́sticas). El profesor B
siguió el mismo procedimiento (entrenamiento) pero apuntó solo las horas de estudio y su calificación (extracción de caracterı́sticas). Al final de curso el profesor B
consiguió un ı́ndice de aciertos en la estimación de alumnos aprobados más alto que
el profesor A. ¿Por qué ha sucedido esto? La respuesta es muy simple, la estatura
y el color de pelo no tienen relación alguna con la calificación del alumno. Por lo
que el profesor A está teniendo en cuenta información superflua y eso empeora su
estimación.
Cabe la posibilidad de que ninguno de los algoritmos tratados sea el idóneo para
el estudio de la discriminación del género. El problema que se intenta abordar no es
sencillo, hay muchas probabilidades de que los algoritmos junto a sus variantes no
obtengan un buen resultado. Hay que reflexionar sobre el hecho de que incluso en
algunas ocasiones, los propios humanos no son capaces de diferenciar el género de
una persona. No se puede ser utópico y pensar que se puede elaborar un proceso que
mejore incluso la percepción humana. A esto hay que añadir que las imágenes que
conformarán el experimento pueden ser personas de espaldas, personas agachadas,
con ropa gruesa, entre multitudes etc. como se aprecia en la Figura 1.8.
1.5.
Vista previa del trabajo realizado
Como ya se ha explicado en apartados anteriores, el objetivo es la evaluación
de algoritmos de reconocimientos de patrones para su uso en el reconocimiento del
genero humano. Concretamente se han estudiado dos algoritmos, Histograma de
gradientes orientados [7] y Local Binary Patterns [8] en sus diferentes variantes.
1.5. VISTA PREVIA DEL TRABAJO REALIZADO
11
Figura 1.8: Ejemplo de imágenes ambiguas.
Figura 1.9: Algunas imágenes utilizadas en el proyecto.
La metodologı́a seguida en el desarrollo del proyecto ha sido un proceso cı́clico,
representado en la Figura 1.10. En primer lugar, se realiza la tarea de diseño, ya sea
de un algoritmo nuevo o de una variación de uno ya implementado. Seguidamente, se
implementa lo que se diseñó en la fase anterior. A continuación, se realizan pruebas
para determinar la efectividad y se interpretan los resultados. Finalmente, teniendo
en cuenta los resultados obtenidos, se plantean junto al tutor nuevas vı́as de mejora
encaminadas a aumentar el porcentaje de aciertos del programa.
El proceso de reconocimiento se puede separar en dos fases muy diferenciadas.
Por una lado la extracción de caracterı́sticas de una imagen y por otro lado, la
clasificación de una imagen en función de sus caracterı́sticas. A continuación se
pasará a explicar más detalladamente estas tareas.
La extracción de caracterı́sticas consiste en obtener ciertos valores de una imagen
que puedan describir a la misma. En este caso en concreto, lo que se quiere lograr es
que el perfil de la persona que aparece en una imagen quede definido por esos valores.
Estadı́sticamente los hombres y las mujeres se pueden diferenciar por ciertas zonas
del cuerpo. Por ejemplo, las mujeres suelen tener más caderas que los hombres, los
hombres, hombros más anchos que las mujeres etc. (ver Figura1.11).
Gracias a estas diferencias, las caracterı́sticas de la imagen de una mujer tendrı́an
que ser diferentes a las de un hombre y a su vez similares a las caracterı́sticas de otra
mujer y viceversa. Este es el punto clave para el éxito del proyecto. Si se consigue
12
CAPÍTULO 1. INTRODUCCIÓN
Figura 1.10: Metodologı́a seguida en el proyecto.
un algoritmo que extraiga las caracterı́sticas significativas que ayuden a diferenciar
el genero de las personas, se habrá conseguido dar solución al problema. Para este
fin es para lo que se utilizan el algoritmos de extracción de caracterı́sticas.
Una vez que se tienen las caracterı́sticas de una foto surge el problema de como
diferenciar una serie de números de otros para determinar el género. Aquı́ es donde
entra en juego el algoritmo Knn mencionado con anterioridad. Este clasificador
necesita de una información previa para lograr clasificar un conjunto de datos, el
algoritmo necesita aprender que patrón siguen las imágenes de género masculino y
que patrón siguen las de género femenino. Una vez el clasificador ha sido entrenado
es capaz de inferir si una foto es de mujer o de hombre.
En el Diagrama 1.12 se puede ver el proceso que seguirı́a el clasificador para su
entrenamiento.
Para que posteriormente el clasificador sea capaz de discriminar las imágenes
según el genero (ver Figura 1.13).
Como resultado de la metodologı́a seguida, se han desarrollado los siguientes
algoritmos sujetos a diferentes modificaciones:
1. Implementación de la versión inicial del algoritmo Histograma de gradientes
orientados y de algunas modificaciones del mismo.
1.5. VISTA PREVIA DEL TRABAJO REALIZADO
13
Figura 1.11: Diferencias fisiológicas entre hombres y mujeres.
Figura 1.12: Esquema del proceso entrenamiento.
2. Aplicar el editado de Wilson al conjunto de imágenes de entrenamiento.
3. Variante de Histograma de gradientes orientados con un enfoque local respecto
a las ventanas de extracción.
4. Implementación del algoritmo Local binary patters [8] para la extracción de
caracterı́sticas.
Más adelante se explicará con más detalles en que consisten estás mejoras y los
resultados obtenidos de ellas.
Los resultados obtenidos han sido satisfactorios desde el punto de vista de los objetivos marcados. Aún ası́, no ha conseguido ninguna versión del programa realmente
efectiva. En un principio, se consiguió mejorar el ı́ndice de resultados gradualmente
implementando las mejoras descritas recientemente. Pero cuando se probó la mejora
con el enfoque local, la tasa de aciertos descendió considerablemente, idem para la
técnica Local binary patters.
14
CAPÍTULO 1. INTRODUCCIÓN
Figura 1.13: Esquema del proceso clasificación.
Con estos resultados y para poder obtener unas conclusiones válidas, se elaboraron una serie de pruebas con el fin de descartar errores de programación. Y ası́ poder
concluir con veracidad, que los métodos usados no son aptos para el reconocimiento
del género humano.
1.6.
Antecedentes
Este proyecto se ha fundamentado en un proyecto previo, Detección de humanos
en imágenes [10]. El cual ha consistido en el desarrollo de métodos para la detección
automática de humanos en imágenes. A priori es un problema similar, pero con
suficientes diferencias como para que la utilización de algoritmos contemplados en
ese proyecto, no sean eficaces en éste.
A su vez, el proyecto Detección de humanos en imágenes se fundamenta en el
algoritmo Histograma de gradientes orientados. En el trabajo nombrado se contemplaron varias versiones respecto al algoritmo original. En una de ellas se mejoró el
tiempo de ejecución de la fase de extracción de caracterı́sticas (la más costosa). En
la tercera se modificó completamente la fase de extracción cambiando la filosofı́a
original. En esta última modificación no se utiliza el histograma de gradientes orientados, se emplea otra medida cualitativa, el número bordes que aparecen en cada
una de las filas de la imagen.
El proyecto Detección de humanos en imágenes ha tenido una gran influencia
para el desarrollo del que nos ocupa. Como base para este trabajo se empleó la
segunda versión del trabajo previo pero con algunas modificaciones. En la segunda
versión de dicho proyecto se utilizan ventanas de extracción con un ancho menor que
el ancho de la imagen (ver Figura 1.14(a)), mientras que en este proyecto se utilizan
ventanas con el mismo ancho que el de la imagen a procesar (ver Figura 1.14(b)).
1.7.
Organización del documento
Este documento se ha dividido en diversas secciones:
Introducción: Tiene como objetivo hacer una presentación del proyecto al
1.7. ORGANIZACIÓN DEL DOCUMENTO
15
Figura 1.14: Ventanas de extracción.
lector. Se introducen conceptos que en aras a la claridad no se desarrollan en
su totalidad y que se incidirán en ellos en capı́tulos posteriores.
Planificación: En este capı́tulo se pretende mostrar la planificación seguida en
el proyecto. Por un lado la planificación inicial y por otro lado, la planificación
real que se ha seguido.
Matlab/PRTools: Una vista previa a las funcionalidades utilizadas en Matlab
para este proyecto y a la librerı́a PRTools.
Descripción del proyecto: Aquı́ se explica con detalle todo el proceso de
desarrollo que ha seguido este trabajo.
Conclusiones: Por último, en este capı́tulo se explican las conclusiones a las
que se han llegado desde distintos puntos de vista.
16
CAPÍTULO 1. INTRODUCCIÓN
Capı́tulo 2
Planificación
Contenido
2.1. A priori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
2.1.1. Análisis y planificación . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.2. Proceso de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.3. Revisión final del proyecto . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2. A posteriori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
20
18
CAPÍTULO 2. PLANIFICACIÓN
2.1.
A priori
Una vez determinado el proyecto a realizar con el tutor del proyecto, se procedió a
hacer una planificación previa del proyecto a desarrollar. Se realizó una planificación
temporal de cada tarea a desarrollar y del coste temporal que conllevarı́a. De dicho
análisis se extrajo el diagrama de Gantt representado en la Figura 2.1.
Según la planificación estimada, el proyecto comenzará el 16 de Octubre del 2008
y finalizará el 9 de Febrero del 2009. A la hora de planificar las tareas temporalmente
se han tenido en cuenta los diferentes imprevistos que surgen en todo proyecto,
dando la suficiente holgura a tareas crı́ticas. El proyecto contará con un total de 300
horas invertidas durante 80 dı́as laborables, manteniendo la siguiente distribución
mensual:
Octubre: 4 horas/dı́a
Noviembre: 3 horas/dı́a
Diciembre: 3.5 horas/dı́a
Enero: 4.5 horas/dı́a
Febrero: 3 horas/dı́a
El proyecto se ha dividido en las siguientes tareas:
1. Proceso de análisis y planificación.
a) Determinar el ámbito del proyecto.
b) Establecer las herramientas a utilizar.
c) Definición de objetivos.
d ) Estudio de investigaciones previas.
e) Estudio de tareas a realizar.
f ) Planificación temporal de tareas.
g) Búsqueda e instalación del SW requerido.
h) Investigación de las tecnologı́as de desarrollo.
2. Proceso de desarrollo
a) Desarrollo cı́clico.
3. Revisión final del proyecto
a) Reunión con el profesor.
2.1. A PRIORI
19
b) Proceso de comprobación
c) Evaluación global de resultados.
d ) Definición de futuras mejoras.
e) Conclusiones.
f ) Realización de la memoria del proyecto.
g) Preparación de la presentación.
h) Realización de la presentación del proyecto.
2.1.1.
Análisis y planificación
En este apartado es donde se define junto al profesor qué alcance tendrá el
proyecto, las herramientas a utilizar y qué objetivos se quieren llegar a conseguir.
Una importante subtarea de este proceso es la fase de investigación previa. En ella
se fundamentarán gran parte de las tareas de diseño e implementación.
2.1.2.
Proceso de desarrollo
Esta es la fase más importante del proyecto. Es donde se implementará el proyecto propiamente dicho. Como ya se ha descrito anteriormente, el proceso de desarrollo
seguirá una metodologı́a cı́clica. A priori no se puede conocer el número de tareas que
constituyen esta fase. Las tareas comprendidas para las nuevas implementaciones o
modificaciones serán: diseño, implementación, evaluación de resultados y propuestas
de mejora.
2.1.3.
Revisión final del proyecto
La última tarea principal y no por ello la menos importante es la revisión final
del proyecto. En primer lugar, se realizará una serie de comprobaciones con el fin
de validar las implementaciones realizadas. Seguidamente, una de las subtareas de
este proceso es la evaluación global de resultados. En la que se hace un análisis
cuidadoso sobre los resultados obtenidos en la fase anterior de desarrollo. Una vez
reflexionado sobre los resultados obtenidos se ha planificado una tarea que consiste en
buscar nuevas vı́as de desarrollo para trabajos futuros. La subtarea conclusiones tiene
como objetivo hacer una valoración global del proyecto. Finalmente, como subtareas
ineludibles, se planificaron los procesos de realización de memoria, preparación de
la presentación y realización de la presentación.
20
CAPÍTULO 2. PLANIFICACIÓN
2.2.
A posteriori
Una vez establecida la planificación inicial se elaboró el proyecto. En dicho proceso surgieron inconvenientes que no se contemplaron en la planificación a priori.
Uno de los principales contratiempos fue la dificultad en el proceso de implementación, en la práctica se tuvo que dedicar más tiempo a esas tareas de lo estimado.
Se pasó de 6 dı́as de media a 8 dı́as por implementación. Otra dificultad encontrada
fue el desarrollo de la memoria, se calculó que se tardarı́a en escribirla 13 dı́as, a
posteriori fueron 18 dı́as.
Teniendo en cuenta todos estos inconvenientes, el proyecto comenzó el 16 de
Octubre del 2008 y finalizó el 23 de Febrero del 2009. Con un total de 93 dı́as
laborables y 340 horas invertidas con la siguiente distribución mensual.
Octubre: 4 horas/dı́a
Noviembre: 3 horas/dı́a
Diciembre: 3.5 horas/dı́a
Enero: 4.5 horas/dı́a
Febrero: 3 horas/dı́a
En las Figuras 2.2 y 2.3 aparece el diagrama de Gantt real del desarrollo del
proyecto.
2.2. A POSTERIORI
Figura 2.1: Diagrama de Gantt a priori.
21
22
CAPÍTULO 2. PLANIFICACIÓN
Figura 2.2: Diagrama de Gantt a posteriori de las primeras 34 tareas.
2.2. A POSTERIORI
Figura 2.3: Diagrama de Gantt a posteriori de las 29 tareas restantes tareas.
23
24
CAPÍTULO 2. PLANIFICACIÓN
Capı́tulo 3
Matlab / PRTools
Contenido
3.1. Introducción a Matlab . . . . . . . . . . . . . . . . . . . . . . . . .
26
3.2. Conceptos en el procesamiento de imágenes . . . . . . . . . . . .
26
3.3. Rutinas de lectura y escritura de imágenes . . . . . . . . . . . . .
27
3.4. Funciones dedicadas a la conversión de imágenes . . . . . . . . .
29
3.5. Funciones para la extracción de bordes . . . . . . . . . . . . . . .
29
3.6. Librerı́a PRTools para el reconocimiento de patrones . . . . . . .
30
25
26
CAPÍTULO 3. MATLAB / PRTOOLS
Este capı́tulo introduce algunos de los conceptos básicos del lenguaje de programación Matlab. El capı́tulo pretende convertirse en un pequeño manual que facilite
al lector la comprensión de las técnicas aplicadas, destacando exclusivamente aquellas funcionalidades directamente relacionadas con el proyecto.
3.1.
Introducción a Matlab
El lenguaje C++, por sus caracterı́sticas compartidas de alto y bajo nivel parece
ser el más apropiado para la implementación de algoritmos de visión computacional,
pero implementar algoritmos de visión artificial en C++ supondrı́a una gran inversión de tiempo en la fase de implementación y en la corrección de errores previo a
la fase de pruebas.
La inversión inicial de tiempo puede reducirse si la implementación de prueba es
realizada en Matlab, utilizando su librerı́a toolbox para el procesamiento de imágenes, con la seguridad de utilizar algoritmos cientı́ficamente comprobados y sólidos.
La librerı́a toolbox para el procesamiento de imágenes contiene un gran número de funciones para trabajar con imágenes binarias, trasformaciones cromáticas,
geométricas y morfológicas que, junto con las funciones ya integradas en Matlab,
permite realizar todo tipo de análisis y trasformaciones con imágenes.
Además se dispone de otro toolbox para el reconocimiento de patrones en Matlab
(PRtools) que suministra alrededor de 200 rutinas para el reconocimiento de patrones y otras tareas estadı́sticas. Incluye procedimientos para la generación de datos,
la formación de clasificadores, la combinación de clasificadores, las caracterı́sticas de
selección, lineales y no lineales, extracción de caracterı́sticas, la densidad de estimación, análisis de agrupamiento, la evaluación y la visualización. PRtools se inició en el
grupo de investigación de reconocimiento de patrones de la Universidad Tecnológica
de Delft en 1993.
En esta sección se comentarán brevemente algunas de las funciones más utilizadas
en el procesamiento de imágenes y que han sido de gran utilidad para el desarrollo
de este proyecto.
3.2.
Conceptos en el procesamiento de imágenes
Una imagen a escala de grises en Matlab es representada por medio de una
matriz bidimensional de m x n elementos, donde n representa el número de pı́xeles
de ancho y m el número de pı́xeles de alto. El elemento v11 corresponde al elemento
de la esquina superior izquierda (ver Figura 3.1). Cada elemento de la matriz de la
imagen tiene un valor de 0 (negro) a 255 (blanco).
Esta posibilidad de almacenamiento supone que trabajar con imágenes en Matlab
3.3. RUTINAS DE LECTURA Y ESCRITURA DE IMÁGENES
27
Figura 3.1: Representación de una imagen a escala de grises en Matlab
sea similar a trabajar con cualquier otro tipo de dato matricial, por lo que es posible
seleccionar un determinado pı́xel de la imagen mediante el formato tı́pico de acceso
a un elemento de una matriz: I(123,56)
Por otro lado, una imagen en color RGB es representada por una matriz tridimensional m x n x p, donde m y n tienen el mismo significado que para el caso de
las imágenes a escala de grises mientras que p representa el plano, que para RGB
puede ser 1 para el rojo, 2 para el verde y 3 para el azul. La ilustración 3.2 muestra
algunos detalles sobre estos conceptos.
3.3.
Rutinas de lectura y escritura de imágenes
La lectura de imágenes contenidas en un archivo desde el entorno Matlab se
realiza mediante la función imread, cuya sintaxis es:
imread(‘nombre del archivo’)
donde nombre del archivo es una cadena de caracteres conteniendo el nombre
completo de la imagen con su respectiva extensión.
28
CAPÍTULO 3. MATLAB / PRTOOLS
Si se desea almacenar la imagen perteneciente al archivo data.jpg en una variable para su procesamiento en Matlab, se deberı́a escribir la siguiente sentencia
en lı́nea de comandos:
image=imread(’data.jpg’);
La variable image contendrá la representación matricial de la figura leı́da por
la función imread(). Para el posterior procesamiento de las imágenes, Matlab
necesita de dicha representación matricial.
Para obtener el tamaño de la imagen se utiliza la función size(variable):
[m, n]=size(image);
Donde m y n contendrán los valores de las dimensiones de la imagen.
Para almacenar el contenido de una imagen en un archivo se utiliza la función:
Imwrite(image,´nombre del archivo’);
Donde image representa la variable que contiene a la imagen y nombre del
archivo el nombre del archivo con su respectiva extensión. Suponiendo que
la variable image2 contiene la imagen que nos interesa grabar en el archivo
dato2.jpg tendrı́amos que escribir:
imwrite(image2, ’data2.jpg’);
Después de realizar un procesamiento con la imagen, es interesante visualizar
el resultado obtenido. Para ello se usa la función:
imshow(variable);
Permite desplegar la imagen en una ventana en el entorno de trabajo de
Matlab.
3.4. FUNCIONES DEDICADAS A LA CONVERSIÓN DE IMÁGENES
3.4.
29
Funciones dedicadas a la conversión de imágenes
Para cambiar una imagen de formato RGB a escala de grises se utiliza la
función rgb2gray(). El formato de dicha función es:
imagegray =rgb2gray(imageRGB);
Del mismo modo, para pasar la imagen de escala de grises a blanco y negro,
podrı́amos utilizar la siguiente sentencia:
imNueva = double(imNueva)/256.0;
Matlab permite también redimensionar imágenes mediante la función:
B = imresize(A, [mrows ncols]);
imresize() devuelve una imagen B con el número de filas y de columnas especificadas por [mrows ncols] a partir de la imagen original A. Si no se especifica
el número de filas o el número de columnas, imresize calcula automáticamente
el parámetro omitido preservando siempre las proporciones de la imagen.
3.5.
Funciones para la extracción de bordes
En visión por computador es especialmente útil la extracción de bordes de los
objetos. La función edge de Matlab permite fácilmente su extracción a partir de
una representación en escala de grises. Dicha función, permite encontrar los bordes
mediante dos algoritmos diferentes: canny y sobel. El formato de la función es el
siguiente:
image = edge(imageGray, algoritmo);
donde en la variable image se almacena la matriz resultado que representa los bordes
extraı́dos, imageGray es la variable que contiene la imagen en escala de grises de
la cual se pretenden extraer los bordes y finalmente, algoritmo especifica el tipo
de algoritmo que se desee utilizar en el proceso de extracción. En nuestro caso de
estudio se ha utilizado siempre el algoritmo canny. En la siguiente ilustración, se
muestra la imagen original seguida de la imagen resultado.
30
CAPÍTULO 3. MATLAB / PRTOOLS
3.6.
Librerı́a PRTools para el reconocimiento de
patrones
Disponibilidad, licencias y derechos de autor
La librerı́a PRTools se puede descargar desde el sitio Web http://prtools.org/
y su uso está protegido por una licencia. Esta licencia es gratuita para fines
no comerciales, académicos y de investigación.
Motivación
En el reconocimiento de patrones estadı́sticos se estudian técnicas para la
generalización de datos y de reglas de decisión que se utilizarán para el reconocimiento de patrones en conjuntos de datos experimentales.
Esta área de investigación tiene un fuerte carácter computacional, exigiendo
un uso flexible de programas numéricos para el análisis de datos, ası́ como para
la evaluación de los procedimientos. Es por ello que se necesita una plataforma de programación que permita una rápida y flexible aplicación. La librerı́a
PRTools, debido a su carácter general en comparación con otros entornos de
estadı́stica más especializados, ofrece una fácil integración con el preprocesamiento de datos de cualquier naturaleza. Este carácter general que ofrece la
librerı́a queda por completo compensado por el gran conjunto de toolboxes
disponibles en Matlab.
Sin embargo, PRTools también tiene algunas limitaciones. Debido a la fuerte
demanda de memoria de Matlab, surgen grandes problemas y dificultades con
el aprendizaje de conjuntos que dispongan de decenas de miles de objetos ya
que no pueden ser manipulados por computadores de prestaciones moderadas
(en el cuarto capı́tulo, se comentarán las principales dificultades que surgieron
en la fase experimental, en torno a este problema propio de Matlab).
Conceptos esenciales
PRTools hace uso de la posibilidad ofrecida por Matlab para definir el concepto
de clases y objetos. Estos conceptos de programación no deben confundirse con
las clases y objetos, tal como se definen en el reconocimiento de patrones. En
PRtools se trabaja con los conceptos de dataset y mapping.
Un gran número de operadores (como * o [ ]) y comandos de Matlab han sido
sobrecargados y por lo tanto tienen un significado especial cuando se aplican
a un dataset y / o a un mapping.
La estructura central de datos de PRTools son los datasets. Se componen principalmente de un conjunto de objetos representados por una matriz de vectores
3.6. LIBRERÍA PRTOOLS PARA EL RECONOCIMIENTO DE PATRONES 31
de caracterı́sticas. Se adjunta a esta matriz un conjunto de etiquetas para cada objeto y un conjunto de nombres de función, también llamada función de
las etiquetas. Las etiquetas pueden ser números o cadenas de caracteres. Por
otra parte, se almacena un conjunto de probabilidades por cada clase. En la
mayorı́a de los archivos de ayuda PRTools, un dataset se denota por A.
Las estructuras de datos de las “clases”de tipo mapping almacenan datos de
transformaciones (“mapping”), clasificadores, funciones de extracción de resultados, definiciones de datos de escala, las proyecciones no lineales, etc. Por
lo general son denotados por W.
Implementación
La forma más fácil de aplicar un mapping W a un dataset A es mediante
la operación W*A. El sı́mbolo de multiplicación de matrices * está sobrecargado para este fin. Es similar a la tuberı́a (‘|‘) en Unix. Esta operación
puede escribirse también como map . Al igual que en cualquier otra operación
en Matlab, las concatenaciones de las operaciones son posibles (por ejemplo,
A*W1*W2*W3 ) y se ejecutan de izquierda a derecha.
Ejemplo básico
Como ejemplo, vamos a ver como entrenar a un clasificador y posteriormente, testear sus resultados. El primer paso consistirı́a en la conversión de los
datos obtenidos en las fases de extracción de caracterı́sticas (FV Train Set y
FV Test Set) en datasets para que Matlab pueda computarlos:
Train = dataset(FV Train Set(:,1:756), FV Train Set(:,757));
Test = dataset(FV Test Set(:,1:756), FV Test Set(:,757));
La expresión FV Train Set(:,1:756) corta para todas las filas, las columnas de
la 1 a la 756, es decir, los vectores caracterı́sticos de todas las imágenes, y la
expresión FV Train Set(:,757) corta para todas las filas, la última columna, es
decir, la que contiene las etiquetas que identifican la clase a la que pertenece
cada imagen.
Como se puede observar, disponemos de un conjunto de datos llamado “Train“
que se encarga de entrenar a los clasificadores en la fase de entrenamiento o
“training“ y un conjunto de datos denominado “Test“ cuya misión consiste en
testear los clasificadores entrenados previamente.
Para este ejemplo, supondremos que FV Train Set y FV Test Set contienen
vectores de 756 caracterı́sticas para cada objeto y que además están etique-
32
CAPÍTULO 3. MATLAB / PRTOOLS
tadas en la componente 757 con un entero [0 ó 1] dependiendo si el objeto
corresponde a una imagen humana (1) o no humana (0).
La siguiente etapa se basa en el entrenamiento de los clasificadores. PRtools
proporciona muchos tipos de clasificadores. En este capı́tulo se verán únicamente algunos de ellos. Cada una de las siguientes funciones encargadas de
crear clasificadores: ldc, qdc, svc, knnc, parzenc y bpxnc se diferencian en el
algoritmo utilizado para el cálculo de discriminantes.
W1
W2
W3
W4
W5
W6
=
=
=
=
=
=
ldc(Train);
qdc(Train);
svc(Train);
knnc(Train,1);
parzenc(Train);
bpxnc(Train,3);
La función de clasificación lcd() utiliza un algoritmo lineal, qdc() se basa en
cómputos cuadráticos, svc() utiliza una máquina de soporte vectorial como
clasificador, basado en polinomios de 2 o orden, knnc() está implementado de
acuerdo con el algoritmo del n vecino más cercano, parzenc() se basa en la
estimación de Parzen que aplica una serie de ventanas o funciones base (una
por cada muestra xi ), suavizadas (Gaussianas) y centradas en dicha muestra.
Por último, bpxnc() utiliza una red neuronal con n unidades ocultas.
La siguiente instrucción nos permite computar y mostrar por pantalla los errores de clasificación obtenidos por las funciones discriminadoras en la fase de
test:
disp([testc(Test*W1), testc(Test*W2), testc(Test*W3), testc(Test*W4),
testc(Test*W5), testc(Test*W6) ]);
Como se puede observar, PRtools ha sobrecargado el operador * para permitir el cómputo necesario entre los datos que se desean testear y la función
discriminadora entrenada en la fase anterior.
Por último, se podrı́an mostrar gráficamente los resultados obtenidos, para
visualizar las decisiones que las funciones discriminadoras y clasificadores han
tomado sobre los datos iniciales. La función scatterd(A) muestra la frontera
de decisión.
scatterd(A);
plotc(W1, W2, W3, W4, W5, W6);
Obteniendo un resultado similar a la figura 3.4:
3.6. LIBRERÍA PRTOOLS PARA EL RECONOCIMIENTO DE PATRONES 33
Figura 3.2: Representación de una imagen a color RGB en Matlab
34
CAPÍTULO 3. MATLAB / PRTOOLS
Figura 3.3: Resultado de la aplicación del algoritmo canny
Figura 3.4: Gráfica de los distintos clasificadores.
Capı́tulo 4
Descripción del proyecto
Contenido
4.1. Analisis y planificación . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.1.1. Determinar el ámbito del proyecto . . . . . . . . . . . . . . . . . . . 37
4.1.2. Definir herramientas a utilizar . . . . . . . . . . . . . . . . . . . . . 37
4.1.3. Definición de objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1.4. Estudio de investigaciones previas y tecnologı́as de desarrollo . . . . 38
4.1.5. Estudio y planificación temporal de tareas . . . . . . . . . . . . . . . 38
4.1.6. Búsqueda e instalación del SW requerido . . . . . . . . . . . . . . . 39
4.2. Desarrollo versión inicial . . . . . . . . . . . . . . . . . . . . . . . .
40
4.2.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2.3. Ejecución de los test y resultados . . . . . . . . . . . . . . . . . . . . 53
4.3. Desarrollo mejora 1, editado de Wilson . . . . . . . . . . . . . . .
59
4.3.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.3.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.3.3. Ejecución de los test y resultados . . . . . . . . . . . . . . . . . . . . 61
4.4. Desarrollo mejora 2, enfoque local . . . . . . . . . . . . . . . . . .
63
4.4.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.4.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.4.3. Ejecución de los test y resultados . . . . . . . . . . . . . . . . . . . . 69
4.5. Desarrollo mejora 3, Local binary patterns . . . . . . . . . . . . .
75
4.5.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
35
36
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
4.5.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.5.3. Ejecución de los test y resultados . . . . . . . . . . . . . . . . . . . . 78
4.6. Revisión del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . .
81
4.6.1. Proceso de comprobación . . . . . . . . . . . . . . . . . . . . . . . . 81
4.6.2. Evaluación global de los resultados . . . . . . . . . . . . . . . . . . . 82
4.6.3. Futuras vı́as de investigación . . . . . . . . . . . . . . . . . . . . . . 83
4.1. ANALISIS Y PLANIFICACIÓN
37
En el presente capı́tulo se va a describir el proyecto explicando detalladamente
cada una de las tareas por las que está compuesto. Estas tareas corresponden a las
actividades que se muestran en el diagrama de Gantt (ver Figuras 2.2 y 2.3)
4.1.
4.1.1.
Analisis y planificación
Determinar el ámbito del proyecto
Una vez establecido el tema del proyecto hay que orientarlo hacia una dirección
en concreto. En este proyecto se estudiará el uso de técnicas de extracción de caracterı́sticas para diferenciar el género de los humanos en imágenes. Estas imágenes
pueden ser tomadas desde cualquier ángulo y estando la persona en cualquier posición. El único requisito que se contempla es que la persona esté centrada en la
imagen y que efectivamente, haya una persona.
4.1.2.
Definir herramientas a utilizar
Para la implementación del trabajo se decidió emplear el entorno Matlab. El uso
de Matlab se justifica en que es una herramienta muy potente para el procesamiento de matrices y Matlab interpreta las imágenes como matrices. Además, existen
librerı́as para clasificación de datos como es la PRTools [12] que ayudan a inferir a
qué grupo pertenece la imagen, si pertenece a hombres o a mujeres.
Para la planificación se determinó que la herramienta más completa es Microsoft
Project. Y para desarrollar la memoria se empleará el lenguaje LATEX con el editor
WinEdt.
4.1.3.
Definición de objetivos
El objetivo principal al que se quiere llegar con este proyecto es estudiar el
uso de métodos de extracción de caracterı́sticas para la caracterización del genero
de humanos presentes en imágenes. En particular, los algoritmos Histograma de
gradientes orientados y Local Binary Patterns [8]. Lo que se pretende es poder
discernir el género de un humano presente en una imagen.
Como objetivo también se contempla la elaboración de ideas para desarrollar nuevas vı́as de investigación en futuros trabajos. Dada la naturaleza de este problema,
es posible que no se llegue a desarrollar un algoritmo lo suficientemente efectivo. Es
por ello que, gracias al trabajo desarrollado en este proyecto, se ayude a encaminar
proyectos en este campo.
38
4.1.4.
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Estudio de investigaciones previas y tecnologı́as de
desarrollo
Con el fin de obtener información respecto al reconocimiento de genero en personas se ha realizado una investigación para hallar una base sólida que fundamente
este trabajo. En primer lugar se buscó información referida a temas relacionados con
la visión por computador, reconocimiento de patrones, biometrı́a, etc. Por otro, se ha
encontrado información referente al uso de técnicas de extracción de caracterı́sticas
([7], [8], [10]). Finalmente se obtuvo mucha información respecto al uso del Matlab
[9]) y respecto a la librerı́a PRTools ([12])
4.1.5.
Estudio y planificación temporal de tareas
Para el correcto desarrollo del proyecto, se ha elaborado un listado de tareas
a realizar ası́ como su coste temporal. En la figura 4.1 se pueden ver las tareas a
realizar y el tiempo que llevará su realización.
Figura 4.1: Tareas principales del proyecto.
4.1. ANALISIS Y PLANIFICACIÓN
4.1.6.
39
Búsqueda e instalación del SW requerido
El software necesario para la elaboración del proyecto es: Matlab 2006, librerı́a
PRTools, Microsoft Project y un compiladore/editor de LATEX bajo windows XP.
La instalación de Matlab y de Microsoft Project no tiene más dificultad que
seguir el asistente de instalación. Una vez instalado el entorno Matlab, hay que
incluir la librerı́a PRTools en el código. Para ello se guarda en la carpeta de trabajo
del proyecto la carpeta que contiene la librerı́a y se añade esta lı́nea al principio de
cada script: addpath(’./prtools/’);
Para poder escribir la memoria en LATEX tenemos que instalar un compilador en
Windows XP de dicho lenguaje. También serı́a altamente recomendable la instalación de un editor de texto especial para LATEX. La instalación consta de los siguientes
pasos, siendo importante el orden:
1. Instalar Acrobat Reader
2. Instalar la última versión de AFPL de Ghostscript y Ghostview.
3. Instalar el compilador Miktex.
4. Instalar el editor WinEdt.
40
4.2.
4.2.1.
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Desarrollo versión inicial
Diseño
Como ya se ha descrito en la sección 1.5, el diseño inicial consta de tres partes
muy diferenciadas, la extracción de caracterı́sticas de una imagen, el proceso de
aprendizaje del clasificador y el proceso de inferencia sobre el clasificador entrenado.
Para conseguir entrenar al clasificador es necesario crear una BBDD de imágenes lo
suficientemente numerosa para conseguir una muestra estadı́stica válida. A modo de
aproximación sencilla a la estructura de esta implementación, se realizará un breve
resumen del proceso.
En primer lugar, la fase de entrenamiento se obtendrı́an las imágenes de la BBDD
y se extraerı́an sus caracterı́sticas para obtener un valor numérico que defina a la
imagen. Esas caracterı́sticas se pasarı́an al clasificador junto a la certeza de que ese
valor numérico representa a un hombre o una mujer. Con esto se consigue que el
clasificador sea capaz de inferir en el futuro si un vector de caracterı́sticas representa
a un hombre o a una mujer.
Una vez está entrenado el clasificador, el programa pasa a otra fase llamada
inferencia. En esta fase es donde a partir de una imagen en la cual no se sabe el
género de la persona, el programa es capaz de diferenciar una imagen de hombre o
de mujer. Para esto, se obtienen las caracterı́sticas de la foto a estudiar y se pregunta
al clasificador cual es el género de la persona presente en la foto. Como el clasificador
ya sabe en términos estadı́sticos qué forma tienen los vectores de mujer y de hombre,
deberı́a ser capaz de determinar el género.
Como se ha podido observar, el proceso de extracción de caracterı́sticas está incluido en la fase de aprendizaje y en la fase de inferencia. Hay que recalcar que
este es el proceso más crı́tico del proyecto, de él depende en gran medida el éxito o
fracaso del proyecto. Más adelante se realizará una explicación más detallada, pero a
grosso modo, es el proceso por el cual se llega a representar las caracterı́sticas de una
imagen mediante números, que un ordenador sea capaz de entender e interpretar.
Elaboración de la BBDD de imágenes
Para la correcta validación de los diferentes algoritmos de extracción de caracterı́sticas se tienen que emplear un amplio número de imágenes. La fuente principal
de imágenes ha sido la proporcionada por la Base de Datos de INRIA, que se puede
encontrar en http://lear.inrialpes.fr/data. Un ejemplo de las fotos empleadas
se muestran en la figura 4.2.
Al necesitar una cantidad considerable de imágenes resulta interesante tener una
BBDD para administrarlas correctamente. En nuestro caso de estudio bastará con
un fichero de texto que contenga la ruta de dichas imágenes seguido de un 0 si la
4.2. DESARROLLO VERSIÓN INICIAL
41
Figura 4.2: Muestra de imágenes de la BBDD
imagen pertenece a un hombre o un 1 indicando que es una mujer Listado 4.11.
1
2
3
4
5
6
7
8
9
10
11
12
13
..\..\Imagenes\TRAIN\Hombre\H1306.ppm 0
..\..\Imagenes\TRAIN\Hombre\H1307.ppm 0
..\..\Imagenes\TRAIN\Hombre\H1308.ppm 0
..\..\Imagenes\TRAIN\Hombre\H1309.ppm 0
..\..\Imagenes\TRAIN\Hombre\H1310.ppm 0
..\..\Imagenes\TRAIN\Hombre\H1311.ppm 0
..\..\Imagenes\TRAIN\Hombre\H1312.ppm 0
..\..\Imagenes\TRAIN\Mujer\M0002.ppm 1
..\..\Imagenes\TRAIN\Mujer\M0003.ppm 1
..\..\Imagenes\TRAIN\Mujer\M0004.ppm 1
..\..\Imagenes\TRAIN\Mujer\M0009.ppm 1
..\..\Imagenes\TRAIN\Mujer\M0010.ppm 1
..\..\Imagenes\TRAIN\Mujer\M0011.ppm 1
Listado 4.1: Fragmento de la BBDD de imágenes
Partiendo de un conjunto de 3000 imágenes se han dividido en 2 grupos. Un
conjunto de entrenamiento que se usará para el aprendizaje del clasificador y otro
conjunto de test que servirá para que estimar el grado de acierto del algoritmo. Las
proporciones de estos estas particiones respecto al conjunto global son de 75 % y
25 % respectivamente. Siendo el número de mujeres y hombres equitativo en cada
partición. Este proceso se conoce como etiquetado manual.
Teniendo todo esto en cuenta, se procedió elaborar una selección de las imágenes
y a cumplimentar los ficheros train.txt y test.txt. Ambos ficheros tendrán el formato
del Listado 4.11 y servirán para las posteriores fases de desarrollo.
42
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Esquema de módulos
Antes de comenzar con la implementación propiamente dicha, se realizó un diseño
en el que se definı́an los módulos por los que tenı́a que estar compuesto el proyecto.
Estos esquemas tienen una gran importancia. Por un lado, una buena esquematización ayuda al correcto desarrollo del proyecto, aportando claridad y abstrayendo
conceptos detallados de otras fases del mismo. Por otro, facilita la incorporación de
las distintas mejoras que se hagan en el futuro.
Por motivos funcionales, el diseño teórico planteado en las Figuras 1.12 y 1.13 de
la sección 1.5 ha variado ligeramente. Desde un único script en Matlab se entrena al
clasificador con las imágenes de entrenamiento (train.txt) y se comprueba la eficacia
del programa con las imágenes de test (test.txt). Los módulos implicados en este
proceso son los representados en la Figura 4.3.
Figura 4.3: Esquema de módulos del proyecto
ScriptPR: Este es el script principal del programa. Su función primordial es
la de dirigir el proceso primario de la aplicación. En él se ejecutarán las fases
de extracción de caracterı́sticas de las imágenes, la fase de entrenamiento y la
fase de inferencia. Como resultado, este módulo mostrará la tasa de aciertos
del programa.
4.2. DESARROLLO VERSIÓN INICIAL
43
CreateFVFile: Este módulo tiene como finalidad el procesamiento de imágenes para obtener sus respectivos vectores de caracterı́sticas. Recibe como parámetro un fichero similar al del listado 4.11 y una serie de parámetros de configuración. Y devuelve un fichero que contiene el vector de caracterı́sticas de cada
una de las imágenes.
Preprocess: Este módulo tiene como finalidad la de convertir una imagen en
color, a una en escala de grises con valores normalizados entre 0 y 1.
WeightVector: Tiene como fin la creación de un vector N cuyos valores representan una campana de Gauss. Con esto se consigue tener un vector de
pesos dando más importancia a la zona central.
ExtractFeature: Aquı́ es donde se extrae las caracterı́sticas de una imagen.
Las caracterı́sticas no son más que una serie de números que definen a una
determinada imagen. Este módulo merece una explicación más extensa que se
presentará seguidamente.
NormalizeIntensity: Dada una porción de imagen, este módulo se encarga
de normalizarla para que sea más eficaz el proceso de análisis.
IIMean: Obtiene la media de cada una los pixels respecto a sus sus vecinos
en una porción de imagen.
IIStd: Obtiene la desviación de cada una los pixels respecto a sus sus vecinos
en una porción de imagen.
EstimateGradOriMag: Este módulo es el encargado de, a partir de un imagen, obtener la matriz de magnitudes y la matriz de orientaciones de la misma.
HOG: Calcula el histograma de orientaciones de una imagen. Este es justamente el valor que representa a una imagen segun el algoritmo histograma de
gradientes orientados.
PostProcessVector: Procesa el vector de caracterı́sticas asociado a una imagen. Básicamente se encarga de acotar los picos del vector y normalizar sus
valores.
Proceso de extracción de caracterı́sticas
Este es el proceso más importante del proyecto, de él depende en gran medida
el cumplimiento de los objetivos marcados. Esto se debe a que estamos extrayendo caracterı́sticas de una imagen para que la representen. Pero esas caracterı́sticas
tienen que ser las que se precisen para el propósito de este trabajo. No sirve, por
44
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
ejemplo, que las caracterı́sticas extraı́das representen el color de piel de una persona.
Lo que se exige es que las caracterı́sticas representen la silueta de una persona, para
poder discriminar de forma precisa el género. A continuación, se explicarán los pasos
que tiene que seguir el algoritmo para obtener un vector numérico a partir de una
imagen.
1. En primer lugar la imagen tiene que pasar por un preproceso para aumentar
la eficiencia y eficacia de las fases posteriores. En esta fase lo que se precisa
conseguir es transformar una imagen en color, a otra en escalas de grises.
Estando los valores de cada pixel comprendidos entre 0 y 1. Representado en
Matlab, la transformación que sufrirı́an los pixels de la imagen se muestra en
la Figura 4.4. En la figura 4.5 se da un ejemplo de cual serı́a el aspecto que
tendrı́a una fotografı́a después del preproceso.
Figura 4.4: Conversión de una imagen a valores comprendidos entre 0 y 1.
2. Según el algoritmo histograma de gradientes orientados, el siguiente paso es
dividir la imagen en fragmentos que a partir de este momento llamaremos
ventanas. Para cada ventana se tendrá que calcular su vector de caracterı́sticas.
El vector de caracterı́sticas final, será una concatenación de los vectores de las
ventanas que componen una imagen (ver figura 4.6).
3. Para cada una de las ventanas obtenidas se normalizarı́a su intensidad con
el fin de que su media sea 0 y su varianza 1. Para acelerar el proceso de
normalización se ha optado por usar la imagen integral. La imagen integral
en el punto (c, r) (c por column, r por row) contiene la suma del valor de los
pixels arriba y a la izquierda de dicho punto, inclusive, es decir:
ii(c, r) =
X
img(c0 , r0 )
(4.1)
c0 ≤c,r0 ≤r
Donde img(c,r) es la imagen origen e ii(c,r) es la imagen integral resultado.
Usando la imagen integral se puede calcular cualquier suma de los valores de
4.2. DESARROLLO VERSIÓN INICIAL
45
Figura 4.5: Preproceso de una imagen.
una zona de la imagen con únicamente cuatro búsquedas en la matriz que
contiene los valores de la imagen integral, tal como se muestra en la figura 4.7
Para normalizar cada ventana de extracción, en primer lugar se calculará la
imagen integral y la imagen integral al cuadrado, para posteriormente normalizar cada ventana de extracción mediante la siguiente ecuación:
im(c, r) =
img(c, r) − µ
σ
(4.2)
Para calcular la media y la varianza de cada ventana de extracción se usará tanto la imagen integral ii como la imagen integral al cuadrado ii2 tal como indican
las siguientes fórmulas:
S1 = ii(cf , rf ) + ii(c0 − 1, r0 − 1) − ii(cf , r0 − 1) − ii(c0 − 1, rf )
S2 = ii2 (cf , rf ) + ii2 (c0 , r0 ) − ii2 (cf , r0 − 1) − ii2 (c0 − 1, rf )
S1
µ=
N
s
S2
σ=
− µ2
N
En la figura 4.8 se puede ver un ejemplo visual de este proceso.
(4.3)
(4.4)
(4.5)
(4.6)
46
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Figura 4.6: Ejemplo de obtención del vector de caracterı́sticas.
4. Una vez normalizada la imagen, el siguiente paso es calcular la magnitud y la
orientación del gradiente de cada pixel. El gradiente denota una dirección en el
espacio según el cual se aprecia una variación de una determinada propiedad.
En nuestro caso, se quiere localizar las variaciones o contraste de color e intensidad en la imagen. En la figura 4.9 se aprecian las variaciones en la dirección
del gradiente en función del contraste entre los colores blanco y negro.
El cálculo del gradiente se consigue filtrando la imagen mediante las siguientes
dos máscaras unidimensionales: la horizontal [-1, 0, 1] y la vertical [-1, 0, 1]. En
la figura 4.10 se muestra un ejemplo del cálculo del gradiente. En la izquierda
se encuentra la imagen original, en medio, se muestran las direcciones que toma
cada gradiente, y en la derecha se representa la imagen original de acuerdo con
la norma del gradiente.
5. En la posterior fase del método de extracción de caracterı́sticas es necesario
dividir el gradiente en dos componentes, la magnitud y la orientación. El resultado esperado serı́a entonces dos matrices, una que represente las magnitudes
del gradiente en cada pixel de la imagen original y otra matriz que contenga
las orientaciones del gradiente en cada pixel.
Partiendo de la matriz de orientaciones y de la matriz de magnitudes asociadas
a la ventana de extracción se tiene que crear un histograma de orientaciones.
Este histograma se construye con un vector de talla N, siendo N el número de
orientaciones contempladas en nuestro caso. Para cada uno de los pixel de la
4.2. DESARROLLO VERSIÓN INICIAL
47
Figura 4.7: Cálculo del valor de la imagen integral.
ventana de extracción, se obtiene la magnitud y se acumula en la posición del
vector que viene determinada por la orientación del pixel. Antes de acumular la
magnitud del pixel se le aplica un peso. El peso que se aplica a un posición x de
la imagen viene determinado por una función gaussiana. El valor acumulado
en cada posición del vector de caracterı́sticas es la magnitud del gradiente
multiplicado por el peso asociado al ı́ndice x de la imagen (ver Figura 4.11).
De este modo se consigue dar más relevancia a la parte central de la imagen,
que es donde se encuentra la persona.
Suponiendo que se consideran 9 orientaciones y que se han utilizado 10 ventanas de extracción a la imagen, el vector de caracterı́sticas final tendrı́a una
dimension de 9x10 = 90.
6. Por último, se aplica un pos-proceso al vector de caracterı́sticas. Primero se
normalizan sus valores para posteriormente umbralizar los picos y volver a
normalizar el vector resultante.
Partiendo de esta explicación, se pueden extraer las siguientes variables que
condicionan el comportamiento de este proceso:
Alto de la ventana de extracción.
Solapamiento entre ventanas.
Sigma para el vector de pesos.
Número de orientaciones contempladas.
Umbral para el pos-proceso del vector de caracterı́sticas.
Estos parámetros son los que habrá que variar para conseguir un resultado
óptimo en la aplicación. Como se ha dicho en múltiples ocasiones, cuanto
48
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Figura 4.8: Normalización de una imagen.
más representativo sea el vector de caracterı́sticas respecto al género de las
personas, mejores resultados se obtendrán.
Proceso de aprendizaje e inferencia del clasificador
En esta fase, el primer paso consiste en añadir al clasificador los vectores de
caracterı́sticas obtenidos de las imágenes de entrenamiento, junto con información
que identifica a cada vector con la clase a la que pertenece, para que el clasificador
reconozca que tipo de caracterı́sticas son comunes en las imágenes de hombres y
cuales a las de mujeres.
Una vez entrenado el clasificador, para cada vector caracterı́stico extraı́do de las
imágenes de test, se realiza una búsqueda de los K vectores de entrenamiento más
cercanos. En este proceso, se obtiene tanto la lista de los K vecinos más cercanos,
como las distancias a los mismos. Finalmente, a la imagen que se está evaluando se
le asigna la clase a la que pertenecen la mayorı́a de los K vectores caracterı́sticos
más cercanos.
Vista general del proceso
A modo de vista general sobre los procesos que intervienen en el proyecto, se ha
elaborado el esquema de la figura 4.12. En él se detallan cada uno de los procesos
que se llevan a cabo y en que fase están comprendidos.
4.2. DESARROLLO VERSIÓN INICIAL
49
Figura 4.9: Variaciones del gradiente.
4.2.2.
Implementación
Después de haber hecho un exhaustivo estudio en el diseño se encamina la tarea
de implementación del proyecto. En esta sección se describe la implementación de la
aplicación en su versión inicial. De cada uno de los módulos presentes en la figura 4.3
se procederá a describir su funcionamiento mediante pseudocódigo y una explicación
detallada del algoritmo.
ScriptPR.m
Su función primordial es la de dirigir el proceso primario de la aplicación. En el
se ejecutarán las fases de extracción de caracterı́sticas de las imágenes, la fase de
entrenamiento y la fase de inferencia. Como resultado, este módulo mostrará la tasa
de aciertos del programa.
1
2
3
4
RG_CreateFVFile (input_test, output_test, tamVentanaX, desplazamiento,
sigma, nbins, locbin, TH)
lenFV
:= RG_CreateFVFile(input_train, output_train, tamVentanaX,
desplazamiento, sigma, nbins, locbin, TH)
5
6
7
FV_Train_Set
Train
:= Lee fichero output_train
:= Crea conjunto de datos de FV_Train_Set
FV_Test_Set
Test
:= Lee fichero output_test
:= Crea conjunto de datos de FV_Test_Set
W1
:= Crea el clasificador Knn a partir de Train
labels_test
:= Etiquetas de Test
8
9
10
11
12
13
14
50
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Figura 4.10: Cálculo del gradiente.
Figura 4.11: Aplicación de un vector de pesos a los pixels de una determinada fila
en al imagen.
15
16
17
labels_res
fallos
Escribe
:= Resultados de W1 con el conjunto Test
:= Comparar resultados de la inferencia
((n_imagenes_test-fallos)/n_imagenes_test)*100
Listado 4.2: ScriptPR
En primer lugar se crean los ficheros que contienen los vectores de caracterı́sticas para cada imagen llamando a la función RG CreateFVFile. Una vez obtenidos
dichos ficheros, se crean dos estructuras de datos, una para test y otra para train.
A continuación, se entrena al clasificador llamado W1 por medio de la función knnc
pasándole como parámetro el conjunto de train (lı́nea 12 del Listado 4.2). Finalmente
se procede a evaluar el conjunto de test y se obtienen los resultados.
4.2. DESARROLLO VERSIÓN INICIAL
51
Figura 4.12: Proceso detallado del proyecto.
CreateFVFile.m
Este módulo tiene como finalidad el procesamiento de imágenes para obtener sus
respectivos vectores de caracterı́sticas. Recibe como parámetro un fichero similar al
del listado 4.11 y una serie de parámetros de configuración. Devuelve un fichero que
contiene el vector de caracterı́sticas de cada una de las imágenes.
1
2
3
4
Procedimiento RG_CreateFVFile(input, output, tamVentanaX, desplazamiento,
sigma, nbins, locbin, TH)
imList
:= Extrae imagenes del fichero input
etLis
:= Extrae etiquetas del fichero input
5
6
7
8
9
10
11
12
im
im
NR, NC
VectorGaus
FV
:= Carga la imagen imList(1)
:= RG_Preprocess(im)
:= Obtener tama~
no de im
:= RG_WeightVector(NC, sigma)
:= RG_ExtractFeatures(im, tamVentanaX, desplazamiento,
VectorGaus, nbins, locbin, TH)
Escribir en el fichero output FV concatenado con etList(1)
13
14
15
16
17
18
19
20
Para i:=2
im
im
FV
Hasta longitud de imList Hacer
:= carga la imagen imList(i)
:= RG_Preprocess(im)
:= RG_ExtractFeatures(im, tamVentanaX, desplazamiento,
VectorGaus, nbins, locbin, TH)
Escribir en el fichero output FV concatenado con etList(i)
fin Para
52
21
22
23
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
lenFV
:= longitud de FV
Devolver lenFV
fin Procedimiento
Listado 4.3: CreateFVFile
En primer lugar se crea un vector de pesos con de talla NC llamando a la función RG WeightVector. Seguidamente se recorre el fichero de imágenes pasado como
parámetro. A cada una de las imágenes se le pasa por un preproceso ya explicado
con anterioridad.
Posteriormente se llama a la función RG ExtractFeatures pasándole como parámetros la imagen preprocesada y las variables de configuración del algoritmo. RG ExtractFeatures
devuelve el vector de caracterı́sticas correspondiente a la imagen contenida en la variable im. Este vector se escribe en el fichero de salida junto a una etiqueta para
indicar si el vector corresponde a un hombre o a una mujer.
ExtractFeatures.m
Se podrı́a considerar el módulo más importante del proyecto. Tiene como finalidad la extracción del vector de caracterı́sticas a partir de una imagen y de unos
parámetros. Recibe como parámetros de entrada:
Una imagen.
El tamaño en el eje x de la ventana de extracción a utilizar.
El desplazamiento que tendrá la ventana de extracción sobre la imagen.
El vector de pesos.
El número de orientaciones
El umbral para normalizar el vector posteriormente.
1
2
3
4
Procedimiento RG_ExtractFeatures(im, tamVentanaX, desplazamiento,
VectorGaus, nbins, locbin, TH)
ii, ii2
:= RG_IICreate(im)
NR, NC
:= tama~
no de im
5
6
7
8
9
10
11
Para i := 1 Hasta desplazamiento incremento NR Hacer
Si i+tamVentanaX-1 <= NR Entonces
imVentanaNorm := RG_NormalizeIntensity (im, ii, ii2, i, 1,
tamVentanaX, NC)
[ori, mag]
:= RG_EstimateGradOriMag(imVentanaNorm)
h
:= RG_HOG(ori, mag, VectorGaus, nbins, locbin)
4.2. DESARROLLO VERSIÓN INICIAL
12
13
14
15
16
53
FV
:= FV Concatenado con h
Fin Si
Fin Para
Devolver RG_PostProcessVector(FV, TH);
Fin Procedimiento
Listado 4.4: ExtractFeatures
En primer lugar, se crean dos matrices utilizando la función RG IICreate con el
propósito de crear la imagen integral y la imagen integral al cuadrado para normalizar la intensidad de la imagen. A continuación se recorre la imagen empleando la
ventana de extracción, cuyas dimensiones están definidas con el parámetro tamVentanaX. En cada iteración del bucle se añade un desplazamiento a la ventana en el
eje x. Conceptualmente la imagen se recorre como se muestra en la figura 4.6, cada
ventana corresponde a una iteración del bucle.
Para cada una de las ventanas se normaliza su intensidad llamando a la función
RG NormalizeIntensity. Una vez obtenida la ventana normalizada se calculan las
matrices de orientaciones y de magnitudes. Sendas matrices se pasan como parámetro de entrada a la función RG HOG. Dicha función devuelve un vector de talla
nbins (número de orientaciones). Cada elemento de ese vector representa la suma
de las magnitudes de los pixels que tenı́an esa orientación. Seguidamente se van
concatenando los vectores obtenidos para cada ventana y se obtiene el vector de caracterı́sticas de talla no de ventanas x no de orientaciones que representa a la imagen.
Por último se pasa el vector de caracterı́sticas por la función RG PostProcessVector.
Esta función consigue normalizar el vector y eliminar picos que puedan distorsionar
los resultados. Para fijar el umbral de los picos se defina la variable TH.
4.2.3.
Ejecución de los test y resultados
Ejecución de los test
Un hecho obvio en estas alturas del documento, es el número significativo de
variables de este proyecto y que influyen directamente en el éxito del mismo. Como
no se conoce a priori que valores de las variables son adecuados, se ha tenido que
implementar un script de test para poder optimizar estos parámetros de una manera
cómoda.
Las variables a optimizar son:
Sigma
tamVentanaX
Desplazamiento
54
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
nbins
Inicialmente estas variables tienen valores arbitrarios. En primer lugar se calcula el
porcentaje de aciertos para la variable sigma asignándole diferentes valores. Seguidamente se efectúa el mismo proceso para la variable tamVentanaX, pero con el valor
de sigma óptimo. A continuación, con sigma y tamVentanaX optimizados, se realiza
el mismo procedimiento para la variable desplazamiento. Finalmente se calcula el
valor del parámetro nbins con sigma, tamVentanaX y desplazamiento fijados.
A priori no se puede saber si el pos-proceso del vector de caracterı́sticas es
realmente efectivo. Por ello se deberá comprobar empı́ricamente. Se deberán realizar
tres ejecuciones del script de test. Uno sin el pos-proceso del vector de caracterı́sticas,
otro normalizando el vector y por último, un test incluyendo la normalización y
eliminando los picos presentes
Análisis de los resultados
A continuación, se mostrarán los resultados obtenidos para cada uno de los experimentos realizados. El primero consiste en emplear la versión sin pos-proceso del
vector de caracterı́sticas. El segundo experimento contará con con un pos-proceso
del vector, pero sólo se implementará la fase de normalización. Y por último, el
tercer experimento empleará la versión del algoritmo que incluye normalización y
eliminación de picos en el vector de caracterı́sticas.
1. En la gráfica 4.13 se muestran los resultados obtenidos por el script de test
sin pos-proceso del vector de caracterı́sticas. En la gráfica correspondiente a la
variable sigma se puede observar que el valor que obtiene mejores resultados es
el 7, coloreado en verde. En la gráfica de la variable tamVentanaX se muestra
una mejora significativa para el valor 24, consiguiendo un 57 % de acierto.
Con los valores de las variables sigma y tamVentanaX fijados se puede apreciar
en la gráfica de la variable desplazamiento como se afina aún más el porcentaje
de aciertos. De entre todos los valores considerados en el test el que tiene mejor
resultado es el desplazamiento 4 con un 57 % de aciertos. Finalmente, de la
última gráfica se puede concluir que utilizar 9 orientaciones obtiene mejores
resultados que el resto.
De estos resultados se puede concluir la mejor configuración de las variables
de el problema que nos ocupa es y que obtiene un 57 % de aciertos es:
Sigma = 7
tamVentanaX = 24
Desplazamiento = 4
4.2. DESARROLLO VERSIÓN INICIAL
55
Figura 4.13: Resultados de la versión inicial sin pos-proceso del vector.
Número de orientaciones = 9
2. La gráfica 4.14 representa los resultados obtenidos por el script de test con
la normalización del vector. Si se observan detenidamente, se puede apreciar
una clara mejora respecto a la versión sin normalización obteniendo un 59 %
de aciertos con la siguiente configuración de variables:
Sigma = 3
tamVentanaX = 8
Desplazamiento = 4
Número de orientaciones = 9
3. Por último, en la gráfica 4.14 se muestran los resultados del programa con
normalización y eliminación y picos. Se puede apreciar una ligera mejora respecto a la versión que solo implementa la normalización del vector. Con esta
56
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Figura 4.14: Resultados de la versión inicial con normalización del vector.
implementación se consigue una tasa de aciertos del 60 % con la siguiente
configuración:
Sigma = 3.5
tamVentanaX = 22
Desplazamiento = 2
Número de orientaciones = 10
Propuesta de mejora
En vista de los resultados obtenidos se pueden plantear diferentes vias de mejora.
Una de ellas es reflexionar sobre si el conjunto de imágenes de entrenamiento es el
4.2. DESARROLLO VERSIÓN INICIAL
57
Figura 4.15: Resultados de la versión inicial con normalización y umbralización del
vector.
óptimo para representar una muestra estadı́stica. En este sentido se han planteado
varios propuestas de mejora.
Una de ellas serı́a la eliminación de las imágenes ambiguas del conjunto de test
y entrenamiento. Por imágenes ambiguas se entiende fotos de niños, personas de
espaldas, fotos con más de una persona... En resumen, cualquier foto en la que una
persona tuviese serias dudas para dictaminar su género.
Otra mejora en este sentido serı́a aplicar al conjunto de entrenamiento el editado
de Wilson. Actualmente el conjunto de imágenes ha sido seleccionado manualmente (etiquetado manual), con el editado de Wilson serı́a el propio algoritmo el que
decidirá que imágenes forman parte del conjunto de entrenamiento.
Como ya se introdujo en la sección 1.2.6 este algoritmo elimina los elementos
que no son afines a una determinada clase para eliminar interferencias y que la clase
sea lo más homogénea posible. En el caso que nos ocupa, la clase serı́a en conjunto
58
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
de imágenes de hombres por un lado y otra clase para las imágenes de mujeres y se
eliminarı́an de ellas las imágenes que no se ajustan al grupo.
4.3. DESARROLLO MEJORA 1, EDITADO DE WILSON
4.3.
4.3.1.
59
Desarrollo mejora 1, editado de Wilson
Diseño
El editado se Wilson se fundamenta en eliminar los elementos pertenecientes a
un conjunto que no sigan un patrón claro respecto al conjunto. Eliminar los elementos extremos de un conjunto supone que quede determinado más claramente
si un elemento pertenece o no a un conjunto. En la figura 4.16 se puede observar
este proceso. Inicialmente se tienen una serie de elementos cada uno perteneciente a un conjunto. Algunos de esos elementos (marcados en rojo) están dispersos y
es complicado determinar su pertenencia a un determinado conjunto. El algoritmo
de editado de Wilson se encarga de eliminar esos elementos y ası́ tener conjuntos
completamente determinados y minimizando las ambigüedades. Con la aplicación
de este algoritmo sobre el conjunto de imágenes de entrenamiento del proyecto se
esperan tener mejores resultados.
Figura 4.16: Resultado del editado de Wilson.
A la hora de implementarlo la aproximación más obvia serı́a la que sigue. Por
cada imagen del conjunto de entrenamiento, se extrae dicha imagen, se elimina esa
imagen del conjunto y se compara con el nuevo conjunto creado. Si el proceso de
inferencia es acertado querrá decir que esa imagen es aceptada por el algoritmo de
Wilson, por lo que ese elemento debe estar presente en el conjunto de imágenes
de entrenamiento editadas. En la imagen 4.17 se puede apreciar gráficamente este
proceso.
Además de aplicar el editado de Wilson al conjunto de entrenamiento. También
se considera conveniente una revisión en este conjunto de fotos ambiguas. Por lo
60
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Figura 4.17: Selección del editado de Wilson.
que se tendrán que eliminar todas las imágenes que contengan niños, personas de
espalda e imágenes con multitud de personas.
4.3.2.
Implementación
La implementación de esta mejora no implica ninguna modificación en los módulos de la versión inicial del proyecto. Lo único que difiere es que el conjunto de
imágenes de entrenamiento será diferente. Para modificar este conjunto se ha implementado un script para procesarlo según el algoritmo de Wilson. Siguiendo las
indicaciones hechas en la fase de diseño, el proceso en pseudo código seria el siguiente:
1
2
3
4
5
imList
etList
FVList
:= Lista de paths de las imagenes de entrenamiento
:= Lista de etiquedas de las imagenes de entrenamiento
:= Lista de vectores de caracteristicas de las imagenes de
entrenamiento
ConjEditado := Vacio
6
7
8
9
10
11
Para i:=1 Hasta longitud de imList Hacer
imPath
:= imListAux(i)
imFV
:= FVListAux(i)
etiqueta
:= etListAux(i)
imList, etList, FVList := estraer elemento i del los conjuntos
12
13
14
W1
fallos
:= Entrenar al clasificador con FVList y etList
:= resultado inferencia de W1 con la imagen i
15
16
Si fallos = 0 Entonces
4.3. DESARROLLO MEJORA 1, EDITADO DE WILSON
17
18
19
61
Incluir imagen i en ConjEditado
Fin Si
Fin Para
Listado 4.5: ScriptEditado
4.3.3.
Ejecución de los test y resultados
Ejecución de los test
Como la implementación de esta mejora no implica ningún cambio respecto al
código del proyecto, se empleará el mismo script usando en la sección 4.2.3. Se
tendrá que obtener los nuevos valores de los parámetros que optimizan el resultado.
Análisis de los resultados
En la gráfica 4.18 se muestran los resultados obtenidos por el script de test
usando el conjunto de entrenamiento editado. En la gráfica correspondiente a la
variable sigma se puede observar que el valor que obtiene mejores resultados es 3.5,
coloreado en verde. En la gráfica de la variable tamVentanaX se muestra una mejora
significativa para el valor 22, consiguiendo un 61 % de acierto.
Con los valores de las variables sigma y tamVentanaX fijados se puede apreciar
en la gráfica de la variable desplazamiento como se afina aún más el porcentaje
de aciertos. De entre todos los valores considerados en el test el que tiene mejor
resultado es el desplazamiento 2 con un 63 % de aciertos. Finalmente, de la última
gráfica se puede concluir que utilizar 9 orientaciones obtiene mejores resultados que
el resto.
De estos resultados se puede concluir la mejor configuración de las variables de
el problema que nos ocupa es y que obtiene un 63 % de aciertos es:
Sigma = 3.5
tamVentanaX = 22
Desplazamiento = 2
Número de orientaciones = 9
En vista de los resultados obtenidos se puede afirmar que el editado de Wilson
ha proporcionado una mejora significativa al resultado final. Se ha incrementado el
porcentaje de aciertos en un 3 %. Lo que confirman las hipótesis iniciales respecto
al algoritmo de editado de Wilson.
62
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Figura 4.18: Resultados con el conjunto de entrenamiento editado.
Propuesta de mejora
Haciendo una reflexión sobre las debilidades de este algoritmo, se planteaba
la siguiente pregunta: ¿Qué partes del cuerpo determinan mejor el género de una
persona?. En base a esta cuestión, surgió la idea de optar por un enfoque diferente
al algoritmo. Actualmente se procesan las imágenes dando la misma importancia a
todas las zonas de la imagen. Es probable que si el algoritmo se centrase solo en
las zonas más significativas de la imagen en lo que a género se refiere, se obtengan
mejores resultados.
Para llevar esta idea a cabo, la primera tarea consiste en determinar cuales
son esas zonas que producen una mayor tasa de aciertos. Una vez conocidas, solo
se tendrı́an en cuenta esas zonas. Por lo que el algoritmo, en vez de centrarse en
toda la imagen (enfoque global) solo tendrı́a en cuenta las zonas más significativas
(enfoque local).
4.4. DESARROLLO MEJORA 2, ENFOQUE LOCAL
4.4.
4.4.1.
63
Desarrollo mejora 2, enfoque local
Diseño
Hasta ahora, el algoritmo recorrı́a la imagen por medio de ventanas de extracción
y concatenaba los vectores de caracterı́sticas de cada ventana. El vector resultante era el que se empleaba para entrenar al clasificador. Es decir, se entrenaba al
clasificador con la imagen al completo (global).
Para dar un enfoque local al proceso se deberı́an procesar las ventanas por separado. Una aproximación a este problema serı́a usar i clasificadores, uno por cada
ventana de extracción. Cada clasificador corresponde a una zona de la imagen. El
proceso de inferencia de una imagen seria una serie de consultas sobre cada una
de sus ventanas. Es decir, el clasificador i harı́a la inferencia con la ventana i de la
imagen.
Con este proceso se obtendrı́an i resultados, uno por cada ventana de extracción.
De esos resultados, se seleccionarı́an las ventanas con mayor ı́ndice de aciertos. Posteriormente se usarı́a el algoritmo descrito en la sección 4.3, pero teniendo sólo en
cuenta las ventanas con más ı́ndices de aciertos, no todas las ventanas de la imagen.
En resumen, esta mejora implica dos fases. La primera fase consiste en obtener
las ventanas con mayor ı́ndice de aciertos. Y la segunda fase consiste en ejecutar el
algoritmo global descrito en las secciones anteriores, pero teniendo en cuenta solo
las ventanas obtenidas en la primera fase y desechando el resto. Seguidamente se
explicará más detalladamente estas fases:
Fase de Obtención de ventanas óptimas
Existen varias opciones alcanzar los objetivos de esta fase. Una es modificar
el algoritmo de extracción de caracterı́sticas visto en la sección 4.3 y la otra, más
sencilla, es modificar el script principal del programa. Dados los pocos cambios que
habrı́a que realizar en el código, se decidió aplicar la segunda opción.
En versiones anteriores, la estructura de datos que se usaba para entrenar al
clasificador era la siguiente:
1
2
3
4
5
6
415616517865165161651.....16516516
177932657816983322486.....52245583
412553698578596523369.....55855558
...
...
478958742665899556698.....55558854
0
1
1
0
Listado 4.6: Fragmento de la BBDD de imágenes
64
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Cada fila i de la estructura correspondı́a al vector de caracterı́sticas seguido de
la etiqueta que indicaba si dicho vector representa a un hombre (0) o a una mujer(1)
de la imagen i. El vector i se forma concatenando los vectores correspondientes
a cada una de las ventanas de una imagen i. Para facilitar el proceso en tareas
posteriores, es necesario modificar dicha estructura. Lo que se precisa es obtener
una lista de vectores de caracterı́sticas de cada una de las ventanas de todas las
imágenes, es decir, no concatenar los vectores. Si una imagen tiene N ventanas y
tenemos M imágenes, el número total de filas serı́a de NxM. Con esta estructura se
consigue tener localizadas las ventanas correspondientes a la posición i de todas las
imágenes. Es decir, la posición de la ventana 2 en cada una de las imágenes serı́a:
2, N+2, (N*2)+2, (N*3)+2... (N*(M-1))+2. En la Figura 4.19 se puede ver más
claramente.
Figura 4.19: Transformación de la estructura de vectores.
Con la estructura modificada, el siguiente paso consiste en entrenar las ventanas de las imágenes por separado. Para ello se requieren N clasificadores, uno por
cada posición de una ventana en cada imagen. De este modo, el clasificador i procesará sólo las imágenes que estén en la posición i. En versiones anteriores, el proceso
de inferencia se realizaba como muestra la Figura 4.20, pero con esta modificación,
el proceso quedarı́a como se muestra en la Figura 4.21.
Como resultado de aplicar este algoritmo, obtendrı́amos un vector de porcentajes de talla N, siendo N el número de ventanas presentes en una imagen. Cada
porcentaje representa lo significativa que esa ventana respecto al género. Y esta es
4.4. DESARROLLO MEJORA 2, ENFOQUE LOCAL
65
Figura 4.20: Procesado de los vectores en versiones anteriores.
la información que necesita la siguiente fase.
Fase de ejecución del algoritmo sólo con ventanas óptimas
En versiones anteriores, la formación de un vector de una determinada imagen
se realizaba uniendo todos los vectores de sus ventanas. Ahora se deben formar los
vectores de igual modo, pero teniendo solo en cuenta las ventanas seleccionadas en
la fase anterior. Ası́ se consigue eliminar el ruido que pueden provocar ventanas
irrelevantes en en resultado final. Los vectores tendrán un talla de L*K, siendo L el
número de orientaciones usadas y K el número de ventanas óptimas contempladas.
4.4.2.
Implementación
Esta mejora sólo afecta al script principal del programa. Como ya se ha explicado,
esta mejora implica dos fases bien diferenciadas.
Fase de Obtención de ventanas óptimas
El siguiente listado muestra como se implementó la fase de obtención de ventanas
óptimas. En primer lugar, y como en las versiones anteriores, se tienen que crear
los ficheros de vectores de caracterı́sticas output train y output test mediante la
llamada a la función RG CreateFVFile. Uno vez obtenidos estos ficheros, se tienen
que transformar con el método descrito en la fase de diseño. Con la modificación
hecha, se ejecuta el proceso de inferencia. Se crea un vector de resultados de talla
número de ventanas, cada posición i representa el resultado dado por el clasificador i.
El último paso es hacer una iteración sobre el número de ventanas. Por cada posición
i del conjunto de ventanas, se recorren las ventanas con la posición i de todas las
imágenes y se entrena al clasificador i, para posteriormente guardar el resultado en
la posición i del vector Resultados.
Como resultado se muestra por pantalla el vector resultados y se observa cuales
son las ventanas con mayor ı́ndice de aciertos. Esas ventanas serán las que se utilicen
66
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Figura 4.21: Procesado de los vectores actualmente.
en la fase posterior.
1
2
3
4
RG_CreateFVFile (input_test, output_test, tamVentanaX, desplazamiento,
sigma, nbins, locbin, TH)
lenFV
:= RG_CreateFVFile(input_train, output_train, tamVentanaX,
desplazamiento, sigma, nbins, locbin, TH)
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#Modificar las estructuras de datos de train
n_ventanas
:= lenFV/nbins
FV_Train_Set := Lee fichero output_train
n_fotos_train := Longitud de FV_Train_Set
FV_Train_Set2 := Nueva matriz de talla
(n_fotos_train*n_ventanas) X n_bins+1
Para i := 1 Hasta n_fotos_train Hacer
z := (i * n_ventanas) - n_ventanas + 1
Para j := nbins Incremento nbins Hasta lenFV Hacer
FV_Train_Set2(z, 1:nbins) := FV_Train_Set(i, j-(nbins-1):j)
FV_Train_Set2(z, nbins+1) := FV_Train_Set(i, lenFV+1);
Fin Para
Fin Para
19
20
21
#Modificar las estructuras de datos de test
FV_Test_Set
:= Lee fichero output_test
4.4. DESARROLLO MEJORA 2, ENFOQUE LOCAL
22
23
24
25
26
27
28
29
30
31
67
n_fotos_test
FV_Test_Set2
:= Longitud de FV_Test_Set
:= Nueva matriz de talla
(n_fotos_test*n_ventanas) X n_bins+1
Para i := 1 Hasta n_fotos_test Hacer
z := (i * n_ventanas) - n_ventanas + 1
Para j := nbins Incremento nbins Hasta lenFV Hacer
FV_Test_Set2(z, 1:nbins) := FV_Test_Set(i, j-(nbins-1):j)
FV_Test_Set2(z, nbins+1) := FV_Test_Set(i, lenFV+1);
Fin Para
Fin Para
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#Realizar las inferencias
Resultados := Nuevo vector de talla n_ventanas
Para i := 1 Hasta n_ventanas Hacer
Train
:= []
Test
:= []
Para j := i Incr n_ventanas Hasta (n_fotos_train-1*n_ventanas)+i Hacer
Train := Train + Ventana en la posicion i de la imagen j-i
Fin Para
Para j := i Incr n_ventanas Hasta (n_fotos_test-1*n_ventanas)+i Hacer
Test
:= Test + Ventana en la posicion i de la imagen j-i
Fin Para
W1
:= Crea el clasificador Knn a partir de Train
labels_test := Etiquetas de Test
labels_res := Resultados de W1 con el conjunto Test
fallos
:= Comparar resultados de la inferencia
Resultados := Resultados + ((n_fotos_test-fallos)/n_fotos_test)*100
Fin Para
50
51
Escribe Resultados
Listado 4.7: ScriptPRVersionLocal
Fase de ejecución del algoritmo sólo con ventanas óptimas
La implementación de esta fase no implica modificaciones importantes. Una vez
se tengan las ventanas óptimas seleccionadas y las estructuras de vectores de caracterı́sticas modificadas, el siguiente paso es concatenar los vectores de esas ventanas
para cada imagen, por lo que el vector formado por las ventanas óptimas será el
que represente a dicha imagen. Con los vectores concatenados, sólo queda realizar el
proceso de inferencia del mismo modo que se realizaba en las versiones anteriores.
Todo este proceso está descrito en el siguiente Listado.
68
1
2
3
4
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
RG_CreateFVFile (input_test, output_test, tamVentanaX, desplazamiento,
sigma, nbins, locbin, TH)
lenFV
:= RG_CreateFVFile(input_train, output_train, tamVentanaX,
desplazamiento, sigma, nbins, locbin, TH)
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#Modificar las estructuras de datos de train
n_ventanas
:= lenFV/nbins
FV_Train_Set := Lee fichero output_train
n_fotos_train := Longitud de FV_Train_Set
FV_Train_Set2 := Nueva matriz de talla
(n_fotos_train*n_ventanas) X n_bins+1
Para i := 1 Hasta n_fotos_train Hacer
z := (i * n_ventanas) - n_ventanas + 1
Para j := nbins Incremento nbins Hasta lenFV Hacer
FV_Train_Set2(z, 1:nbins) := FV_Train_Set(i, j-(nbins-1):j)
FV_Train_Set2(z, nbins+1) := FV_Train_Set(i, lenFV+1);
Fin Para
Fin Para
19
20
21
22
23
24
25
26
27
28
29
30
31
#Modificar las estructuras de datos de test
FV_Test_Set
:= Lee fichero output_test
n_fotos_test := Longitud de FV_Test_Set
FV_Test_Set2 := Nueva matriz de talla
(n_fotos_test*n_ventanas) X n_bins+1
Para i := 1 Hasta n_fotos_test Hacer
z := (i * n_ventanas) - n_ventanas + 1
Para j := nbins Incremento nbins Hasta lenFV Hacer
FV_Test_Set2(z, 1:nbins) := FV_Test_Set(i, j-(nbins-1):j)
FV_Test_Set2(z, nbins+1) := FV_Test_Set(i, lenFV+1);
Fin Para
Fin Para
32
33
34
35
36
Train :=
Test
:=
Para i :=
Train
37
38
[]
[]
1 Hasta n_fotos_train Hacer
:= Extraer ventanas optimas de imagen i en
FV_Train_Set2
Fin Para
39
40
41
42
43
Para i := 1 Hasta n_fotos_test Hacer
Train := Extraer ventanas optimas de imagen i en
FV_Test_Set2
Fin Para
4.4. DESARROLLO MEJORA 2, ENFOQUE LOCAL
69
44
45
46
47
48
49
W1
labels_test
labels_res
fallos
Escribe
:= Crea el clasificador Knn a partir de Train
:= Etiquetas de Test
:= Resultados de W1 con el conjunto Test
:= Comparar resultados de la inferencia
((n_imagenes_test-fallos)/n_imagenes_test)*100
Listado 4.8: ScriptPRVersionLocalOptimas
4.4.3.
Ejecución de los test y resultados
Ejecución de los test
Como en versiones anteriores, se utilizará el algoritmo ya implementado para
averiguar los parámetros óptimos. Se ejecutará esta versión con diferentes parámentros y entre todos ellos, se valorará cual es la mejor configuración y cuales son las
ventanas óptimas.
Seguidamente, con las ventanas seleccionadas, se ejecutará el algoritmo pero en
vez de concatenar todas las ventanas, sólo se concatenarán las ventanas óptimas.
Análisis de los resultados
En las gráficas 4.22 y 4.23 se pueden observar los resultados obtenidos en cada
una de las ventanas variando la variable sigma.
Figura 4.22: Resultados de la versión local para valores de sigma entre 0.5 y 4.5
Con la siguiente configuración inicial:
70
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Figura 4.23: Resultados de la versión local para valores de sigma entre 5.5 y 9.5
tamVentanaX = 22
Desplazamiento = 4
Número de orientaciones = 9
En vista de las gráficas, los resultados son muy similares. Pero el valor 1.5 de
sigma es el más constante y el que obtiene picos más altos que el resto. Cabe destacar,
que dichos picos corresponden a las ventanas situadas en las cabezas y caderas de
las personas, lo cual es muy significativo.
En las gráficas 4.24 y 4.25 se representan los resultados obtenidos variando la
variable tamVentanaX y manteniendo los otros parámetros con la siguiente configuración:
sigma = 1.5
Desplazamiento = 4
Número de orientaciones = 9
Analizando los resultados obtenidos se puede observar que las ventanas obtienen
un promedio de aciertos más altos con el valor 26, con aciertos de hasta un 57 %.
Finalmente, en las gráficas 4.26 y 4.27 se representan los resultados obtenidos
variando la variable desplazamiento. Siendo la configuración del resto de parámetros:
sigma = 1.5
tamVentanaX = 26
4.4. DESARROLLO MEJORA 2, ENFOQUE LOCAL
71
Figura 4.24: Resultados de la versión local para valores de tamVentanaX entre 12 y
18
Número de orientaciones = 9
Los mejores resultados han sido dados por el valor de desplazamiento 4, con las
ventanas 13 y 20 con un 57 % y un 58 % respectivamente. Lo cual hace pensar que
son las ventanas óptimas y las que tendrán que ser concatenadas. El resultado del
algoritmo teniendo en cuenta solo las ventanas óptimas es de un 57 %.
En vista de los resultados obtenidos se puede afirmar que esta modificación no ha
sido acertada para los intereses del proyecto. Se esperaba que si sólo se analizaban
las ventanas significativas se eliminasen las distorsiones que podı́an provocar zonas
de las imágenes superfluas, pero no ha sido ası́.
Propuesta de mejora
En vista de los pobres resultados obtenidos con la versión local del algoritmo
Histograma de gradientes orientados. Se planteó la posibilidad de estudiar otro tipo
de algoritmo para la extracción de caracterı́sticas, Local binary patters. Dicho algoritmo obtuvo unos resultados muy aceptables en el reconocimiento de rostros, lo que
hace pensar que la adaptación a nuestro caso de estudio pueda ser exitosa.
72
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Figura 4.25: Resultados de la versión local para valores de tamVentanaX entre 20 y
26
4.4. DESARROLLO MEJORA 2, ENFOQUE LOCAL
73
Figura 4.26: Resultados de la versión local para valores de desplazamiento entre 2 y
8
74
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Figura 4.27: Resultados de la versión local para valores de desplazamiento entre 10
y 16
4.5. DESARROLLO MEJORA 3, LOCAL BINARY PATTERNS
4.5.
4.5.1.
75
Desarrollo mejora 3, Local binary patterns
Diseño
Como el algoritmo anteriormente usado, Local binary patterns tiene como propósito la extracción de bordes de una imagen. La idea a seguir para implantar este algoritmo es la siguiente. Partiendo de una imagen, se recorren sus ventanas de igual
modo que se hizo con el algoritmo de histograma de gradientes orientado. Para cada
pixel de la ventana, se recorren sus ocho vecinos empezando por la esquina superior
izquierda y rodando en el sentido de las agujas del reloj. A su vez se va formando
un número en función de si el vecino es mayor o igual que el pixel estudiado (el del
centro), si es ası́ añadimos un 1, en caso contrario un 0. Al obtenerse un número de
ocho cifras con unos y ceros, se interpreta como un número binario y se realiza la
conversión a decimal. En la Figura 4.28 se explica gráficamente este proceso.
Figura 4.28: Procesado de pixeles con local binary patterns.
Para cada ventana se tendrán NxM números de 0 al 255, siendo N y M el número
de filas y columnas respectivamente. El vector de caracterı́sticas para una ventana
serı́a un histograma de talla 256. Cada posición i de ese histograma representa el
número de ocurrencias que ha tenido el número i en la ventana. En un paso opcional,
se podrı́a aplicar un vector de pesos al histograma. Finalmente, el vector final de
una imagen es la concatenación de los vectores de sus respectivas ventanas.
Cabe destacar que con este algoritmo los parámetros de configuración del mismo
cambian. El número de orientaciones ya no es necesario, y sigma sólo interviene si
se usan vectores de pesos en el vector de caracterı́sticas.
La organización de los módulos representada en la Figura 4.3 cambia ligeramente
con esta modificación. En la Figura 4.29 se puede apreciar la nueva estructura del
código, el negro representa los módulos modificados y el rojo los módulos añadidos.
4.5.2.
Implementación
Seguidamente se explicarán los módulos implicados en está modificación, que
están representados en la Figura 4.29.
76
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Figura 4.29: Esquema de módulos para la versión LBP.
ExtractFeatures
La implementación de este módulo no implica grandes cambios respecto a la
versión inicial. Sólo difiere en la fase en la que obtiene el vector de caracterı́sticas,
llamando a la función RG ExtraerHistograma.
1
2
3
4
Procedimiento RG_ExtractFeatures(im, tamVentanaX, desplazamiento,
VectorGaus, nbins, locbin, TH)
ii, ii2
:= RG_IICreate(im)
NR, NC
:= tama~
no de im
5
6
7
8
9
10
11
Para i := 1 Hasta desplazamiento incremento NR Hacer
Si i+tamVentanaX-1 <= NR Entonces
imNorm := RG_NormalizeIntensity (im, ii, ii2, i, 1,
tamVentanaX, NC)
h
:= RG_ExtraerHistograma(imNorm, VectorGaus)
FV
:= FV Concatenado con h
4.5. DESARROLLO MEJORA 3, LOCAL BINARY PATTERNS
12
13
14
15
77
Fin Si
Fin Para
Devolver RG_PostProcessVector(FV, TH);
Fin Procedimiento
Listado 4.9: ExtractFeatures
ExtraerHistograma
Este módulo es el encargado de, a partir de una porción de imagen (ventana)
y un vector de pesos, calcular el histograma correspondiente. Para ello se inicializa
un vector de talla 256. Seguidamente se recorren los pixels la ventana y se llama a
la función RG LocalBinaryPattern para cada pixel, con el fin de obtener el número
que caracteriza a dicho pixel. Posteriormente, se incrementa en uno el valor de la
posición del vector v dada por el número que genera dicho pixel.
1
2
3
4
5
6
7
8
9
10
11
Procedimiento RG_ExtraerHistograma(im, VectorGaus)
NR, NC
:= tama~
no de im
v
:= Vector de talla 256
Para i := 1 Hasta NR+1 Hacer
Para j := 1 Hasta NC+1 Hacer
num
:= RG_LocalBinaryPattern(im, i, j)
v[num] := v[num] + 1
Fin Para
Fin Para
Devolver v;
Fin Procedimiento
Listado 4.10: ExtraerHistograma
LocalBinaryPattern
Por último, este módulo tiene como finalidad el cálculo del valor correspondiente
a un determinado pixel. Para realizar esta tarea en primer lugar se crea un vector
de talla ocho. Seguidamente se recorren los vecinos del pixel dado empezando por la
esquina superior izquierda y siguiendo el sentido de las agujas del reloj. Si el vecino
es mayor o igual que el pixel que se está estudiando, se escribe un 1 en el vector, en
caso contrario un 0. Finalmente se interpreta al vector como un número binario y
se hace la conversión a decimal, para terminar retornándolo.
1
2
3
Procedimiento RG_LocalBinaryPattern(im, i, j)
v
:= Vector de talla 8
vecinos := Vecinos de (i,j)
78
4
5
6
7
8
9
10
11
12
13
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
Para z:= vecinos[1] Hasta 8
Si vecinos[i] >= im[i, j] Entonces
v[z]
:= 1;
SiNo
v[z]
:= 0;
Fin Si
Fin Para
num := Converir v en decimal
Devolver num
Fin Procedimiento
Listado 4.11: LocalBinaryPattern
4.5.3.
Ejecución de los test y resultados
Ejecución de los test
Como en versiones anteriores, el test de esta modificación consistirá en aplicar
el script para el test de variables óptimas. Dicho script tiene algunas modificaciones
respecto a versiones anteriores, ya que la variable número de orientaciones no afecta
en esta versión del algoritmo.
Análisis de los resultados
En la primera gráfica de la Figura 4.30 se muestran los resultados de la ejecución
de script de test variando el parámetro sigma. Se puede observar que el valor de
sigma, 3.5, es el que obtiene mejores resultados con un 55 %. Siendo la configuración
del resto de parámetros como sigue:
tamVentanaX = 8
Desplazamiento = 4
sigma = 3.5
Teniendo fijado el valor óptimo de sigma, se procede a continuación a evaluar el
parámetro tamVentanaX. En la gráfica 2 de la Figura 4.30 se muestran los resultados obtenidos variando este parámetro. El valor óptimo para dicha variable es 12,
obteniendo un porcentaje de aciertos del 55 %. Lo cual indica que no se ha logrado
mejorar la tasa de aciertos variando este parámetro. La configuración del resto de
parámetros ha sido:
tamVentanaX = 12
4.5. DESARROLLO MEJORA 3, LOCAL BINARY PATTERNS
79
Figura 4.30: Resultados de la versión LBP para valores de sigma entre 0.5 y 4.5 y
de tamVentanaX entre 4 y 32
Desplazamiento = 4
sigma = 3.5
Figura 4.31: Resultados de la versión LBP para valores de desplazamiento entre 4 y
12
Finalmente, queda por evaluar el parámetro desplazamiento. Con los parámetros
sigma y tamVentanaX fijados en 3.5 y 12 respectivamente, se procede a evaluar a la
variable desplazamiento. Los resultados obtenidos se muestran en la gráfica 4.31. En
vista de los resultados se puede observar que el parámetro planteado inicialmente
80
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
para desplazamiento era el idóneo, con un valor de 4. La tasa de aciertos es de un
55 % con los siguientes parámetros:
tamVentanaX = 12
Desplazamiento = 4
sigma = 3.5
En vista de los resultados obtenidos por esta modificación, se puede afirmar que
la implementación del algoritmo Local Binary Patterns no obtiene buenos resultados
para el reconocimiento del género, desechando ası́ la hipótesis inicial.
4.6. REVISIÓN DEL PROYECTO
4.6.
Revisión del proyecto
4.6.1.
Proceso de comprobación
81
El proyecto ha estado en un constante control en cada una de las fases del mismo.
Se han realizado pruebas y revisiones constantes con el fin de eliminar posibles errores
en las implementaciones y dar veracidad a los resultados obtenidos. Una de estas
pruebas ha consistido en calcular una imagen con el gradiente medio de todas las
fotos de hombres y otra para las mujeres. En la Figura 4.32 se representa la media
de las imágenes de la BBDD para hombres y para mujeres. A pesar de que las
diferencias entre una y la otra sean mı́nimas, son lo suficientemente representativas
para nuestro caso de estudio. En zonas como las caderas, hombros y cabeza, se
observan claramente las diferencias. Con esta prueba se consigue validar el conjunto
de imágenes utilizadas en el proyecto y además, refuerza la teorı́a de que existen
zonas más representativas que otras en lo que al género se refiere.
Figura 4.32: Gradiente medio de las imágenes en la BBDD.
También se estudiaron diferentes tipos de clasificadores incluidos en la librerı́a
PRTools para descartar una mala selección del clasificador inicial. En un principio
se utilizó el clasificador Knn (k-nearest neighbor classifier), pero existen otros como:
bpxnc (Train neural network classifier by back-propagation)
lmnc (Train neural network by Levenberg-Marquardt rule)
rbnc (Train radial basis neural network classifier)
82
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
rnnc (Random neural network classifier)
svc (Support vector classifier)
Todos ellos obtuvieron un resultado similar o peor que el clasificador Knn, por
lo que se confirmó la correcta aplicación de dicho clasificador para este proyecto.
Para finalizar, se sometió a las implementaciones a una prueba para validar
su correcto funcionamiento, es decir, se evaluó si esos algoritmos son capaces de
clasificar correctamente dos grupos de fotos con caracterı́sticas contrapuestas. Se
elaboraron dos conjuntos de imágenes, el primero compuesto por imágenes de paisajes en horizontal, y en el segundo con las mismas imágenes pero en vertical. Las
imágenes de paisajes tienes como caracterı́stica común, que todas tienen un borde
muy marcado que es el horizonte, por lo que las imágenes de un grupo tendrán el
borde del horizonte en sentido horizontal y el otro grupo con orientación vertical,
lo que generará vectores de caracterı́sticas completamente diferentes. Al ejecutar los
algoritmos se espera que la tasa de aciertos sea muy elevada en todas las implementaciones, ya que se están clasificando imágenes con gradientes completamente
distintos. El resultado obtenido para la versión inicial fue del 90 %, la versión con
enfoque local obtuvo un 90 % también y finalmente, la versión con Local Binary
Patterns obtuvo un 85 %. Estos resultados confirman las implementaciones de los
algoritmos funcionan correctamente.
4.6.2.
Evaluación global de los resultados
El objetivo principal de este proyecto era el estudio de técnicas para el reconocimiento de género por medio del perfil humano. Se estudiaron dos técnicas en
particular, Histograma de gradientes orientados y Local Binary Patterns. El primero
obtuvo buenos resultados en el reconocimiento de presencia humana y el segundo, en
el campo del reconocimiento del rostro en personas. Por la similitud con el propósito
de este proyecto, se propuso como hipótesis inicial que estas técnicas podrı́an dar
buenos resultados.
Durante el estudio de la técnica Histograma de gradientes orientados, se propusieron distintas mejoras en función de los resultados obtenidos. Después de haber
implementado la versión inicial, se obtuvo una tasa de aciertos del 57 %. Seguidamente se implementaron modificaciones respecto a la versión inicial. Como aplicar
una normalización de los vectores de caracterı́sticas, con lo que se aumento la tasa
de aciertos al 59 %. Aplicar un filtro en los vectores de caracterı́sticas que eliminase
los picos, consiguiendo una efectividad del 60 %. También se optó por modificar el
conjunto de imágenes de entrenamiento usando la técnica de editado de Wilson, con
lo que se aumentaron los acierto hasta llegar al 63 %. Finalmente, se planteó una
última mejora sobre este algoritmo, aplicar un enfoque local al procesado de una
4.6. REVISIÓN DEL PROYECTO
83
imagen, dando más importancia a las zonas de la imagen más representativas del
género humano. A pesar de que se esperaban unos resultados positivos implementando esta mejora, finalmente la tasa de aciertos descendió al 57 %.
En vista de los resultados obtenidos se decidió afrontar el problema con el uso
de otras técnicas. Inicialmente se esperaban unos resultados positivos teniendo en
cuenta las similitudes de este proyecto con proyectos anteriores que usaron esta
técnica. Después de reflexionar sobre los resultados y las debilidades del algoritmo,
se plantearán propuestas de mejora para futuros trabajos en este ámbito.
La siguiente técnica a utilizar fue Local Binary Patterns. Este algoritmo obtuvo
buenos resultados en el reconocimiento facial, lo que hizo pensar que podrı́a ser
una buena alternativa para afrontar el problema que nos ocupa. Pero los resultados
reflejados denotan que las hipótesis iniciales son erróneas. Sólo se consiguió un 55 %
de efectividad, lo cual hizo desestimar posibles mejoras para esta técnica.
Dado que el objetivo principal era el estudio de técnicas de reconocimiento de patrones aplicadas al reconocimiento de género, se puede afirmar que se han cumplido.
Un hecho obvio, es que el resultado final del proyecto hubiese sido más satisfactorio
si se hubiese dado con una solución efectiva al problema. Pero dada la dificultad del
problema que se trata, podrı́a ser una meta demasiado utópica y con toda certeza,
fuera del alcance de un proyecto fin de carrera.
4.6.3.
Futuras vı́as de investigación
Reflexionando sobre las debilidades de los algoritmos desarrollados, se llegó a un
conclusión clara, el funcionamiento general es correcto, pero no se están extrayendo
las caracterı́sticas apropiadas para llegar a reconocer el género de una persona. Se
considera que la razón de que no se obtengan unos resultados aceptables es que en la
fase de extracción de caracterı́sticas se están procesando atributos poco significativos
en cuanto a género.
En este sentido, se podrı́a plantear otro enfoque a la hora de aplicar pesos a una
zona de la imagen. Durante todo el proyecto se ha aplicado un vector de pesos que
atribuye más importancia a la zona central de la imagen. Pero teniendo en cuenta
que las personas están centradas en la imagen, se estarı́a dando más importancia
al cuello que a los hombros en si en el caso de estos. Pero a su vez, la cabeza de
las personas está justo en el centro de la imagen, por lo que es conveniente usar un
vector de pesos que de más importancia al centro de la imagen. Éstos datos sugieren
la idea de aplicar una matriz de pesos a toda la imagen, dando mayor peso a las
zonas donde tendrı́an que presentarse, caderas, cabezas y hombros, y dando un peso
menor al resto de las zonas de la imagen.
Otra vı́a de investigación consistirı́a en el estudio de como los humanos diferencian el género. Existen otros factores que hacen que una persona haga una inferencia sobre esta cuestión, como puede ser el tipo de ropa, el estilo de pelo, etc.
84
CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO
En definitiva, factores sociales que se atribuyen a hombres y a mujeres, y que son
excluyentes entre si estadı́sticamente. Si se consiguiese informatizar esos criterios, es
muy probable que la eficacia del programa aumente. Una forma para comprender la
percepción humana, consistirı́a en desarrollar una aplicación que mostrase imágenes
a una persona y que esta tuviese que dictaminar si se trata de una mujer o de un
hombre. Dichas imágenes podrı́an ser recortadas, mostrando ası́ zonas especı́ficas
de una persona, vestuario, estilo de peinado etc. De dicho experimento se podrı́an
sacar conclusiones útiles para la detección del género.
Capı́tulo 5
Conclusiones
Gracias a este proyecto he podido experimentar las dificultades que conlleva el
problema de reconocimiento de género. Al tratarse de un ámbito novedoso, he tenido que adaptar técnicas utilizadas en problemas similares y realizar modificaciones
para explorar distintos enfoques de cómo abordar el problema. El proyecto ha cumplido con creces su finalidad, que no es otra que validar métodos para dar solución al
reconocimiento de género. Independientemente de lo eficaces que hayan dichos métodos, de lo que no cabe duda es que este proyecto servirá como guı́a fundamental a
proyectos encaminados en este ámbito.
Por lo general, las personas no son conscientes de la complejidad de los procesos
que entraña la visión humana. Cuando distinguimos unas letras de otras, reconocemos a personas cercanas a nosotros o reconocemos el género de una persona con una
simple mirada, nuestro cerebro tiene que realizar un trabajo que implica procesos
muy complejos. En esencia, los proyectos de reconocimiento de género intentan imitar estos procesos. Si una persona sigue un determinado criterio para distinguir el
género, un sistema de reconocimiento de patrones deberı́a imitar estos criterios. Este
concepto no es trivial y precisamente es la dificultad del problema que nos ocupa. La
cuestión principal es ¿Cómo instruimos a un ordenador para que siga el raciocinio
humano?. Si reflexionamos sobre esta idea nos damos cuenta de que el problema
que se intenta abordar tiene un alto nivel de dificultad. Con estos trabajos no se
pretende obtener resultados mejores que la percepción humana, pero si aproximarse
a ellos.
Durante toda la carrera se han ido adquiriendo conocimientos que han servido
para poder afrontar un proyecto de estas caracterı́sticas. Fundamentos en lenguajes
de programación asimilados en el trascurso de la carrera, han servido para que la
adaptación a un lenguaje nuevo, como es Matlab, haya sido relativamente sencilla.
Poco a poco, en las distintas asignaturas donde se impartı́an lenguajes de programación estructurados, se ha ido moldeando la forma de organizar ideas, estructurar
código etc, que sin duda ha conseguido facilitar en gran medida la organización de la
85
86
CAPÍTULO 5. CONCLUSIONES
implementación del proyecto. Conocimientos sobre la metodologı́a en el desarrollo de
proyectos Software, han sido de gran utilidad, tanto para el desarrollo del proyecto
como para la planificación del mismo.
En este proyecto cobra especial relevancia el papel de un ingeniero informático.
Un ingeniero no emprende un proyecto desde cero, se apoya sobre trabajos realizados
previamente. Por lo tanto, la tarea de un ingeniero consiste más bien en recopilar,
reutilizar, adaptar y reinventar trabajos realizados con anterioridad. Y ası́ ha sucedido en este trabajo, en la mayorı́a de los casos, se han tenido que investigar trabajos
previos, adaptarlos a las necesidades y en algunos casos, reinventarlos.
Para realizar este proyecto se han tenido que adquirir multitud de conceptos nuevos. Reconocimientos de patrones, biometrı́a, algoritmos de clasificación, técnicas de
editado de clases e incluso la utilización de LATEX para la redacción de esta memoria.
Conceptos que se consideran muy útiles para el desarrollo de una carrera profesional
y que además, abren una nueva vı́a profesional completamente desconocida hasta
ahora.
Es importante destacar la continua evaluación a la que ha sido sometido el proyecto. Un error de cualquier tipo puede suponer que los resultados y su posterior
análisis comprometan fases posteriores del proyecto. Dada la metodologı́a utilizada
en la elaboración proyecto, ha sido vital hacer un exhaustivo control sobre el trabajo
realizado y ası́ evitar errores que lleven a conclusiones erróneas.
Los resultados del proyecto han sido satisfactorios respecto a los objetivos marcados inicialmente. Pero no se ha llegado a dar una solución efectiva al reconocimiento
de género. El problema planteado es innovador y eso conlleva muchos fracasos antes
de conseguir un solución definitiva. Es por ello que, aunque no se tenga una solución
al problema, se ha dado un gran paso. El trabajo realizado y los resultados obtenidos
indudablemente facilitarán el camino a nuevos proyectos.
A nivel particular, este proyecto me ha ayudado a tomar contacto con un proyecto
real. A menudo, durante la carrera, se afrontan problemas relativamente sencillos en
cuanto a extensión y complejidad. Gracias a este trabajo, he podido experimentar lo
que supone afrontar un proyecto serio, con sus dificultades, el volumen de trabajo que
demanda y también con sus satisfacciones. No me cabe duda de que esta experiencia
supone para mi un salto cualitativo profesionalmente, que servirá para el desarrollo
de mi carrera como ingeniero informático.
Todo en esta vida es mejorable, siempre se puede dar más de uno mismo y realizar
un trabajo de más calidad. Pero realmente me siento muy orgulloso del trabajo
realizado y de haber superado con éxito los desafı́os que se han planteado a la largo
del proyecto. Sólo me queda la inquietud de no haber desarrollado una solución
satisfactoria al problema planteado. Pero un proyecto tiene que tener un principio y
un fin, tiene que tener unos lı́mites definidos para que no se alargue indefinidamente
en el tiempo. Es por ello que se plantean nuevas ideas con la esperanza de que en
algún trabajo futuro se pueda obtener una solución.
87
Citaré una frase de Pablo Picasso que resume muy bien el desarrollo del proyecto:
La inspiración existe, pero tiene que encontrarte trabajando.
88
CAPÍTULO 5. CONCLUSIONES
Bibliografı́a
[1] http://es.wikipedia.org/wiki/Knn.
[2] http://es.wikipedia.org/wiki/Computer_Vision.
[3] http://es.wikipedia.org/wiki/Reconocimiento_de_patrones.
[4] http://es.wikipedia.org/wiki/Biometra.
[5] http://en.wikipedia.org/wiki/Histogram_of_oriented_gradients.
[6] http://prtools.org/.
[7] Navneet Dalal and Bill Trigss. Histograms of oriented gradients for human
detection. In Proceedings of IEEE Conference Computer Vision and Pattern
Recognition, 2005.
[8] Abdenour Hadid and Matti Pietikaı̈nen. Face description with local binary
patterns: Application to face recognition. any, 2006.
[9] Javier Garcı́a Jalón. Aprenda matlab 6.5 como si estuviera en primero. any,
2004.
[10] Patricia Caballero Lemos. Detección de humanos en imágenes. any, 2008.
[11] Sujing Wang Nidal Zeidat and Christoph F. Eick. Dataset editing techniques:
A comparative study. Department of Computer Science, University of Houston,
any.
[12] P. Juszczak R.P.W. Duin. A matlab toolbox for pattern recognition. any, 2007.
89
90
BIBLIOGRAFÍA

Documentos relacionados