Post on 10-Nov-2021
APLICACIÓN DE UN SISTEMA CBIR BASADO EN REDES NEURONALES
FEED-FORWARD PARA EL MÓDULO DE IMÁGENES DEL SOFTWARE DE
ANÁLISIS DE DATOS CUALITATIVOS RITAQDA
FONSECA LÓPEZ ANDRÉS FELIPE
SANABRIA PAEZ HERNAN
DIRIGIDO POR:
PH.D ROBERTO FERRO ESCOBAR
UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS
FACULTAD DE INGENIERÍA
INGENIERÍA ELECTRÓNICA
BOGOTÁ D.C.
2018
APLICACIÓN DE UN SISTEMA CBIR BASADO EN REDES NEURONALES
FEED-FORWARD PARA EL MÓDULO DE IMÁGENES DEL SOFTWARE DE
ANÁLISIS DE DATOS CUALITATIVOS RITAQDA
FONSECA LÓPEZ ANDRÉS FELIPE 20111005044
SANABRIA PAEZ HERNAN 20062005011
Trabajo de grado para optar al título de
Ingeniero Electrónico
DIRIGIDO POR:
PH.D ROBERTO FERRO ESCOBAR
UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS
FACULTAD DE INGENIERÍA
INGENIERÍA ELECTRÓNICA
BOGOTÁ D.C.
2018
‘El auténtico problema no es si las maquinas piensan,
sino si lo hacen los hombres.’
Burrhus Frederic Skinner
i
RESUMEN
En el presente proyecto se planteó la construcción de un módulo, para la organización y
análisis de imágenes aplicando la metodología QDA, el cual fue implementado dentro del
software Ritaqda, y el cual fue proveído con características como el etiquetado automático
de códigos y la sugerencia de imágenes similares, para imágenes rurales, mediante la
implementación de un sistema CBIR basado en redes neuronales Feed-forward.
ii
AGRADECIMIENTOS
A mi madre Gilma, quien me ha brindado su apoyo incondicional durante toda esta etapa, a
la universidad distrital por abrirme sus puertas y brindarme acceso a el conocimiento, a mi
director Roberto Ferro y al grupo de investigación RITA, quienes hicieron posible la
realización de este proyecto, a mi compañero Andres por su dedicación, diligencia y
principalmete por su amistad, a todas aquellas personas que durante la carrera aportaron su
granito de arena. ¡Gracias… totales!
Hernan
Dedico estos agradecimientos a mis padres por brindarme sus respectivos ánimos al momento
de desarrollar este proyecto y el apoyo incondicional. Agradezco a mi director Roberto Ferro
y a mi evaluador Andrés Gaona, por la ayuda y la paciencia brindada durante todo este
proceso de desarrollo del proyecto.
. Andres
iii
TABLA DE CONTENIDO
Resumen .................................................................................................................................. i
Agradecimientos ..................................................................................................................... ii
Tabla de contenido................................................................................................................. iii
Lista de figuras ..................................................................................................................... vii
Lista de tablas ...................................................................................................................... xiv
Índice de abreviaturas .......................................................................................................... xvi
1. GENERALIDADES........................................................................................................ 1
1.1. PLANTEAMIENTO DEL PROBLEMA ................................................................ 1
1.2. JUSTIFICACIÓN .................................................................................................... 3
1.3. OBJETIVOS ............................................................................................................ 5
1.3.1. Objetivo general ............................................................................................... 5
1.3.2. Objetivos específicos ........................................................................................ 5
1.4. ANTECEDENTES .................................................................................................. 6
2. MARCO TEÓRICO ........................................................................................................ 9
2.1. ANÁLISIS DE DATOS EN LA INVESTIGACIÓN CUALITATIVA .................. 9
2.2. RECUPERACIÓN DE LA INFORMACIÓN VISUAL ....................................... 10
2.2.1. Recuperación De Imágenes Basada En Contenido CBIR .............................. 11
2.3. LA IMAGEN DIGITAL ........................................................................................ 11
2.4. MODELOS DE COLOR ....................................................................................... 12
2.4.1. Modelo de color RGB. ................................................................................... 13
2.4.2. Modelo de color YUV .................................................................................... 14
2.5. EXTRACCIÓN DE CARACTERÍSTICAS EN IMÁGENES .............................. 15
iv
2.5.1. Histogramas .................................................................................................... 15
2.5.2. Momentos de color ......................................................................................... 16
2.5.3. Análisis de componentes principales PCA ..................................................... 17
2.6. REDES NEURONALES FEED-FORWARD ....................................................... 18
2.6.1. Tipos de redes neuronales feed-forward ......................................................... 19
2.6.2. Topología ........................................................................................................ 22
2.7. APRENDIZAJE SUPERVISADO ........................................................................ 23
2.8. CLASIFICADOR BINARIO ................................................................................. 23
2.9. MÉTRICAS ........................................................................................................... 24
2.9.1. Matriz de confusión ........................................................................................ 24
2.9.2. Curvas ROC .................................................................................................... 26
2.9.3. Curvas de precisión y exhaustividad .............................................................. 27
2.9.4. Error cuadrático medio ................................................................................... 28
2.9.5. Funciones de similitud .................................................................................... 29
3. DISEÑO DE LOS SISTEMAS DE EXTRACCION DE CARACTERÍSTICAS Y
ENTRENAMIENTO DE LOS MODELOS DE RED NEURONAL FEED-FORWARD .. 31
3.1. ESCOGENCIA DE TECNOLOGÍAS DE SOFTWARE PARA LA
SIMULACIÓN ................................................................................................................. 32
3.2. CREACION DE LA BASE DE DATOS DE IMÁGENES .................................. 32
3.3. OBTENCIÓN DE LAS CARACTERÍSTICAS DE LA IMAGEN DIGITAL ..... 33
3.3.1. Obtención de las matrices de los modelos de color ........................................ 33
3.3.2. Diseño de algoritmo y obtención de los histogramas ..................................... 35
3.3.3. Diseño de algoritmo y obtención de los momentos de color .......................... 37
3.3.4. Diseño de algoritmo y obtención de los componentes principales ................. 38
3.4. DISEÑO Y ENTRENAMIENTO DE LA RED NEURONAL FEED-FORWARD
41
v
3.4.1. Diseño e implementación del algorimo de red neuronal feed – forward........ 42
3.4.2. Diseño y prueba de la red neuronal para la clasificación rural – no rural ...... 43
3.4.3. Resultados obtenidos del proceso de entrenamiento-validación para la
clasificación rural-no rural. ........................................................................................... 47
3.4.4. Diseño y prueba de la red neuronal de clasificación de coberturas ................ 47
3.4.5. Resultados obtenidos del proceso de entrenamiento-validación para la
clasificación de coberturas ............................................................................................ 51
4. DISEÑO Y PRUEBA DEL MÓDULO DE IMÁGENES DE RITAQDA ................... 53
4.1. DESCRIPCION Y ESTADO DE DESARROLLO DE RITAQDA ..................... 54
4.2. REQUERIMIENTOS DEL MÓDULO DE IMÁGENES DE RITAQDA ............ 55
4.2.1. Requerimientos funcionales ........................................................................... 55
4.2.2. Requerimientos no funcionales ...................................................................... 57
4.3. MODELO DE BASE DE DATOS PARA EL MÓDULO DE IMÁGENES ........ 57
4.4. IMPLEMENTACIÓN DEL SISTEMA CBIR ...................................................... 58
4.4.1 Algoritmo de extracción de características y red neuronal............................. 59
4.4.2 Algoritmo de función de similitud ................................................................. 60
4.5. PRUEBA DEL MÓDULO DE IMÁGENES ........................................................ 61
5. ANÁLISIS DE RESULTADOS ................................................................................... 71
5.1. ANÁLISIS DE LAS REDES NEURONALES FEED-FORWARD ..................... 71
5.1.1. Análisis de la red neuronal de clasificación rural-no rural ............................. 71
5.1.2. Análisis de la red neuronal de clasificación de coberturas ............................. 72
5.2. ANÁLISIS AL MÓDULO DE IMÁGENES DEL SOFTWARE RITAQDA ...... 76
5.2.1. Cumplimiento de requerimientos ................................................................... 76
5.2.2. Análisis al sistema cbir ................................................................................... 76
CONCLUSIONES ................................................................................................................ 80
vi
TABAJO FUTURO .............................................................................................................. 82
REFERENCIAS ................................................................................................................... 83
APÉNDICES ........................................................................................................................ 89
Apéndice A ....................................................................................................................... 89
Apéndice B ....................................................................................................................... 89
Apéndice C ....................................................................................................................... 90
Apéndice D ....................................................................................................................... 91
Apéndice E ........................................................................................................................ 92
Apéndice F ........................................................................................................................ 93
Apéndice G ....................................................................................................................... 96
Apéndice H ....................................................................................................................... 98
Apéndice I ....................................................................................................................... 100
Apéndice J ....................................................................................................................... 104
Apéndice K ..................................................................................................................... 107
Apéndice L ...................................................................................................................... 114
Apéndice M ..................................................................................................................... 116
Apéndice N ..................................................................................................................... 131
Apéndice O ..................................................................................................................... 156
vii
LISTA DE FIGURAS
FIGURA 1. SISTEMA CBIR. TOMADO DE (MELÉNDEZ ACOSTA, FIGUEROA RIOS, & MARÍN
HERNÁNDEZ, 2013). ............................................................................................................................. 11
FIGURA 2. REPRESENTACIÓN DE UNA IMAGEN DIGITAL. TOMADO DE (ARISTIZÁBAL
RAMÍREZ & RAMÍREZ MARTÍNEZ, 2006)........................................................................................ 12
FIGURA 3. CUBO RGB. TOMADO DE (PLATANIOTIS & VENETSANOPOULOS, 2000). ................... 13
FIGURA 4. MODELO DE COLOR YUV. TOMADO DE (NOOR ET AL., 2012). ..................................... 14
FIGURA 5. IMAGEN DE UN OJO Y SU RESPECTIVO HISTOGRAMA. TOMADO DE (NIXON &
AGUADO, 2012). .................................................................................................................................... 16
FIGURA 6. MODELO DE UNA NEURONA. TOMADO DE (SHIH, 2010). .............................................. 18
FIGURA 7. MODELO DE CAPAS DE UNA RED FEEDFORWARD. TOMADO DE (GONZALEZ, 2016).
................................................................................................................................................................. 19
FIGURA 8. PERCEPTRÓN SIMPLE TOMADO DE (GONZALEZ, 2016). ................................................ 19
FIGURA 9. PERCEPTRÓN MULTICAPA TOMADO DE (GONZALEZ, 2016). ....................................... 20
FIGURA 10 RED MADALINE TOMADO DE (GONZALEZ, 2016) ........................................................... 21
FIGURA 11. ESQUEMA DE UN CLASIFICADOR BINARIO. ................................................................... 24
FIGURA 12. CURVA ROC TOMADO DE (NCSS STATISTICAL SOFTWARE, 2014). .......................... 26
FIGURA 13. CURVA DE PRECISIÓN Y EXHAUSTIVIDAD. TOMADO DE (SAITO & REHMSMEIER,
2015). ....................................................................................................................................................... 27
FIGURA 14. IMAGEN DE PRUEBA. ........................................................................................................... 34
FIGURA 15. COMPONENTES RGB DE LA IMAGEN DE PRUEBA. ....................................................... 34
FIGURA 16 COMPONENTES Y, U Y V DE LA IMAGEN DE PRUEBA. ................................................. 34
FIGURA 17. HISTOGRAMA DE LOS COLORES RGB DE LA IMAGEN DE PRUEBA. ........................ 36
FIGURA 18. HISTOGRAMA DE LOS COLORES YUV DE LA IMAGEN DE PRUEBA. ........................ 36
FIGURA 19. ERROR CUADRÁTICO MEDIO PARA LOS COMPONENTES PRINCIPALES DE R, G Y
B. ............................................................................................................................................................. 40
FIGURA 20. ERROR CUADRÁTICO MEDIO PARA LAS COMPONENTES PRINCIPALES DE Y, U Y
V. ............................................................................................................................................................. 40
FIGURA 21. MODELO VISTA PLANTILLA DEL FRAMEWORK DJANGO. TOMADO DE (INFANTE
MONTERO, 2012) .................................................................................................................................. 54
FIGURA 22. ESTADO DE LA BASE DE DATOS ANTES DEL INICIO DEL PROYECTO. FUENTE
ELABORACIÓN PROPIA...................................................................................................................... 55
FIGURA 23. ENTIDADES QUE ES NECESARIO AÑADIR PARA IMPLEMENTAR EL MÓDULO DE
IMÁGENES DE RITAQDA. .................................................................................................................. 58
FIGURA 24. MODELO DEL SISTEMA CBIR IMPLEMENTADO EN EL MÓDULO DE IMÁGENES DE
RITAQDA. .............................................................................................................................................. 59
viii
FIGURA 25. DIAGRAMA DE CLASES DE LOS CLASIFICADORES. ..................................................... 60
FIGURA 26. RESULTADO DEL SOFTWARE PARA UNA IMAGEN NO RURAL. ................................ 62
FIGURA 27. RESULTADO DEL SOFTWARE PARA UNA IMAGEN RURAL. ....................................... 62
FIGURA 28. RESULTADO DE SOFTWARE RESPECTO AL ETIQUETADO DE COBERTURAS EN
IMÁGENES RURALES. ........................................................................................................................ 63
FIGURA 29. RESULTADO DE SOFTWARE RESPECTO AL ETIQUETADO DE COBERTURAS EN
IMÁGENES RURALES. ........................................................................................................................ 63
FIGURA 30. RESULTADO DEL SOFTWARE RESPECTO AL ETIQUETADO DE COBERTURAS EN
IMÁGENES RURALES. ........................................................................................................................ 64
FIGURA 31. RESULTADO DEL SOFTWARE RESPECTO AL ETIQUETADO DE COBERTURAS EN
IMÁGENES RURALES ......................................................................................................................... 64
FIGURA 32. IMAGEN DE PRUEBA 1 CON COBERTURA DE ÁRBOLES. ............................................. 67
FIGURA 33. RESULTADO DEL SOFTWARE RESPECTO A LA BÚSQUEDA DE IMÁGENES
SIMILARES CON COBERTURAS DE ÁRBOLES. ............................................................................. 67
FIGURA 34. IMAGEN DE PRUEBA 2 CON COBERTURA DE CESPED. ................................................ 68
FIGURA 35. RESULTADO DEL SOFTWARE RESPECTO A LA BÚSQUEDA DE IMÁGENES
SIMILARES CON COBERTURAS DE CESPED. ................................................................................ 68
FIGURA 36. IMAGEN DE PRUEBA 3 CON COBERTURA DE SUELO DESCUBIERTO. ...................... 69
FIGURA 37. RESULTADO DEL SOFTWARE RESPECTO A LA BÚSQUEDA DE IMÁGENES
SIMILARES CON COBERTURAS DE SUELO DESCUBIERTO. ...................................................... 69
FIGURA 38. IMAGEN DE PRUEBA 4 CON COBERTURA DE CUERPOS DE AGUA. .......................... 70
FIGURA 39. RESULTADO DEL SOFTWARE RESPECTO A LA BÚSQUEDA DE IMÁGENES
SIMILARES CON COBERTURAS DE CUERPOS DE AGUA. ........................................................... 70
FIGURA 40. CURVA ROC DE LA RED NEURONAL DE CLASIFICACIÓN RURAL-NO RURAL
APLICADA AL SOFTWARE DE RITAQDA. ...................................................................................... 72
FIGURA 41. CURVA DE PRECISIÓN Y EXHAUSTIVIDAD DE LA RED NEURONAL DE
CLASIFICACIÓN DE COBERTURAS PARA LA CLASIFICACIÓN DE ÁRBOLES. ...................... 73
FIGURA 42. CURVA DE PRECISIÓN Y EXHAUSTIVIDAD DE LA RED NEURONAL DE
CLASIFICACIÓN DE COBERTURAS PARA LA CLASIFICACIÓN DE CÉSPED. ......................... 74
FIGURA 43. CURVA DE PRECISIÓN Y EXHAUSTIVIDAD DE LA RED NEURONAL PARA LA
CLASIFICACIÓN DE SUELO DESCUBIERTO. ................................................................................. 75
FIGURA 44. CURVA DE PRECISIÓN Y EXHAUSTIVIDAD DE LA RED NEURONAL PARA LA
CLASIFICACIÓN DE CUERPOS DE AGUA. ...................................................................................... 75
FIGURA 45. CURVA DE PRECISIÓN Y EXHAUSTIVIDAD PARA EL SISTEMA DE BÚSQUEDA DE
LA IMAGEN DE PRUEBA 1. ................................................................................................................ 78
FIGURA 46. CURVA DE PRECISIÓN Y EXHAUSTIVIDAD PARA EL SISTEMA DE BÚSQUEDA DE
LA IMAGEN DE PRUEBA 2. ................................................................................................................ 78
ix
FIGURA 47. CURVA DE PRECISIÓN Y EXHAUSTIVIDAD PARA EL SISTEMA DE BÚSQUEDA DE
LA IMAGEN DE PRUEBA 3. ................................................................................................................ 79
FIGURA 48. CURVA DE PRECISIÓN Y EXHAUSTIVIDAD PARA EL SISTEMA DE BÚSQUEDA DE
LA IMAGEN DE PRUEBA 4. ................................................................................................................ 79
FIGURA 49. IMAGEN DE PRUEBA RECONSTRUIDA CON: A) 1 COMPONENTE PRINCIPAL. B) 10
COMPONENTES PRINCIPALES. C) 50 COMPONENTES PRINCIPALES. D) 100
COMPONENTES PRINCIPALES .......................................................................................................... 94
FIGURA 50. IMAGEN DE PRUEBA RECUPERADA CON 1 COMPONENTE PRINCIPAL EN Y
(LUMA) Y: A) 1 COMPONENTE PRINCIPAL EN U Y V. B) 10 COMPONENTES PRINCIPALES
EN U Y V.C) 100 COMPONENTES PRINCIPALES EN U Y V. ......................................................... 95
FIGURA 51. IMAGEN DE PRUEBA RECUPERADA CON 1 COMPONENTE PRINCIPAL EN U Y V Y:
A) 1 COMPONENTE PRINCIPAL EN Y. B) 10 COMPONENTES PRINCIPALES EN Y. C) 100
COMPONENTES PRINCIPALES EN Y. .............................................................................................. 95
FIGURA 52. COMPORTAMIENTO DEL MSE AL VARIAR LA TASA DE APRENDIZAJE AL
UTILIZAR LOS HISTOGRAMAS COMO CARACTERÍSTICAS DE ENTRADA PARA LA RED
NEURONAL CON UNA CAPA OCULTA. ......................................................................................... 100
FIGURA 53. COMPORTAMIENTO DEL MSE AL VARIAR LA TASA DE APRENDIZAJE AL
UTILIZAR LOS HISTOGRAMAS COMO CARACTERÍSTICAS DE ENTRADA PARA LA RED
NEURONAL CON DOS CAPAS OCULTAS. ..................................................................................... 101
FIGURA 54. COMPORTAMIENTO DEL MSE AL VARIAR LA TASA DE APRENDIZAJE AL
UTILIZAR LOS MOMENTOS DE COLOR COMO CARACTERÍSTICAS DE ENTRADA PARA LA
RED NEURONAL CON UNA CAPA OCULTA. ................................................................................ 101
FIGURA 55. COMPORTAMIENTO DEL MSE AL VARIAR LA TASA DE APRENDIZAJE AL
UTILIZAR LOS MOMENTOS DE COLOR COMO CARACTERÍSTICAS DE ENTRADA PARA LA
RED NEURONAL CON DOS CAPAS OCULTAS. ............................................................................ 102
FIGURA 56. COMPORTAMIENTO DEL MSE AL VARIAR LA TASA DE APRENDIZAJE AL
UTILIZAR LOS MÉTODOS DE COMPONENTES PRINCIPALES COMO CARACTERÍSTICAS DE
ENTRADA PARA LA RED NEURONAL CON UNA CAPA OCULTA. .......................................... 102
FIGURA 57. COMPORTAMIENTO DEL MSE AL VARIAR LA TASA DE APRENDIZAJE AL
UTILIZAR LOS MÉTODOS DE COMPONENTES PRINCIPALES COMO CARACTERÍSTICAS DE
ENTRADA PARA LA RED NEURONAL CON DOS CAPAS OCULTAS. ...................................... 103
FIGURA 58. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR EL NÚMERO DE NEURONAS EN
LA CAPA OCULTA PARA EL MÉTODO DE LOS HISTOGRAMAS RGB. ................................... 104
FIGURA 59. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR EL NÚMERO DE NEURONAS EN
LA CAPA OCULTA PARA EL MÉTODO DE MOMENTOS DE COLOR RGB. ............................. 105
FIGURA 60. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR EL NÚMERO DE NEURONAS EN
LA CAPA OCULTA PARA EL MÉTODO DE COMPONENTES PRINCIPALES RGB. ................. 105
x
FIGURA 61. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR EL NÚMERO DE NEURONAS EN
LA CAPA OCULTA PARA EL MÉTODO DE LOS HISTOGRAMAS YUV. ................................... 106
FIGURA 62. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR EL NÚMERO DE NEURONAS EN
LA CAPA OCULTA PARA EL MÉTODO DE COEFICIENTES DE PREDICCIÓN LINEAL YUV.
............................................................................................................................................................... 106
FIGURA 63. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR EL NÚMERO DE NEURONAS EN
LA CAPA OCULTA PARA EL MÉTODO DE COMPONENTES PRINCIPALES YUV. ................ 107
FIGURA 64. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR LA CANTIDAD DE NEURONAS
EN LA PRIMERA CAPA OCULTA PARA EL MÉTODO DE LOS HISTOGRAMAS EN EL
MODELO DE COLOR RGB, MANTENIENDO CONSTANTE EL NÚMERO DE NEURONAS EN
LA SEGUNDA CAPA. ......................................................................................................................... 108
FIGURA 65. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR LA CANTIDAD DE NEURONAS
EN LA SEGUNDA CAPA OCULTA PARA EL MÉTODO DE LOS HISTOGRAMAS EN EL
MODELO DE COLOR RGB, MANTENIENDO CONSTANTE EL NÚMERO DE NEURONAS EN
LA PRIMERA CAPA. ........................................................................................................................... 108
FIGURA 66. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR LA CANTIDAD DE NEURONAS
EN LA PRIMERA CAPA OCULTA PARA EL MÉTODO DE LOS MOMENTOS DE COLOR EN EL
MODELO DE COLOR RGB, MANTENIENDO CONSTANTE EL NÚMERO DE NEURONAS EN
LA SEGUNDA CAPA. ......................................................................................................................... 109
FIGURA 67. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR LA CANTIDAD DE NEURONAS
EN LA SEGUNDA CAPA OCULTA PARA EL MÉTODO DE LOS MOMENTOS DE COLOR EN
EL MODELO DE COLOR RGB, MANTENIENDO CONSTANTE EL NÚMERO DE NEURONAS
EN LA PRIMERA CAPA. .................................................................................................................... 109
FIGURA 68. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR LA CANTIDAD DE NEURONAS
EN LA PRIMERA CAPA OCULTA PARA EL MÉTODO DE LOS PCA EN EL MODELO DE
COLOR RGB, MANTENIENDO CONSTANTE EL NÚMERO DE NEURONAS EN LA SEGUNDA
CAPA. ................................................................................................................................................... 110
FIGURA 69. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR LA CANTIDAD DE NEURONAS
EN LA SEGUNDA CAPA OCULTA PARA EL MÉTODO DE LOS PCA EN EL MODELO DE
COLOR RGB, MANTENIENDO CONSTANTE EL NÚMERO DE NEURONAS EN LA PRIMERA
CAPA. ................................................................................................................................................... 110
FIGURA 70. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR LA CANTIDAD DE NEURONAS
EN LA PRIMERA CAPA OCULTA PARA EL MÉTODO DE LOS HISTOGRAMAS EN EL
MODELO DE COLOR YUV, MANTENIENDO CONSTANTE EL NÚMERO DE NEURONAS EN
LA SEGUNDA CAPA. ......................................................................................................................... 111
FIGURA 71. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR LA CANTIDAD DE NEURONAS
EN LA SEGUNDA CAPA OCULTA PARA EL MÉTODO DE LOS HISTOGRAMAS EN EL
xi
MODELO DE COLOR YUV, MANTENIENDO CONSTANTE EL NÚMERO DE NEURONAS EN
LA PRIMERA CAPA. ........................................................................................................................... 111
FIGURA 72. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR LA CANTIDAD DE NEURONAS
EN LA PRIMERA CAPA OCULTA PARA EL MÉTODO DE LOS MOMENTOS DE COLOR EN EL
MODELO DE COLOR YUV, MANTENIENDO CONSTANTE EL NÚMERO DE NEURONAS EN
LA SEGUNDA CAPA. ......................................................................................................................... 112
FIGURA 73. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR LA CANTIDAD DE NEURONAS
EN LA SEGUNDA CAPA OCULTA PARA EL MÉTODO DE LOS MOMENTOS DE COLOR EN
EL MODELO DE COLOR YUV, MANTENIENDO CONSTANTE EL NÚMERO DE NEURONAS
EN LA PRIMERA CAPA. .................................................................................................................... 112
FIGURA 74. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR LA CANTIDAD DE NEURONAS
EN LA PRIMERA CAPA OCULTA PARA EL MÉTODO DE LOS PCA EN EL MODELO DE
COLOR YUV, MANTENIENDO CONSTANTE EL NÚMERO DE NEURONAS EN LA SEGUNDA
CAPA. ................................................................................................................................................... 113
FIGURA 75. COMPARACIÓN DE LAS CURVAS ROC AL VARIAR LA CANTIDAD DE NEURONAS
EN LA SEGUNDA CAPA OCULTA PARA EL MÉTODO DE LOS PCA EN EL MODELO DE
COLOR YUV, MANTENIENDO CONSTANTE EL NÚMERO DE NEURONAS EN LA PRIMERA
CAPA. ................................................................................................................................................... 113
FIGURA 76. COMPORTAMIENTO DEL MSE AL VARIAR LA TASA DE APRENDIZAJE AL
UTILIZAR LOS HISTOGRAMAS COMO CARACTERÍSTICAS DE ENTRADA PARA LA RED
NEURONAL DE CLASIFICACIÓN DE COBERTURAS. ................................................................. 114
FIGURA 77. COMPORTAMIENTO DEL MSE AL VARIAR LA TASA DE APRENDIZAJE AL
UTILIZAR LOS MOMENTOS DE COLOR COMO CARACTERÍSTICAS DE ENTRADA PARA LA
RED NEURONAL DE CLASIFICACIÓN DE COBERTURAS. ........................................................ 115
FIGURA 78. COMPORTAMIENTO DEL MSE AL VARIAR LA TASA DE APRENDIZAJE AL
UTILIZAR LOS COMPONENTES PRINCIPALES COMO CARACTERÍSTICAS DE ENTRADA
PARA LA RED NEURONAL DE CLASIFICACIÓN DE COBERTURAS. ...................................... 115
FIGURA 79. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE LOS HISTOGRAMAS
RGB PARA EL CLASIFICADOR DE COBERTURA DE ÁRBOLES. .............................................. 116
FIGURA 80. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE LOS HISTOGRAMAS
RGB PARA EL CLASIFICADOR DE COBERTURA DE CÉSPED. ................................................. 117
FIGURA 81. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE LOS HISTOGRAMAS
RGB PARA EL CLASIFICADOR DE COBERTURA DE SUELO DESCUBIERTO. ....................... 117
xii
FIGURA 82. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE LOS HISTOGRAMAS
RGB PARA EL CLASIFICADOR DE COBERTURA DE CUERPOS DE AGUA. ........................... 118
FIGURA 83. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE LOS MOMENTOS DE
COLOR RGB PARA EL CLASIFICADOR DE COBERTURA DE ÁRBOLES. ............................... 119
FIGURA 84. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE LOS MOMENTOS DE
COLOR RGB PARA EL CLASIFICADOR DE COBERTURA DE CÉSPED. ................................... 119
FIGURA 85. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE LOS MOMENTOS DE
COLOR RGB PARA EL CLASIFICADOR DE COBERTURA DE SUELO DESCUBIERTO. ........ 120
FIGURA 86. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE LOS MOMENTOS DE
COLOR RGB PARA EL CLASIFICADOR DE COBERTURA DE CUERPOS DE AGUA. ............. 120
FIGURA 87. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE COMPONENTES
PRINCIPALES RGB PARA EL CLASIFICADOR DE COBERTURA DE ÁRBOLES. .................... 121
FIGURA 88. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE COMPONENTES
PRINCIPALES RGB PARA EL CLASIFICADOR DE COBERTURA DE CÉSPED. ....................... 122
FIGURA 89. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE COMPONENTES
PRINCIPALES RGB PARA EL CLASIFICADOR DE COBERTURA DE SUELO DESCUBIERTO.
............................................................................................................................................................... 122
FIGURA 90. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE COMPONENTES
PRINCIPALES RGB PARA EL CLASIFICADOR DE COBERTURA DE CUERPOS DE AGUA. . 123
FIGURA 91. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE HISTOGRAMAS YUV
PARA EL CLASIFICADOR DE COBERTURA DE ÁRBOLES. ....................................................... 124
FIGURA 92. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE HISTOGRAMAS YUV
PARA EL CLASIFICADOR DE COBERTURA DE CÉSPED. .......................................................... 124
FIGURA 93. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE HISTOGRAMAS YUV
PARA EL CLASIFICADOR DE COBERTURA DE SUELO DESCUBIERTO. ................................ 125
xiii
FIGURA 94. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE HISTOGRAMAS YUV
PARA EL CLASIFICADOR DE COBERTURA DE CUERPOS DE AGUA. ..................................... 125
FIGURA 95. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE MOMENTOS DE
COLOR YUV PARA EL CLASIFICADOR DE COBERTURA DE ÁRBOLES. ............................... 126
FIGURA 96. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE MOMENTOS DE
COLOR YUV PARA EL CLASIFICADOR DE COBERTURA DE CÉSPED. .................................. 127
FIGURA 97. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE MOMENTOS DE
COLOR YUV PARA EL CLASIFICADOR DE COBERTURA DE SUELO DESCUBIERTO. ........ 127
FIGURA 98. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE MOMENTOS DE
COLOR YUV PARA EL CLASIFICADOR DE COBERTURA DE CUERPOS DE AGUA.............. 128
FIGURA 99. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE COMPONENTES
PRINCIPALES YUV PARA EL CLASIFICADOR DE COBERTURA DE ÁRBOLES. ................... 129
FIGURA 100. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE COMPONENTES
PRINCIPALES YUV PARA EL CLASIFICADOR DE COBERTURA DE CÉSPED. ....................... 129
FIGURA 101. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE COMPONENTES
PRINCIPALES YUV PARA EL CLASIFICADOR DE COBERTURA DE SUELO DESCUBIERTO.
............................................................................................................................................................... 130
FIGURA 102. COMPARACIÓN DE LAS CURVAS PRECISIÓN Y EXHAUSTIVIDAD AL VARIAR EL
NÚMERO DE NEURONAS EN LA CAPA OCULTA CON EL MÉTODO DE COMPONENTES
PRINCIPALES YUV PARA EL CLASIFICADOR DE COBERTURA DE CUERPOS DE AGUA. . 130
xiv
LISTA DE TABLAS
TABLA 1. MATRIZ DE CONFUSIÓN. ......................................................................................................... 24
TABLA 2. MEDIDAS DE EVALUACIÓN BÁSICA OBTENIDAS A PARTIR DE LA MATRIZ DE
CONFUSIÓN .......................................................................................................................................... 26
TABLA 3. MÉTRICAS UTILIZADAS PARA CALCULAR LA SIMILITUD DE CARACTERÍSTICAS.. 30
TABLA 4. RESULTADO DEL MICROBENCHMARK EN MILISEGUNDOS. TOMADA DE
(BEZANSON ET AL., 2012) .................................................................................................................. 32
TABLA 5. VALORES DE LOS MOMENTOS DE COLOR EN EL MODELO RGB PARA LA IMAGEN
DE PRUEBA. .......................................................................................................................................... 38
TABLA 6. VALORES DE LOS MOMENTOS DE COLOR EN EL MODELO YUV PARA LA IMAGEN
DE PRUEBA. .......................................................................................................................................... 38
TABLA 7. ANÁLISIS COMPARATIVO FUNCIONES OBJETIVO. TOMADO DE (LLANO ET AL.,
2007) ........................................................................................................................................................ 42
TABLA 8. CANTIDAD DE NEURONAS EN LA CAPA OCULTA PARA CLASIFICADOR BINARIO
RURAL-NO RURAL. ............................................................................................................................. 43
TABLA 9. CANTIDAD DE NEURONAS EN LAS DOS CAPAS OCULTAS PARA CLASIFICADOR
BINARIO RURAL-NO RURAL. ............................................................................................................ 44
TABLA 10. TASAS DE APRENDIZAJE ESCOGIDAS PARA EL ENTRENAMIENTO DE LA RED
NEURONAL DE CLASIFICACIÓN RURAL – NO RURAL. .............................................................. 44
TABLA 11. VALOR DEL PARÁMETRO AUC PARA CADA UNO DE LOS MÉTODOS PROPUESTOS
AL VARIAR EL NÚMERO DE NEURONAS EN LA CAPA OCULTA. ............................................ 45
TABLA 12. VALOR DEL PARÁMETRO AUC PARA CADA UNO DE LOS MÉTODOS PROPUESTOS
AL VARIAR EL NÚMERO DE NEURONAS EN LA PRIMERA CAPA OCULTA. .......................... 46
TABLA 13. VALOR DEL PARÁMETRO AUC PARA CADA UNO DE LOS MÉTODOS PROPUESTOS
AL VARIAR EL NÚMERO DE NEURONAS EN LA SEGUNDA CAPA OCULTA ......................... 46
TABLA 14. PARÁMETRO AUC Y MEJOR UMBRAL OBTENIDOS A PARTIR DEL PROCESO DE
VALIDACIÓN CRUZADA. ................................................................................................................... 47
TABLA 15. MATRIZ DE CONFUSIÓN EN EL MODELO DE COLOR YUV PARA EL CLASIFICADOR
DE IMÁGENES RURALES Y NO RURALES...................................................................................... 47
TABLA 16. CANTIDAD DE NEURONAS EN LA CAPA OCULTA PARA CLASIFICADOR
MULTICLASE. ....................................................................................................................................... 48
TABLA 17. TASAS DE APRENDIZAJE ESCOGIDAS PARA EL ENTRENAMIENTO DE LA RED
NEURONAL DE CLASIFICACIÓN DE COBERTURAS. ................................................................... 48
xv
TABLA 18. VALOR DEL PARÁMETRO AP PARA CADA UNO DE LOS MÉTODOS PROPUESTOS AL
VARIAR EL NÚMERO DE NEURONAS EN LA CAPA OCULTA PARA LA CLASIFICACIÓN DE
COBERTURA DE ÁRBOLES. ............................................................................................................... 49
TABLA 19. VALOR DEL PARÁMETRO AP PARA CADA UNO DE LOS MÉTODOS PROPUESTOS AL
VARIAR EL NÚMERO DE NEURONAS EN LA CAPA OCULTA PARA LA CLASIFICACIÓN DE
COBERTURA DE CÉSPED. .................................................................................................................. 49
TABLA 20. VALOR DEL PARÁMETRO AP PARA CADA UNO DE LOS MÉTODOS PROPUESTOS AL
VARIAR EL NÚMERO DE NEURONAS EN LA CAPA OCULTA PARA LA CLASIFICACIÓN DE
COBERTURA DE SUELO DESCUBIERTO. ........................................................................................ 49
TABLA 21. VALOR DEL PARÁMETRO AP PARA CADA UNO DE LOS MÉTODOS PROPUESTOS AL
VARIAR EL NÚMERO DE NEURONAS EN LA CAPA OCULTA PARA LA CLASIFICACIÓN DE
COBERTURA DE CUERPOS DE AGUA. ............................................................................................ 50
TABLA 22. PARÁMETRO AP Y MEJOR UMBRAL OBTENIDOS A PARTIR DEL PROCESO DE
VALIDACIÓN CRUZADA. ................................................................................................................... 51
TABLA 23. MATRIZ DE CONFUSIÓN PARA LA CLASIFICACIÓN DE COBERTURA DE ÁRBOLES.
................................................................................................................................................................. 51
TABLA 24. MATRIZ DE CONFUSIÓN PARA LA CLASIFICACIÓN DE COBERTURA DE CÉSPED.. 52
TABLA 25. MATRIZ DE CONFUSIÓN PARA LA CLASIFICACIÓN DE COBERTURA DE SUELO
DESCUBIERTO. ..................................................................................................................................... 52
TABLA 26. MATRIZ DE CONFUSIÓN PARA LA CLASIFICACIÓN DE COBERTURA DE CUERPOS
DE AGUA. .............................................................................................................................................. 52
TABLA 27. CANTIDAD DE IMÁGENES RECUPERADAS E IMÁGENES RELEVANTES.................... 65
TABLA 28. CANTIDAD DE IMÁGENES RECUPERADAS E IMÁGENES RELEVANTES.................... 65
TABLA 29. CANTIDAD DE IMÁGENES RECUPERADAS E IMÁGENES RELEVANTES.................... 66
TABLA 30. CANTIDAD DE IMÁGENES RECUPERADAS E IMÁGENES RELEVANTES.................... 66
TABLA 31. PARÁMETROS DE CLASIFICACIÓN OBTENIDOS DE LA RED NEURONAL DE
COBERTURAS. ...................................................................................................................................... 72
TABLA 32. LISTA DE REQUERIMIENTOS CUMPLIDOS EN EL DESARROLLO DEL SOFTWARE
DE RITAQDA. ........................................................................................................................................ 76
xvi
ÍNDICE DE ABREVIATURAS
ACC: Accuracy
AP: Average Precision
AUC: Area Under Curve
CAQDAS: Computer-assisted qualitative data analysis software
CBIR: Content-Based Information Retrieval
ERR: Equal Error Rate
FLOSS: Free, Libre, Open Source Software
FN: False Negative
FP: False Positive
FPR: False Positive Rate
MSE: Mean Squared Error
PCA: Principal Component Analysis
PPV: Positive Predictive Value
QBIC: Query By Image Content
RITA: Red de Investigaciones de Tecnología Avanzada
ROC: Receiver Operating Charasteristic
SPC: Specificity
TBIR: Text-Based Information Retrieval
TN: True Negative
TP: True Positive
TPR: True Positive Rate
VIR: Visual Information Retrieval
1
1. GENERALIDADES
1.1. PLANTEAMIENTO DEL PROBLEMA
Los programas informáticos para la ayuda del análisis de datos cualitativos son herramientas que
nos facilitan la larga tarea de reducir los datos obtenidos en el proceso de investigación dentro de
un paradigma cualitativo. Dichas herramientas, comúnmente denominadas CAQDAS(Computer-
assisted qualitative data analysis software), permiten la indexación, codificación y etiquetado de
texto, video, audio e imágenes de una forma organizada para los investigadores (Saldaña, 2015).
La Red de Investigaciones de Tecnología Avanzada RITA UD se encuentra en proceso de
desarrollo de una herramienta CAQDAS de código abierto llamada RITAQDA que será
implementada a través de un servicio web. RITAQDA es un proyecto en desarrollo que emprendió
RITA en el año 2016 al servicio de la Universidad Distrital Francisco José de Caldas. El desarrollo
de este software está contemplado en 4 fases, en las cuales se implementará la codificación de
texto, imagen, audio y video (Rita, 2016).
Actualmente la herramienta se encuentra en la fase de codificación de imágenes y se desea realizar
un módulo capaz de etiquetarlas de manera autónoma. La propuesta de la presente monografía
plantea en la utilización de la técnica de recuperación de información visual basada en contenido
CBIR (Content-Based Information Retrieval) con el objetivo de etiquetar y codificar según la
metodología del análisis de datos cualitativos.
La recuperación de información de imágenes basada en contenido es uno de los dos tipos de
enfoque de recuperación de información visual VIR (Visual Information Retrieval) que consiste
en extraer información de una imagen para clasificarla de tal forma que la descripción de la imagen
se acerque lo más posible a la percepción de similitud de los usuarios. Los sistemas CBIR utilizan
la información del contenido visual de la imagen como puede ser el color, la forma o la textura,
para dar un contenido semántico a la misma y a partir de este buscar imágenes semánticamente
similares dentro de una base de datos (La Serna Palomino, Contreras, & Ruiz, 2010a). El otro
2
enfoque, la recuperación de información basada en texto TBIR (Text-Based Information
Retrieval), utiliza conceptos y textos asociados a la imagen para la recuperación de información
(Castro, 2009).
Desde la década de los 90 se viene investigando la forma de sustituir los sistemas TBIR,
empezando a utilizar los sistemas CBIR o enfoques híbridos(Castro, 2009), siendo la clasificación
de una imagen en un sistema CBIR una tarea que consiste en convertir los datos cuantitativos de
la imagen (información extraída de la imagen) en datos cualitativos (temas o clases que pertenece
una imagen) (Lizarazo, 2008). Los modelos de clasificación de imágenes se dividen
principalmente en modelos estadísticos tradicionales y los modelos de inteligencia artificial. Los
modelos de clasificación basado en inteligencia artificial son preferidos por encima de los modelos
estadísticos tradicionales en la medida en que los algoritmos basado en inteligencia artificial han
superado inconvenientes que los métodos estadísticos tradicionales no han podido superar (Bayona
& Salcedo, 2012). Algunos autores como (Pitarque, Roy, & Ruiz, 1998) han concluido la
superioridad de los métodos de inteligencia artificial luego de haber comparado el rendimiento de
estos con los modelos estadísticos tradicionales. En aplicaciones de inteligencia artificial para
clasificación de imágenes relativas a los sistemas CBIR, se ha utilizado las redes neuronales,
principalmente por su eficiencia a la hora de clasificar como lo corroboran (Erande & Badadapure,
2013) y (Shereena & David, 2014).
Los sistemas CBIR basados en redes neuronales tienen múltiples aplicaciones sin embargo no se
ha evidenciado la existencia de herramientas de análisis cualitativo que implementen dicho
concepto. Por lo tanto, la pregunta de investigación en la presente monografía es la siguiente: ¿Es
posible implementar un sistema CBIR basado en redes neuronales feedforward que clasifique
imágenes rurales y algunas coberturas y pueda ser utilizado en la codificación y etiquetado de esas
imágenes dentro del módulo de imágenes del software de análisis de datos cualitativos RITAQDA?
3
1.2. JUSTIFICACIÓN
La presente monografía busca implementar un sistema CBIR en el módulo de imágenes para la
plataforma de datos cualitativos de RITAQDA, puesto que dicha plataforma, actualmente en
desarrollo carece de esta función. Dicho módulo representa una ventaja para los investigadores de
la universidad Distrital Francisco José De Caldas al ofrecer una herramienta CAQDAS propia, con
etiquetado autónomo.
La mayoría de las herramientas CAQDAS existentes en el mercado como por ejemplo Atlas o
Aquad, son de pago y tienen restricciones en la cantidad de usuarios que pueden acceder, además
de no permitir realizar mejoras debido a que son herramientas de código cerrado (Atlas.ti, 2014;
Huber & Gürtler, 2013). Por lo anterior se hace necesario contribuir al desarrollo de herramientas
que cumplan con el enfoque FLOSS (Free, Libre, Open Source Software) (Stalman, 2013) y
RITAQDA es una iniciativa que cumple con dicho enfoque.
Además el presente proyecto se justifica puesto que es una iniciativa que puede como lo afirma
(Vasilachis de Gialdino, Ameigeira, & Chernobilsky, 2006) beneficiar y enriquecer los procesos
de análisis cualitativo y la calidad de las investigaciones realizadas por sus usuarios, en la
universidad Distrital Francisco José de caldas.
Por otra parte, en un aspecto similar a los sistemas TBIR , los programas de análisis de datos
cualitativos CAQDAS realizan la indexación de las imágenes y su contenido visual mediante
palabras clave, asignando códigos y categorías a las mismas (Rodríguez Gómez, Gil Flores, &
García Jiménez, 2011). Sin embargo, dicha tarea también podría realizarse utilizando descriptores
de bajo nivel como lo son el color, la forma y la textura, características que utilizan los sistemas
CBIR (Castro, 2009).
Si bien la desventaja de un sistema CBIR es su alto consumo computacional al tener que realizar
una gran cantidad de operaciones complejas, el sistema CBIR presenta ventajas frente al sistema
TBIR como por ejemplo con la representación semántica de la imagen que en los sistemas TBIR
es subjetiva y depende de la interpretación del significado del texto asociado a la imagen mientras
4
que en los sistemas CBIR es objetiva y depende de las características extraídas de la imagen
(Grubinger, 2007).
Algunos autores que utilizan los sistemas CBIR para la clasificación y reconocimiento de imágenes
se pueden encontrar en la bibliografía. Entre ejemplos de clasificación de imágenes se encuentra
trabajos desarrollados por (Castrillon, Alvarez, & López, 2008), (Córdoba, Puentes, & Otero,
2006) los cuales utilizan como descriptor de textura los PCA (Principal Component Analisys).
Otros trabajos desarrollados por (La Serna Palomino, Contreras, & Ruiz, 2010b), (P. Sardey & G.
K, 2015) consideran mejor el uso de descriptores de color como los histogramas. Un tercer método
también encontrado en la bibliografía utilizada por (Rogé et al., 2013) considera el uso de los
momentos invariantes como descriptor de forma.
En algunas investigaciones (Shirazi et al., 2016; Vegad & Italiya, 2015) es posible evidenciar el
uso de los anteriores descriptores como características de entrada para los sistemas CBIR que se
basan en redes neuronales. Las redes neuronales se utilizan en reconocimiento de imágenes debido
a su eficiencia frente a los métodos estadísticos tradicionales tal como lo mencionan (Shereena &
David, 2014). Es así como se aprecia el uso de la redes neuronales feed-forward para la
recuperación de información mediante contenido visual en los trabajos de (Karamti, Tmar, &
Gargouri, 2014; Nithya, 2013; Vegad & Italiya, 2015). Esto se debe su simplicidad y suficiencia
para resolver problemas de clasificación.Sin embargo, las redes neuronales en general tienen el
inconveniente de tener un costo computacional alto a la hora de ser entrenadas (Lizarazo, 2008),
aunque así mismo (Castro, 2009) afirma que a la hora de realizar la recuperación de información
se privilegia la eficiencia en la misma sobre el tiempo invertido en entrenar al sistema.
Entre los modelos de color utilizados para la representación de los descriptores de imágenes se
encuentra el modelo de color RGB el cual es ampliamente utilizado para mostrar gráficos de
computadores debido a la similitud con la cual trabaja el sistema visual humano (Science &
Studies, 2015). Algunos autores en cambio prefieren trabajar en otros modelos de color diferente
del RGB debido a que no es muy intuitivo al momento de manejarlo (Bratkova, Boulos, & Shirley,
n.d.) En trabajos, como por ejemplo el realizado por (Sudhir, 2011), se propone el uso del modelo
de color YUV debido a que con ese modelo de color se puede separar las componentes cromáticas
5
y acromáticas del color y por ende representar más fielmente la percepción de color de los seres
humanos. En el mismo trabajo se mostró que un sistema CBIR manejado en espacio de color YUV
posee mayor rendimiento y recuperación de imágenes que aquellos sistemas con espacio de color
RGB y HSV.
La clasificación de imágenes rurales y sus coberturas se justifica por el hecho de que RITA posee
a su disposición una base de datos de imágenes aéreas tomadas por drones entre las que se
encuentra imágenes de tipo rural, de ahí el crear un clasificador que permita identificar imágenes
de tipo rural y no rural. Además, la clasificación de coberturas utilizando sistema CBIR con
modelo de clasificación basado en inteligencia artificial ha sido estudiado y desarrollado como se
muestra en los trabajos de (Bayona & Salcedo, 2012) , (Espín, 2015), (Giraldo & Barrero, 2012)
entre otros. La cantidad de coberturas a clasificar se pueden encontrar en un rango típico entre 3 y
7 como lo menciona (Espín, 2015).
1.3. OBJETIVOS
1.3.1. OBJETIVO GENERAL
Desarrollar e integrar un sistema CBIR basado en redes neuronales feed-forward para el módulo
de imágenes del software de análisis de datos cualitativos RITAQDA.
1.3.2. OBJETIVOS ESPECÍFICOS
● Programar los algoritmos de extracción de características y de red neuronal feed-forward
en software.
● Evaluar el desempeño de la red neuronal para la clasificación de imágenes rurales y no
rurales.
● Evaluar el desempeño de la red neuronal para la clasificación de coberturas en imágenes
rurales.
● Desarrollar y programar el módulo de imágenes de RITAQDA, implementando el
sistema de extracción de características y red neuronal feed-forward.
6
1.4. ANTECEDENTES
Los primeros sistemas de recuperación de información visual VIR se dan con el auge de la
multimedia y la digitalización de la información visual. Uno de los pioneros en lo que se refiere a
la participación de las computadoras en el proceso de recuperación de información de imágenes,
Ivan Sutherland, demostró la viabilidad de la creación, manipulación y almacenamiento
computarizado de imágenes ya en 1963. Sin embargo, los muy altos costos de hardware
obstaculizaron el éxito de las imágenes digitales durante mucho tiempo, tardando hasta finales de
la década de 1980 en donde la tecnología finalmente se consolidó (Grubinger, 2007). Para ese
tiempo, los primeros trabajos de recuperación de imágenes se basaban en la recuperación de texto.
Para la década de 1990 aparecieron los primeros sistemas de recuperación de información basada
en contenido. En el trabajo realizado por (Kato, 1992) se hacía una comparación manual en la
intensidad de los pixeles usando como ejemplo unas figuras de distintas formas y colores y luego
guardando información en una base de datos relacional. A partir de ese tiempo, se han realizado
gran variedad de trabajos que involucran ese tema. Por ejemplo en (Shirazi et al., 2016) se realizó
un sistema que clasifica y recupera información de imágenes de hojas de plantas utilizando como
descriptores los histogramas y la detección de bordes. Otro sistema similar fue implementado por
(Vegad & Italiya, 2015) el cual realiza el mismo procedimiento para nueve tipos de fruta,
utilizando los histogramas normalizados y realizando la clasificación mediante una red neuronal.
En el tema concerniente a la clasificación de coberturas podemos encontrar trabajos como el de
(Arango, Branch, & Botero, 2005) en el cual se clasificaron 8 tipos de coberturas mediante un
método de máxima similitud y se aplicó el algoritmo no supervisado SOM e ISOATA concluyendo
que dichos métodos no ofrecían una buena convergencia. Otro trabajo encontrado en el área de las
coberturas fue el de (Córdoba et al., 2006) en el cual se realizó la clasificación utilizando métodos
supervisados y no supervisados a partir de descriptores como las bandas espectrales y el uso de
análisis de componentes principales como método de obtención de características, obteniendo
mejores resultados con los métodos supervisados.
En el campo comercial se pueden encontrar varias herramientas desarrolladas que implementan el
sistema CBIR. Ejemplos de esos sistemas son las herramientas QBIC, NeTra y Virage entre otros.
7
QBIC fue desarrollado por IBM para explorar algunos métodos de recuperación basada en
contenido permite consultas en grandes bases de datos de imágenes y videos basadas en imágenes
de ejemplo, croquis y dibujos construidos por el usuario y patrones de color y textura seleccionados
(Flickner et al., 1995). NeTra es un prototipo de sistema CBIR que se caracteriza por usar un
algoritmo automatizado robusto de segmentación de imágenes que permite la búsqueda basada en
objetos o regiones (Ma & Manjunath, 1999). El sistema Virage utiliza características tales como
color, textura, composición, y estructura para buscar imágenes. Sin embargo, su más reciente
versión ha utilizado varias técnicas nuevas para incluir información espacial en las
representaciones de imágenes (Bach et al., 1996). Una comparativa entre las herramientas CBIR
desarrolladas respecto a los descriptores que utilizan se puede encontrar en el artículo de (Shirazi
et al., 2016)
En el campo de las herramientas CAQDAS, los sistemas CBIR aún no se han implementado En
casos similares de indexación, como por ejemplo los motores de búsqueda de Google pudiera
parecer que los buscadores de imágenes utilizan el análisis y la comparación de imágenes, pero en
realidad la búsqueda se basa principalmente en el nombre del archivo que contiene la imagen, en
el nombre del enlace o en el texto que aparece en la página donde se encuentra la imagen. Es decir
que la búsqueda se basa en información de texto y no en información gráfica (Google, 2010).
Actualmente se han desarrollado aplicaciones como “Google Goggles” basadas en el
reconocimiento de imágenes utilizando el contenido de las mismas, aunque para ello se centran en
un subconjunto de las imágenes que Google ha catalogado previamente ya que el análisis y
comparación de imágenes digitales requiere de un coste computacional muy alto.
En campos de investigación como la antropología los CAQDAS han sido utilizados desde sus
orígenes como método principal de análisis. En cambio, en otros campos tales como las ciencias
humanas ha tenido lugar un desarrollo conflictivo debido a la aparición de una dualidad entre el
conocimiento adquirido a través de datos estadísticos y el conocimiento adquirido por la acción
(Alarcón Venegas, Quijada Carrasco, & Ponce Pérez, 2012; Rodríguez Gómez et al., 2011).
Actualmente se han desarrollado programas que, basados en los datos cualitativos, facilita la larga
tarea de reducir los datos obtenidos y permite generar una mejor organización en la información
que se requiera buscar. Estos programas que implementan herramientas de análisis cualitativo
8
QDA ya existen en el mercado actual y poseen funciones tales como organización e integración
de datos, búsqueda y recuperación de información, vinculación, representación gráfica y trabajo
en equipo. Algunos de los softwares que se pueden encontrar de este tipo son:
NUD*IST, ATLAS.ti, AQUAD, Ethnograph, WINMAX, MAXQDA y QDA Miner.
9
2. MARCO TEÓRICO
En este capítulo se exhiben los conceptos teóricos relativos a la pregunta propuesta en el
planteamiento del problema. El hecho de exponer estos conceptos pretende ofrecer una
contextualización del problema y proveer una primera visión de una posible respuesta a la pregunta
planteada. Por lo tanto, se cubren temas relativos al análisis de datos en la investigación cualitativa,
la imagen digital, la recuperación de imágenes por contenido visual CBIR(Content Based Image
Retrieval) (Kumar & Gopal, 2010), los modelos de color, las redes neuronales feedforward,
técnicas de extracción de características en imágenes y reducción de dimensionalidad. Siendo
dichos temas el núcleo de construcción del proyecto.
2.1. ANÁLISIS DE DATOS EN LA INVESTIGACIÓN CUALITATIVA
En la investigación cualitativa una fase importante que se lleva a cabo durante todo el proceso es
el análisis de los datos recolectados. Dichos datos pueden representar información visual,
información auditiva e información textual.(Hernandez Sampieri, Fernandez Collado, & Baptista
Lucio, 2010a).
El análisis de los datos cualitativos debe ser sistemático, es decir seguir una secuencia y un orden.
Los pasos que realiza un investigador comprenden las siguientes tres fases:
1. Recolección de datos.
2. Ordenar la información.
3. Codificar y categorizar la información organizada.
4. Integrar la información.
La codificación es el proceso mediante el cual se agrupa la información en categorías que
concentran las ideas, conceptos o temas similares descubiertos por el investigador. Los códigos
son etiquetas asociadas a trozos de información (auditiva, visual, y/o textual) que pueden ser
agrupados en categorías. Los códigos se utilizan para recuperar y organizar los trozos de
información (Fernández Núñez, 2006).
10
En la actualidad las herramientas CAQDAS facilitan al investigador la codificación y
categorización de la información pero de ninguna manera sustituye el análisis creativo del
investigador (Hernandez Sampieri, Fernandez Collado, & Baptista Lucio, 2010b).
2.2. RECUPERACIÓN DE LA INFORMACIÓN VISUAL
La recuperación de información visual VIR (Visual Information Retrieval), es un campo de
investigación relativamente nuevo, en las ciencias de la computación y la ingeniería. El propósito
de los sistemas VIR, al igual que los sistemas convencionales de recuperación de información, es
obtener todas las imágenes o videos relevantes a una consulta realizada por un usuario. (Marques
& Furht, 2002). La razón del desarrollo de este tipo de sistemas es la gran cantidad de información
multimedia existente y la incapacidad de los sistemas convencionales de asignar automáticamente
números o palabras claves, asociándolas con una categorización o descripción (Kumar & Gopal,
2010). El objetivo principal de un VIR es, sin duda, "encontrar una imagen o un conjunto de
imágenes que un usuario está buscando dentro de una base de datos de imágenes o una colección
de imágenes" (Grubinger, 2007).
Según (Castro, 2009) es posible identificar tres enfoques diferentes dentro de los sistemas VIR:
− Recuperación basada en Texto TBIR (Text Based Image Retrieval).
− Recuperación basada en contenido CBIR (Content Based Image Retrieval).
− Combinación de TBIR y CBIR.
Según (Castro, 2009) la construcción de un sistema VIR sigue cuatro etapas de desarrollo:
1. Extracción de características: A cada imagen se le extrae información necesaria para
describirla.
2. Indexación: La información extraída es indexada y almacenada en una base de datos para
su posterior recuperación.
3. Recuperación: A partir de una imagen se busca imágenes con contenido similar utilizando
los índices.
4. Evaluación: Se mide la calidad de recuperación del sistema.
11
2.2.1. RECUPERACIÓN DE IMÁGENES BASADA EN CONTENIDO CBIR
En la presente investigación, se aborda el tema desde el enfoque CBIR, el cual según (Kumar &
Gopal, 2010; Martínez Comeche, 2013) comprende la recuperación de los rasgos propios de la
imagen, como el color, la forma y la textura, características que no abordan los sistemas TBIR.
En la Figura 1 se muestra el esquema de un sistema de recuperación de información visual CBIR
en términos generales:
Figura 1. Sistema CBIR. Tomado de (Meléndez Acosta, Figueroa Rios, & Marín Hernández,
2013).
Como se observa en la Figura 1 un sistema CBIR consta de varios módulos como: una interfaz
gráfica de usuario, extracción de características, vectores de características, base de datos de
imágenes y una función de similitud. Los fundamentos teóricos se enuncian en las siguientes
secciones.
2.3. LA IMAGEN DIGITAL
Una imagen es una función de dos dimensiones que representa la medida de características como
brillo o color de una escena vista, y representa una proyección de una escena en tres dimensiones
sobre una de dos dimensiones. Matemáticamente puede ser vista como una función f(x,y) donde
12
por cada posición (x,y) representa un punto en el plano de proyección y f(x,y) define la intensidad
de luminosidad en dicho punto. Si dicha función posee un rango continuo de valores nos
encontramos ante una imagen analógica, por el contrario, si el rango de valores es discreto se trata
de una imagen digital(Jayaraman, Esakkirajan, & Veerakumar, 2011). Es decir, una imagen digital
de N×M formalmente se puede aproximar mediante una función matricial como se muestra en la
ecuación (1).
𝑓(𝑥, 𝑦) = [
𝑓(1,1) 𝑓(1,2) ⋯ 𝑓(1, 𝑀)𝑓(2,1) 𝑓(2,2) ⋯ 𝑓(2, 𝑀)
⋮ ⋮ ⋱ ⋮𝑓(𝑁, 1) 𝑓(𝑁, 2) ⋯ 𝑓(𝑁, 𝑀)
] (1)
Una imagen digital está compuesta por elementos llamados pixeles. Un pixel es la muestra más
pequeña que pueda existir de una imagen (Jayaraman et al., 2011). Si se trata de imágenes color
natural RGB un pixel se representa mediante una terna de valores que corresponden a la intensidad
de brillo en las bandas RGB (Red Green Blue) en un punto. En la Figura 2 se puede ver un ejemplo
de una imagen digital en escala de grises, así como el valor de intensidad de gris correspondiente
a cada pixel.
Figura 2. Representación de una imagen digital. Tomado de (Aristizábal Ramírez & Ramírez Martínez, 2006).
2.4. MODELOS DE COLOR
Para (Ford & Roberts, 1998) un modelo de color es un método a través del cual los seres humanos
especifican, crean y visualizan el color, teniendo en cuenta atributos como el brillo y el matiz. Una
definición más formal es provista por (Jack, 2009) quien afirma que un modelo de color es una
representación matemática de un conjunto de colores. Los modelos usualmente permiten la
13
representación del color mediante un sistema de varias coordenadas o parámetros que indican la
posición del color dentro de dichos modelos (Ford & Roberts, 1998).
Los tres modelos de color más populares según (Jack, 2009) son el RGB (usado para los gráficos
de computadora), el YUV y sus variantes YIQ, YCbCr (usado en los sistemas de video) y el
CMYK (usado en impresión).
2.4.1. MODELO DE COLOR RGB.
El rojo verde y azul RGB (Red Green and Blue por sus siglas en inglés) es un sistema de color
aditivo basado en la teoría tri-cromática (Ford & Roberts, 1998), es decir cada color se forma por
la combinación (suma) de cantidades o niveles de cada una de sus bandas. El RGB es un modelo
representado por un sistema de coordenadas cartesiano como el que se observa en la Figura 3, en
el cual la diagonal, que combina cada color en cantidades iguales, representa la escala de grises
(Plataniotis & Venetsanopoulos, 2000).
Figura 3. Cubo RGB. Tomado de (Plataniotis & Venetsanopoulos, 2000).
Como se observa en la Figura 3 cada color en el modelo RGB es un subconjunto de dicho modelo,
generado por la combinación de los colores primarios. Si se usa una escala apropiada en los ejes
primarios, el modelo se puede normalizar para que el valor máximo de cada uno de ellos sea 1. Es
así como el color negro puede ser representado con la coordenada (0,0,0) mientras que el blanco
se representa con la coordenada (1,1,1) (Plataniotis & Venetsanopoulos, 2000).
14
Como se expuso en el párrafo anterior el modelo de color RGB es un sistema de coordenadas
normalizado en el rango [0 1], sin embargo, cuando los colores son utilizados en forma digital, las
librerías de software traducen el valor de coma flotante a un valor entero de 8 bits cuyo rango es
[0 255] (Plataniotis & Venetsanopoulos, 2000). Es así como la representación para el blanco queda
en la coordenada (255,255,255).
El modelo de color RGB es muy utilizado por lo tanto en aplicaciones digitales, sin embargo, no
es muy eficiente cuando se trata de reproducir los colores del mundo real. Todos sus componentes
necesitan el mismo ancho de banda para generar un color en el cubo RGB lo que hace a dicho
método demasiado costoso para la transmisión. Por esta razón se han diseñado otros estándares de
video derivados del RGB que utilizan la luminancia y la diferencia de 2 señales de color, como el
YUV y sus derivados YIQ y YCbCr (Jack, 2009).
2.4.2. MODELO DE COLOR YUV
El modelo de color YUV y su derivado YIQ son usados por los estándares de video compuesto
PAL (Phase Alternation Line), NTSC (National Television System Committee) y SECAM
(Sequentiel Couleur Avec Mémoire or Sequential Color with Memory) (Jack, 2008), mientras que
YCbCr es utilizado en el estándar de televisión digital. En dicho modelo la componente Y está
referida a la información de escala de grises o Luminancia, mientras que las componentes U y V
hacen referencia a la información de crominancia (Noor, Mokhtar, Rafiqul, & Pramod, 2012).
Figura 4. Modelo de color YUV. Tomado de (Noor et al., 2012).
15
En la Figura 4 se observa como el modelo de color YUV contiene al RGB, por lo tanto, es
posible transformar un punto desde el modelo RGB al modelo YUV. En la ecuación (2) se
presenta la matriz de transición que realiza dicha transformación.
[𝑌𝑈𝑉
] = [0,299 0,587 0,114
−0,147 −0,289 0,4360,615 −0,515 −0,1
] [𝑅𝐺𝐵
] (2)
Y de manera análoga para transformar un punto desde el modelo YUV al RGB tenemos una matriz
como la de la ecuación (3):
[𝑅𝐺𝐵
] = [1 0 1,1401 −0,395 −0,5811 2,032 0
] [𝑌𝑈𝑉
] (3)
2.5. EXTRACCIÓN DE CARACTERÍSTICAS EN IMÁGENES
Una característica es definida como una función de una o más variables, que especifican alguna
propiedad cuantificable de un objeto. En el caso particular del procesamiento digital de imágenes
dicho elemento puede hacer referencia a generalidades como el color, la textura y la forma, o a
particularidades como las caras, las huellas, que pertenecen a un dominio específico (Choras,
2007).
En las siguientes subsecciones, se presenta una descripción teórica de las características extraídas
en la presente monografía.
2.5.1. HISTOGRAMAS
Un histograma de una imagen digital, es un diagrama de barras el cual representa la cantidad de
pixeles que existen dentro de la misma, pertenecientes a un nivel de brillo (Phillips, 2000), en el
caso de imágenes codificadas con 8 bits dichos niveles varían en un rango de 0 a 255.
En la Figura 5 se observa una imagen de un ojo y su respectivo histograma (Nixon & Aguado,
2012). El histograma en este caso representa una funcionen cuyas abscisas se representa el nivel
16
de gis y en cuyas ordenadas se representa la cantidad de pixeles que corresponden a cada nivel de
gris.
Figura 5. Imagen de un ojo y su respectivo histograma. Tomado de (Nixon & Aguado, 2012).
2.5.2. MOMENTOS DE COLOR
En la teoría de probabilidad, una distribución de probabilidad puede ser caracterizada mediante
sus momentos. En el caso de una imagen, se puede interpretar la distribución de sus pixeles como
una distribución de probabilidad que también pueden ser representadas por momentos. Los
momentos de color pueden caracterizar la distribución del color dentro de dicha imagen (Afifi,
2011).
Los momentos de primer, segundo y tercer orden han probado ser eficientes y efectivos en la
representación de la distribución de color de imágenes (Afifi, 2011). Dichos momentos de primer
a tercer orden se representan mediante la media (E), la desviación estándar (σ) y la asimetría (s)
respectivamente.
Los momentos de color son las siguientes:
• Primer momento: media
𝐸𝑖 =1
𝑁∑ 𝑝𝑖𝑗
𝑁
𝑗=1
(4)
17
• Segundo momento: desviación estándar
σ𝑖 = √1
𝑁∑(𝑝𝑖𝑗 − 𝐸𝑖)
2𝑁
𝑗=1
2
(5)
• Tercer momento: asimetría
s𝑖 = √1
𝑁∑(𝑝𝑖𝑗 − 𝐸𝑖)
3𝑁
𝑗=1
3
(6)
Donde pij es el valor de la intensidad del j-ésimo pixel del i-ésimo canal.
2.5.3. ANÁLISIS DE COMPONENTES PRINCIPALES PCA
El análisis de componentes principales (PCA Principal Components Analysis) es una formulación
matemática usada para la reducción de dimensiones (Santo, 2012). Dicha Formulación también
denominada transformación de Karhunen Loeve, utiliza técnicas de factorización desarrolladas en
el álgebra línea l(Nixon & Aguado, 2012). En dichas técnicas los datos son proyectados sobre un
subespacio generado por un sistema de ejes ortogonales, los cuales pueden ser obtenidos utilizando
el método de descomposición de valores singulares SVD (Singular Values Decomposition) (Santo,
2012).
Para el cálculo de los PCA de una imagen digital se parte de su representación matricial como se
enunció en la ecuación (1) aplicando una corrección para que las columnas de la matriz tengan
media cero y varianza unitaria. A partir de la imagen corregida se calcula la matriz de covarianza
C de la imagen, multiplicando la matriz 𝑓(𝑥, 𝑦) corregida, por su transpuesta, como se muestra en
la ecuación (7).
𝐶 = 𝑓(𝑥, 𝑦) • 𝑓(𝑥, 𝑦)𝑇 (7)
A continuación, se utiliza un procedimiento de algebra lineal en el que se calculan los valores y
vectores propios de la matriz de covarianza. Las columnas de la matriz de vectores propios
18
obtenida de este procedimiento representan los componentes principales de la imagen (Santo,
2012).
2.6. REDES NEURONALES FEED-FORWARD
Las redes neuronales son clasificadores muy robustos. Buscan asemejarse al cerebro humano y sus
interconexiones de neuronas. Cada neurona consta de una cantidad de entradas igual al número de
características del objeto que se desea clasificar. Cada una de estas entradas es lo que se denomina
una sinapsis. Cada sinapsis tiene un peso asociado (wki) el cual se multiplica por la característica
de entrada correspondiente. Luego todas las sinapsis se unen mediante un operador de suma al que
se le aplica una función de activación. En la Figura 6 se presenta el modelo de una neurona
artificial (Shih, 2010).
Figura 6. Modelo de una neurona. Tomado de (Shih, 2010).
En cada neurona:
𝑣𝑘 = ∑ 𝑤𝑘𝑗𝑥𝑗 + 𝑏𝑘
𝑚
𝑗=1
(8)
la función de activación 𝜑(∙) puede tener varias formas:
• Función umbral 𝜑(𝑣) = {1 𝑠𝑖 𝑣 ≥ 00 𝑠𝑖 𝑣 < 0
• Función sigmoide 𝜑(𝑣) =1
1+𝑒−𝑎𝑣
• Función tangente hiperbólica: 𝜑(𝑣) = tanh (𝑣)
19
Una red neuronal feed-forward consiste en una red neuronal compuesta de varias capas de
neuronas colocadas en serie. La capa de neuronas que reciben el aprendizaje, los datos o señales
del entorno se denomina capa sensorial. La capa de neuronas encargadas de proporcionar la
respuesta de la red se denomina capa de salida. Una capa de neuronas intermedias entre la capa
sensorial y la capa de salida que no tiene conexión directa con el entorno, es decir no recibe
estímulos ni genera una respuesta final de la red, se denomina la capa oculta. Las neuronas de la
capa oculta, gracias a que se encuentran en el intermedio de la red neuronal, proporciona grados
de libertad a la red en general las cuales le permite aprender y representar más fehacientemente
determinadas características del entorno que trata de modelar (Gonzalez, 2016).
Figura 7. Modelo de capas de una red feedforward. Tomado de (Gonzalez, 2016).
2.6.1. TIPOS DE REDES NEURONALES FEED-FORWARD
2.6.1.1. PERCEPTRÓN SIMPLE:
Esta es una neurona de aprendizaje supervisado, formada por una capa sensorial de m neuronas y
una capa de salida de una sola neurona. Las neuronas de entrada son discretas y la función de
activación de las neuronas de la capa de salida es de tipo escalón.
Figura 8. Perceptrón simple tomado de (Gonzalez, 2016).
20
Es un dispositivo entrenable que puede determinar automáticamente los pesos sinápticos. El
entrenamiento de la neurona se da a través de los cambios en los pesos hasta lograr la salida
deseada (Gonzalez, 2016).
2.6.1.2. PERCEPTRÓN MULTICAPA:
Este modelo por una capa sensorial, una capa de salida y una capa oculta. El perceptrón multicapa
corrige el problema del perceptrón simple de solo poder resolver problemas separados linealmente.
Es una de las arquitecturas más utilizadas para resolver problemas real (Gonzalez, 2016).Consiste
de m entradas, cada una esas entradas se conecta a cada una de las m neuronas de la capa oculta.
Cada una de las m neuronas ocultas se conectan a la única neurona de salida.
Figura 9. Perceptrón multicapa tomado de (Gonzalez, 2016).
2.6.1.3. RED ADALINE:
Es muy similar a la red Perceptrón con la diferencia de que su función de activación es lineal en
lugar de ser un escalón como es el caso del Perceptrón. Este tipo de red presenta la misma
limitación del Perceptrón simple respecto al tipo de problemas que pueden resolver, ya que ambas
redes sólo pueden resolver problemas linealmente separables (Gonzalez, 2016).
2.6.1.4. RED MADALINE:
La red Madaline es una mejora de la red Adaline al combinar en una sola red el diseño de la red
Perceptrón multicapa con la red Adaline.
21
Figura 10 Red Madaline Tomado de (Gonzalez, 2016)
2.6.1.5. RED BACK-PROPAGATION:
Esta red, al igual que Adeline y Madeline, se caracteriza por tener una arquitectura en niveles y
conexiones hacia adelante entre las neuronas. Consiste en un aprendizaje de un conjunto
predefinido de pares de entradas-salidas dados como ejemplo, empleando un ciclo de propagación-
adaptación de dos fases.
En la primera fase, una vez que se ha aplicado un patrón a la entrada de la red como estímulo, este
se propaga desde la primera capa a través de las capas siguientes de la red, hasta generar una salida.
Las ecuaciones de propagación hacia adelante son las siguientes:
𝐸𝑛𝑡𝑟𝑎𝑑𝑎 𝑑𝑒 𝑙𝑎 𝑟𝑒𝑑 𝑛𝑒𝑢𝑟𝑜𝑛𝑎𝑙 = 𝑋0
𝑆𝑎𝑙𝑖𝑑𝑎 𝑑𝑒 𝑙𝑎 𝑝𝑟𝑖𝑚𝑒𝑟𝑎 𝑐𝑎𝑝𝑎 𝑜𝑐𝑢𝑙𝑡𝑎 = 𝑋1 = 𝜑1(𝑊1 ∙ 𝑋0)𝑆𝑎𝑙𝑖𝑑𝑎 𝑑𝑒 𝑙𝑎 𝑠𝑒𝑔𝑢𝑛𝑑𝑎 𝑐𝑎𝑝𝑎 𝑜𝑐𝑢𝑙𝑡𝑎 = 𝑋2 = 𝜑2(𝑊2 ∙ 𝑋1)
𝑆𝑎𝑙𝑖𝑑𝑎 𝑑𝑒 𝑙𝑎 𝑖 − 𝑒𝑠𝑖𝑚𝑎 𝑐𝑎𝑝𝑎 𝑜𝑐𝑢𝑙𝑡𝑎 = 𝑋𝑖 = 𝜑𝑖(𝑊𝑖 ∙ 𝑋𝑖−1)𝑆𝑎𝑙𝑖𝑑𝑎 𝑑𝑒 𝑙𝑎 𝑟𝑒𝑑 𝑛𝑒𝑢𝑟𝑜𝑛𝑎𝑙 = 𝑌 = 𝜑𝐿(𝑊𝐿 ∙ 𝑋𝐿−1)
(9)
La señal de salida Y se compara con la salida deseada T y se calcula una señal de error para cada
una de las salidas.
𝐸 =
1
2‖𝑌 − 𝑇‖2 (10)
22
En la segunda fase, para reducir el valor del error se cambia los viejos pesos 𝑊′ por nuevos pesos
W que dependen de la variación de los 𝑊′ en dirección negativa de la gradiente del error con
respecto a esos pesos.
Las ecuaciones de propagación hacia atrás son las siguientes:
𝑊𝑖 = 𝑊′𝑖 − 𝛼𝑊′𝑖 ∘
𝜕𝐸
𝜕𝑊′𝑖 (11)
𝜕𝐸
𝜕𝑊𝑖= 𝛿𝑖 ∙ 𝑋𝑖−1
𝑇 (12)
𝛿𝐿 = (𝑌 − 𝑇) ∘ 𝜑′𝐿(𝑊′𝐿 ∙ 𝑋𝐿−1) (13)
𝛿𝑖 = (𝑊′𝑖+1𝑇 ∙ 𝛿𝑖) ∘ 𝜑′𝑖(𝑊𝑖 ∙ 𝑋𝑖−1) (14)
Donde L es el número de capas ocultas que posee la red neuronal y 𝜑′ es la derivada de la función
de activación (Raja, 2016).
2.6.2. TOPOLOGÍA
La escogencia de la topología es uno de los grandes problemas de investigación puesto que no
existe una técnica con una formulación formal que permita establecerla. Sin embargo, existen
técnicas empíricas que permiten escoger dicho parámetro. Una de ellas es el método de la pirámide
geométrica utilizada en (Pano Azucena, 2015). En dicho método se tienen en cuenta dos casos para
la solución de problemas de redes neuronales, estableciendo redes de una y dos capas ocultas
puesto que la mayoría de problemas se solucionan con máximo dos capas ocultas.
La fórmula para la escogencia del número de neuronas para una capa oculta ℎ se puede observar
en la ecuación (15).
ℎ = √𝑚 × 𝑛 (15)
Donde 𝑚 es el número de salidas de la red neuronal y 𝑛 el número de entradas.
Para el caso de dos capas ocultas se tiene que el número de neuronas de la capa uno ℎ1 y de la
capa dos ℎ2 se pueden apreciar en la ecuación (16).
23
ℎ1 = 𝑚(√
𝑛
𝑚
3)2 , ℎ2 = 𝑚 √
𝑛
𝑚
3 (16)
2.7. APRENDIZAJE SUPERVISADO
El aprendizaje supervisado es una formalización de la idea de aprendizaje mediante ejemplos. En
este tipo de aprendizaje el aprendiz, por lo general un programa de computadora, es provisto de
algunos pares de ejemplos entrada-salida aprendiendo una función que mapea o relaciona las
entradas con las salidas, es decir, si se tiene un conjunto de entrenamiento de N pares ordenados
(x1, y1), (x2, y2), … (xN, yN) donde cada 𝑦𝑗 fue generado mediante una función desconocida
𝑦 = 𝑓(𝑥), el aprendiz debe descubrir una función ℎ (función hipótesis) que se aproxime a la
función 𝑓. (función verdadera). (Russell & Norvig, 2016)
Cuando la salida 𝑦 tiene un rango de valores finito el problema de aprendizaje se llama
clasificación, y es llamado clasificación binaria si solo tiene dos posibles valores.
2.8. CLASIFICADOR BINARIO
En teoría de la clasificación binaria, la información se encuentra dividido en dos clases diferentes,
positivos (P) y negativos (N). Un clasificador binario busca agrupar (según su criterio de
clasificación) todas las instancias de la información que le sean presentadas en la clase positivo o
a la clase negativo. A las instancias de información agrupadas como clase positivo se les llama
positivos predichos y las agrupadas como clase negativo se les llama negativos predichos
(Brodersen, Ong, Stephany, & Buhmann, 2010).
El clasificador binario produce cuatro tipos diferentes de resultados a su salida: dos resultados
pertenecientes a una clasificación correcta (verdaderos positivos (TP) y verdaderos negativos
(TN)), y dos resultados pertenecientes a una clasificación incorrecta (falsos positivos (FP) y falsos
negativos (FN)) (Saito & Rehmsmeier, 2015).
En la Figura 11 A el óvalo izquierdo representa la información actual agrupada en las dos clases,
positivo y negativo, el óvalo de la derecha muestra cómo el clasificador binario predice la forma
en que la información se encuentra clasificada en positivo y negativo. La Figura 11 B muestra los
24
cuatro tipos de resultados que salen del clasificador binario, si son positivos o negativos y si están
correctamente clasificados o no (Saito & Rehmsmeier, 2015).
Figura 11. Esquema de un clasificador binario.
2.9. MÉTRICAS
2.9.1. MATRIZ DE CONFUSIÓN
Una matriz de confusión de tamaño 𝑛 × 𝑛 asociada a un clasificador muestra los valores reales vs
los valores predichos donde n es el número de diferentes clases (Visa, Ramsay, Ralescu, & Van
Der Knaap, 2011). En la Tabla 1 se observa una matriz de confusión para un clasificador binario.
Positivos predichos Negativos predichos
Positivos reales TP FN
Negativos reales FP TN
Tabla 1. Matriz de confusión.
En donde TP es el número de predicciones negativas correctas, FP es el número de predicciones
positivas incorrectas, FN es el número predicciones negativas incorrectas y TP el número de
predicciones positivas correctas.
25
A partir de la información suministrada por la matriz de confusión se puede derivar las medidas
básicas de un clasificador binario. Estas medidas se utilizan para conocer el desempeño del
clasificador binario. Las más usadas son la exactitud (ACC), la tasa de error (ERR), la sensibilidad,
exhaustividad o tasa de verdaderos positivos (TPR), la especificidad o razón de verdaderos
negativos (SPC), y la precisión o valor predictivo positivo (PPV).
Otras medidas obtenidas como el coeficiente de correlación de Matthews (MCC) y el valor-F
también son buenos para medir el desempeño del clasificador binario, pero son muy pocos
utilizados. El coeficiente de correlación de Matthews es la media geométrica de los cuatro valores
de la matriz de confusión y el rango de valores va desde -1 hasta +1. Un coeficiente de +1
representa una perfecta predicción por parte del clasificador, un valor de 0 significa que la
predicción no es mejor que el azar y -1 indica total desacuerdo entre la predicción y la observación.
El valor-F es la media armónica del valor de la precisión y la exhaustividad (sensibilidad) y
generalmente viene acompañado de un factor β que depende de si al clasificador se le da más
importancia la precisión o a la exhaustividad. Si β es igual a 1 significa que se le da la misma
importancia a la precisión que la exhaustividad, un valor de β mayor a 1 indica que se le da mayor
importancia a la exhaustividad y un valor de β menor a 1 indica que se le da mayor importancia a
la precisión (He & Garcia, 2009).
En la Tabla 2 se muestra las fórmulas de cada una de las medidas de evaluación del rendimiento
de un clasificador binario.
Medición Fórmula
Exactitud (ACC) 𝐴𝐶𝐶 =
𝑇𝑃 + 𝑇𝑁
𝑇𝑃 + 𝑇𝑁 + 𝐹𝑃 + 𝐹𝑁
Tasa de Error (ERR) 𝐸𝑅𝑅 =
𝐹𝑃 + 𝐹𝑁
𝑇𝑃 + 𝑇𝑁 + 𝐹𝑃 + 𝐹𝑁
Sensibilidad, Exhaustividad o
Tasa de Verdaderos Positivos (TPR)
𝑇𝑃𝑅 =𝑇𝑃
𝑇𝑃 + 𝐹𝑁
Especificidad (SPC) 𝑆𝑃𝐶 =
𝑇𝑁
𝑇𝑁 + 𝐹𝑃
Precisión o valor predictivo positivo
(PPV) 𝑃𝑃𝑉 =
𝑇𝑃
𝑇𝑃 + 𝐹𝑃
26
Tasa de Falsos Positivos (FPR) 𝐹𝑃𝑅 = 1 − 𝑆𝑃𝐶 =
𝐹𝑃
𝑇𝑁 + 𝐹𝑃
Coeficiente correlación de Matthew
(MCC) 𝑀𝐶𝐶 =
(𝑇𝑃 ∗ 𝑇𝑁) − (𝐹𝑃 ∗ 𝐹𝑁)
√(𝑇𝑃 + 𝐹𝑃)(𝑇𝑃 + 𝐹𝑁)(𝑇𝑁 + 𝐹𝑃)(𝑇𝑁 + 𝐹𝑁)
Valor-Fβ 𝐹𝛽 = (1 + 𝛽2)
𝑃𝑃𝑉 ∗ 𝑇𝑃𝑅
β 2𝑃𝑃𝑉 + 𝑇𝑃𝑅
Tabla 2. Medidas de evaluación básica obtenidas a partir de la matriz de confusión
2.9.2. CURVAS ROC
Las curvas ROC o curvas de característica operativa del receptor son gráficas bidimensionales en
las que se representa el valor de la sensibilidad (eje y) contra la tasa de falsos negativos (eje x)
(Fawcett, 2006). La versión más común de las curvas ROC es aquella en la que se grafican dichas
características variando el umbral de discriminación del clasificador (NCSS Statistical Software,
2014). En la Figura 12 se puede observar una curva ROC construida variando el umbral de
clasificación.
Figura 12. Curva ROC tomado de (NCSS Statistical Software, 2014).
Los clasificadores con rendimiento totalmente aleatorio muestran en las curvas ROC una línea
diagonal que se le conoce como línea de no discriminación. Puntos de la curva ROC por encima
de la línea de no discriminación indica que el clasificador en esos puntos realiza una discriminación
mejor que el azar, por el contrario, puntos por debajo de la línea de no discriminación indica que
27
el clasificador en esos puntos realiza una discriminación peor que el azar. Entre más se aproxime
la curva a la esquina superior izquierda de la gráfica, mejor rendimiento tendrá el clasificador.
2.9.2.1. PARÁMETRO DEL ÁREA BAJO LA CURVA AUC.
Las curvas roc permiten evaluar el rendimiento de los clasificadores debido a que pueden ser
reducirlas a un valor escalar único que expresa dicho parámetro. Este valor se obtiene a partir del
cálculo del área bajo la curva y se denomina AUC (Area Under Curve) como se define en (Fawcett,
2006). El AUC es la probabilidad de que un clasificador ordene o clasifique más instancias
positivas que instancias negativas. Un valor de AUC de 0.5 significa que el clasificador es aleatorio
y un valor de 1 indica que es un clasificador perfecto.
2.9.3. CURVAS DE PRECISIÓN Y EXHAUSTIVIDAD
La curva de precisión y exhaustividad es una gráfica en la que se muestran los valores de la
precisión para un correspondiente valor de sensibilidad. Al igual que las curvas ROC, las curvas
de precisión y exhaustividad proveen un modelo de evaluación del rendimiento del clasificador
binario (Saito & Rehmsmeier, 2015).
Figura 13. Curva de precisión y exhaustividad. Tomado de (Saito & Rehmsmeier, 2015).
28
A diferencia de las curvas ROC donde la línea de no discriminación es una diagonal invariante
para cada curva, la línea de no discriminación en las curvas de precisión es una línea horizontal,
ubicado sobre el eje de la precisión, que está determinada por la relación entre los casos positivos
(P) y los casos negativos (N) de los datos a clasificar. El valor donde se ubica la línea de no
discriminación está dado como 𝑃/(𝑃 + 𝑁). Así, para una línea de no discriminación de valor de
0.5 indica una relación P:N de 1:1 lo que significa la cantidad de clases positivos en los datos a
clasificar es la misma que la de las clases negativas, es decir, los datos se encuentran balanceados.
Al igual que las curvas ROC, también se puede hallar el área bajo la curva para las curvas de
precisión y exhaustividad y comúnmente se le conoce como el valor de precisión promedio AP
que se obtiene para todas las variaciones en el valor del umbral de clasificación (Brodersen et al.,
2010). A diferencia de las curva ROC, el valor del área bajo la curva para un clasificador
totalmente aleatorio varía respecto a la relación en la cantidad de clases positivas y clases
negativas, siendo ese valor el mismo valor de la línea de no discriminación (Saito & Rehmsmeier,
2015).
La importancia de las curvas de precisión y exhaustividad radica en su capacidad de mostrar mejor
la información del rendimiento de un clasificador que las curvas ROC cuando los datos que recibe
el clasificador son desbalanceados (se dice que los datos son desbalanceados cuando no existe la
misma proporción de casos positivos que de casos negativos, generalmente ocurre la situación de
que la cantidad de casos positivos es mucho menor que la cantidad de casos negativos). Mientras
que los valores de sensibilidad (TPR), especificidad (SPC), exactitud (ACC) y tasa de error (ERR)
prácticamente permaneces invariables tanto para datos balanceados como desbalanceados del
mismo tamaño, el valor de la precisión (PPV) varía para los dos casos, lo que hace que las curvas
de precisión y exhaustividad compare el rendimiento de varios clasificadores mejor que las curvas
ROC, siempre y cuando los datos ingresados a los clasificadores sean desbalanceados (Saito &
Rehmsmeier, 2015).
2.9.4. ERROR CUADRÁTICO MEDIO
El error cuadrático medio (mse) mide el promedio del error al cuadrado, donde el error es la
diferencia entre el valor verdadero y el valor predicho o estimado. El mse es una medida de la
calidad de un predictor o de un estimador(Lehmann & Casella, 2006). Un error cuadrático medio
29
cercano a cero significa que el valor predicho es muy cercano o casi igual al valor verdadero. Si 𝑌�̂�
es el valor predicho por el predictor, 𝑌𝑖 es el valor verdadero y ambos contiene una cantidad de n
números de muestras, entonces el error cuadrático medio para un predictor se calcula de la
siguiente manera:
𝑚𝑠𝑒 =
1
𝑛∑(𝑌�̂� − 𝑌𝑖)
2𝑛
𝑖=1
(17)
La utilidad del error cuadrático medio consiste en que al elevar el error al cuadrado permite
eliminar signos negativos y también permite dar más peso a los errores grandes. Debido a esto se
utiliza mucho para comparar el funcionamiento de modelos de predictores y estimadores al
permitir observar y escoger el modelo que tenga la recta de mejor ajuste, es decir, el modelo cuyo
valor predicho sea el más cercano a la realidad (Panik, 2005).
2.9.5. FUNCIONES DE SIMILITUD
Las funciones de similitud para un sistema CBIR son una medida de similitud o métrica que
permite comparar imágenes y presentar las respuestas en una lista ordenada (Maldonado, Para,
Vasco, & Gra, 2008).
Generalmente, como las imágenes se encuentran representadas como vectores de características se
utiliza criterios de similitud basados en distancia entre vectores. El valor de distancia es siempre
un valor no negativo, y cuanto mayor sea este valor mayor será la diferencia entre las imágenes
(Universitat de València, 2007).
Entre las métricas de similitud utilizadas se encuentra la distancia euclídea que es una medida de
similitud en el espacio de características (Jain & Vailaya, 1995), la distancia de Manhattan que es
una medida de distancia en geometría no euclideana (Black, 2006), la distancia de Canberra que
es una versión ponderada de la distancia de Manhattan (Jurman, Riccadonna, Visintainer, &
Furlanello, 2009), la distancia de Mahalanobis que es una medida de distancia que tiene en cuenta
la correlación entre las variables aleatorias (Mahalanobis, 1936), y la distancia de Chebyshov.
En la Tabla 3 se muestra las ecuaciones para cada una de las distancias utilizadas para calcular la
similitud de características.
30
Nombre Expresión
Distancia Euclídea 𝑑(𝑣𝑎 , 𝑣𝑏) = √(𝑣𝑎 − 𝑣𝑏)𝑇(𝑣𝑎 − 𝑣𝑏)
Distancia Manhattan 𝑑(𝑣𝑎, 𝑣𝑏) = ∑ |𝑣𝑎(𝑖) − 𝑣𝑏(𝑖)|𝑛
𝑖=1
Distancia Minkowsky 𝑑(𝑣𝑎 , 𝑣𝑏) = (∑ (𝑣𝑎(𝑖) − 𝑣𝑏(𝑖))𝑝
𝑛
𝑖=1)
1𝑝
Distancia Mahalanobis 𝑑(𝑣𝑎 , 𝑣𝑏) = √(𝑣𝑎 − 𝑣𝑏)𝑇Σ−1
(𝑣𝑎 − 𝑣𝑏)
Distancia Canberra 𝑑(𝑣𝑎 , 𝑣𝑏) = ∑
|𝑣𝑎(𝑖) − 𝑣𝑏(𝑖)|
|𝑣𝑎(𝑖)| + |𝑣𝑏(𝑖)|
𝑛
𝑖=1
Distancia Chebyshov 𝑑(𝑣𝑎 , 𝑣𝑏) = 𝑚𝑎𝑥𝑖,𝑗=1𝑛 |𝑣𝑎(𝑖) − 𝑣𝑏(𝑗)|
Tabla 3. Métricas utilizadas para calcular la similitud de características
en sistemas CBIR. Tomada de (Maldonado et al., 2008)
31
3. DISEÑO DE LOS SISTEMAS DE EXTRACCION DE
CARACTERÍSTICAS Y ENTRENAMIENTO DE LOS
MODELOS DE RED NEURONAL FEED-FORWARD
A partir del planteamiento del problema presentado en la sección 1.1 se propone inicialmente la
escogencia de las tecnologías de software libre para el entrenamiento e implementación del
módulo mencionado, procediendo enseguida a la construcción de una base de datos balanceada de
2000 imágenes con 1000 fotografías aéreas tomadas con drones en áreas con predominancia de
vegetación (Rurales) y 1000 imágenes de cualquier tipo excepto las que contengan áreas con
predominancia vegetal. A continuación, se procede a la extracción de características mediante
histogramas, componentes principales y momentos de color, las cuales a su vez son extraídas en
los modelos de color RGB y YUV, además se propone para la clasificación asignar a las imágenes
rurales una etiqueta de 1 y al resto de las imágenes una etiqueta de 0.
A cada una de las imágenes etiquetadas como rurales se les procede a dividirlas en 16 partes iguales
para luego guardar cada fragmento en la base de datos de imágenes, luego se le asigna a cada
fragmento las etiquetas de las coberturas que lleguen a presentar. Finalmente se procede a la
extracción de características de todos los fragmentos y se guarda en la base de datos. Las coberturas
a analizar son árboles, césped, suelo descubierto y cuerpos de agua.
Usando las características extraídas como vector de entrada y las etiquetas asignadas en las
imágenes como vector de salida del clasificador, se procede a realizar el entrenamiento de la red
neuronal mediante el algoritmo backpropagation, utilizando como función objetivo el error
cuadrático medio a la salida de la red neuronal y la sigmoidea como función de activación para
todas las capas. Se realizan 50 entrenamientos por cada método en cada modelo de color. A
continuación, se escoge la red neuronal que presente el mejor parámetro AUC y AP obtenido de
las curvas ROC y las curvas de precisión y exhaustividad, extrayendo sus pesos para ser integrados
dentro del software RITAQDA.
Finalmente se implementa el módulo de carga de imágenes dentro del software RITAQDA
integrando el modelo de red neuronal con mayor desempeño obtenido.
32
3.1. ESCOGENCIA DE TECNOLOGÍAS DE SOFTWARE PARA LA
SIMULACIÓN
Ya que en el entrenamiento de la red neuronal se procesan grandes cantidades de datos y se realizan
grandes operaciones matriciales que consumen mucho tiempo, es necesario utilizar un lenguaje de
alto rendimiento que reduzca ese problema. Para ello nos remitimos al estudio realizado por
(Bezanson, Karpinski, Shah, & Edelman, 2012) el cual realiza una comparación de los principales
lenguajes de programación por medio del testeo de diferentes funciones y el tiempo que demoran
dichas funciones en ejecutarse, como se muestra en la Tabla 4.
Test
(functions) Julia Python MATLAB Octave R JavaScript
fib 1.97 31.47 1336.37 2383.80 225.23 1.55
parse int 1.44 16.50 815.19 6454.50 337.52 2.17
quicksort 1.49 55.84 132.71 3127.50 713.77 4.11
mandel 5.55 31.15 65.44 824.68 156.68 5.67
pi sum 0.74 18.03 1.08 328.33 164.69 0.75
rand mat stat 3.37 39.34 11.64 54.54 22.07 8.12
rand mat mul 1.00 1.18 0.70 1.65 8.64 41.79
Tabla 4. Resultado del microbenchmark en milisegundos. Tomada de (Bezanson et al., 2012)
Se puede apreciar que el lenguaje Julia es el que ofrece las mejores prestaciones en cuanto a
desempeño entre los lenguajes de código abierto, por lo tanto, se escoge esta tecnología para el
entrenamiento de la red neuronal.
En el proceso de extracción de características no es un problema el tiempo empleado debido a que
se dicho proceso se realiza solo una vez y se guarda el resultado en la base de datos. Por lo tanto,
se prefirió utilizar MATLAB para la extracción de características debio a que es un lenguaje que
se maneja a nivel académico.
3.2. CREACION DE LA BASE DE DATOS DE IMÁGENES
Para la construcción de la base de datos se ha subido las imágenes a un repositorio público de datos
en figshare y puede ser consultada en 10.6084/m9.figshare.5677681 (Sanabria & Fonsecca, 2017).
33
Las imágenes han sido descargadas del buscador google, mediante un script de código abierto
escrito en el lenguaje Python (Vasa, Munagala, Tallapally, & Vishal, 2017), el cual es capaz de
descargar una cantidad de 100 imágenes por cada búsqueda realizada. Después de la descarga de
las imágenes se realizó una identificación manual de imágenes relevantes, eliminando inicialmente
las no relevante, luego se procedió a descargar las no relevantes con el mismo procedimiento. Las
etiquetas de salida para la clasificación rural y no-rural se han creado teniendo en cuenta que las
primeras 1000 imágenes son rurales y las siguientes 1000 son no rurales por lo tanto se ha creado
un vector de salidas deseadas cuyos datos se encuentran en el repositorio de figshare. Las imágenes
guardas presentan un redimensionamiento para que quedaran de un tamaño de 512x512, con el fin
de simplificar los cálculos y análisis posteriores. Los vectores de salidas deseadas para la
clasificación rural-no rural pueden ser accedido mediante el siguiente url
10.6084/m9.figshare.5682571 (Sanabria & Fonseca, 2017a)
A partir de las 1000 imágenes rurales se obtuvieron las imágenes a utilizar para el entrenamiento
la clasificación de coberturas. Para eso se utilizó un script en MATLAB para dividir en 16 partes
cada imagen, obteniendo como resultado 16000 imágenes de un tamaño de 128x128 pixeles. Las
etiquetas de salida para la clasificación de coberturas se han realizado de forma manual observando
y marcando si la imagen presenta alguna o varias de las cuatro coberturas que se pretende analizar.
Los vectores de salidas deseadas para la clasificación de coberturas pueden ser accedidos mediante
el siguiente url 10.6084/m9.figshare.7203299 (Sanabria & Fonseca, 2018a)
3.3. OBTENCIÓN DE LAS CARACTERÍSTICAS DE LA IMAGEN DIGITAL
3.3.1. OBTENCIÓN DE LAS MATRICES DE LOS MODELOS DE COLOR
Como se vio en la sección 2.4 una imagen cromática se puede representar mediante un sistema de
tres coordenadas o colores, por lo tanto, una imagen digital se puede descomponer en tres matrices,
cada una representando un color. El código en MATLAB para la obtención de las matrices de
colores en los modelos de color RGB y YUV se encuentran en el Apéndice A.
Un ejemplo de la descomposición RGB se puede observar en la Figura 15 la cual se ha obtenido
a partir de la imagen de prueba mostrada en la Figura 14. Para este ejemplo MATLAB entregó
un arreglo de 403x500x3 donde la posición de la matriz que guarda el color rojo de la imagen es
34
403x500x1, la matriz 403x500x2 guarda el color verde de la imagen y la matriz 403x500x3 guarda
el color azul de la imagen.
Para obtener las matrices YUV es necesario transformar las matrices RGB según lo mostrado en
la ecuación (2). Para mostrar un ejemplo de dicha transformación, se utiliza de nuevo como
ejemplo la imagen de la Figura 14. La imagen de las matrices YUV se muestra en la Figura 16.
Figura 14. Imagen de prueba.
Figura 15. Componentes RGB de la imagen de prueba.
Figura 16 Componentes Y, U y V de la imagen de prueba.
En la Figura 16 se puede apreciar que la componente de luma o Y es la que posee la mayor
cantidad de información de la imagen, siendo que la componente de luma es la misma imagen,
35
pero en blanco y negro. Las componentes U y V no aportan información relevante, solo
pequeños detalles que se pueden pasar por alto.
3.3.2. DISEÑO DE ALGORITMO Y OBTENCIÓN DE LOS HISTOGRAMAS
Como se expuso en la sección 2.5.1 el histograma muestra la frecuencia de los pixeles en una
imagen que se encuentran dentro de un valor de intensidad en la escala de grises que toma valores
discretos desde 0 hasta a 255. En el presente trabajo se ha diseñado un algoritmo que calcula el
histograma para cada una de las 3 bandas de la imagen RGB o YUV, el cual se puede ver a
continuación:
NUMIMG ← numero de imágenes
Para n ← 1 hasta NUMIMG
Entero M ← alto de la imagen(n)
Entero N ← ancho de la imagen(n)
Vector I [1:M,1:N,3] ← leer matrices de imagen(n) //obtenemos las 3 matrices de MxN de la imagen.
Vector H[1:256,3,NUMIMG] ← zeros //inicializamos con zeros los 3 vectores de histogramas
Entero FILAS ← 1
Entero COLUMNAS ← 1
// inicio del algoritmo
Para i ← 1 hasta 3 // matrices de cada imagen
| Para COLUMNAS ← 1 hasta N
| | Para FILAS ← 1 hasta M
| | | NIVEL ← I[ FILAS, COLUMNAS, i ]
| | | H [NIVEL,i,n] ← H [NIVEL, i,n] + 1
| | Fin Para
| Fin Para
Fin Para
Fin Para
GUARDAR(H) // Guardamos los histogramas
El código en MATLAB para obtener los histogramas de las imágenes guardadas en la base de
datos se encuentra en el Apéndice B.
En la Figura 17 se puede observar el histograma para cada uno de los colores primarios RGB de
la imagen de prueba mostrada en la Figura 14.
36
Figura 17. Histograma de los colores RGB de la imagen de prueba.
Como se puede apreciar cada histograma puede ser representado como un vector de 256 elementos,
en el caso del modelo de color RGB son 256 elementos por cada color por lo tanto el histograma
se puede representar como un vector de 768 elementos.
En la Figura 18 se puede apreciar el histograma de la imagen de prueba mostrada en la
Figura 14Figura 14 para cada una de las bandas del modelo de color YUV.
Figura 18. Histograma de los colores YUV de la imagen de prueba.
37
En la presente monografía se han extraído los histogramas RGB y YUV a las 2000 imágenes de la
base de datos mencionada en la sección 3.2. Los datos extraídos para la clasificación rural – no
rural se encuentran en un repositorio que puede ser accedido en la siguientes urls
10.6084/m9.figshare.5682610 (Sanabria & Fonseca, 2017b), 10.6084/m9.figshare.5682721.v1
(Sanabria & Fonseca, 2017d). Los datos extraídos para clasificación de coberturas se pueden
acceder con la siguientes urls 10.6084/m9.figshare.7272665.v1 (Sanabria & Fonseca, 2018c),
10.6084/m9.figshare.7272677.v1 (Sanabria & Fonseca, 2018g).
3.3.3. DISEÑO DE ALGORITMO Y OBTENCIÓN DE LOS MOMENTOS DE COLOR
Como se expuso en la sección 2.5.2 los momentos de color muestran a la imagen digital como una
distribución de probabilidad cuya información se puede representar dentro de sus momentos
estadísticos. A continuación, se muestra el algoritmo diseñado para la obtención de los momentos
de color en los cuales se reduce la información de una imagen a un vector de 9 dimensiones:
NUMIMG ← numero de imágenes
Para n ← 1 hasta NUMIMG
Entero P ← (cantidad de pixeles de la imagen(n) )2
Vector I [1:M,1:N,3] ← leer matrices de imagen(n) //obtenemos las 3 matrices de MxN de la imagen.
Vector MC[1:9,NUMIMG] ← zeros//inicializamos con zeros los 9 momentosdecolor por cada imagen
Vector E[1:3] ← zeros //inicializamos con zeros los la media estadística de cada imagen
Vector D[1:3] ← zeros //inicializamos con zeros los la desviación standar de cada imagen
Vector SK[1:3] ← zeros //inicializamos con zeros los la asimetría de cada imagen
Entero FILAS ← 1
Entero COLUMNAS ← 1
E ← (1/P)*SUMAR( I ) //Caculo de la media aritmética
D[1,1,1] ← RAIZ((1/P)*SUMA( I[:,:,1]) - E[1,1,1])2 )) //Caculo de la desviación estándar para R o Y
D[1,1,2] ← RAIZ((1/P)*SUMA( I[:,:,2]) - E[1,1,2])2 )) //Caculo de la desviación estándar para G o U
D[1,1,3] ← RAIZ((1/P)*SUMA( I[:,:,3]) - E[1,1,3])2 )) //Caculo de la desviación estándar para B o V
SK[1,1,1] ← ((1/P)*SUMA( I[:,:,1]) - E[1,1,1])3 ))1/3 //Caculo de la asimetria para R o Y
SK[1,1,2] ← ((1/P)*SUMA( I[:,:,2]) - E[1,1,2])3 )) 1/3//Caculo de la asimetria para G o U
SK[1,1,3] ← ((1/P)*SUMA( I[:,:,3]) - E[1,1,3])3 )) 1/3//Caculo de la asimetria para B o V
MC[1,n] ← E[1,1,1] // primer momento estadístico o media para la banda R o Y
MC[2,n] ← D[1,1,1] // segundo momento estadístico o desviacion para la banda R o Y
MC[3,n] ← SK[1,1,1] // tercer momento estadístico o asimetría para la banda R o Y
MC[4,n] ← E[1,1,2] // primer momento estadístico o media para la banda G o U
MC[5,n] ← D[1,1,2] // segundo momento estadístico o desviacion para la banda G o U
MC[6,n] ← SK[1,1,2] // tercer momento estadístico o asimetría para la banda G o U
MC[7,n] ← E[1,1,3] // primer momento estadístico o media para la banda B o V
MC[8,n] ← D[1,1,3] // segundo momento estadístico o desviacion para la banda B o V
MC[9,n] ← SK[1,1,3] // tercer momento estadístico o asimetría para la banda B o V
Fin Para
GUARDAR( MC ) // Guardamos los momentos de color de todas las imágenes
38
El código en MATLAB para la obtención de los momentos de color se muestra en el Apéndice C.
En la Tabla 5 y en la Tabla 6 se muestran los valores de los momentos de color obtenidos de la
imagen de prueba mostrada en la Figura 14, para los modelos de color RGB y YUV
respectivamente.
R G B
Primer Momento 96,778548 99,385908 113,400748
Segundo Momento 11,040273 10,928555 11,510941
Tercer Momento 5,039396 5,042363 5,214860
Tabla 5. Valores de los momentos de color en el modelo RGB para la imagen de prueba.
Y U V
Primer Momento 100,207572 110,180032 100,338744
Segundo Momento 10,943944 13,241714 14,329043
Tercer Momento 5,0470025 5,788408 5,901445
Tabla 6. Valores de los momentos de color en el modelo YUV para la imagen de prueba.
En la presente monografía se han extraído los momentos de color RGB y YUV a las 2000 imágenes
de la base de datos mencionada en la sección 3.2. Los datos extraídos para la clasificación rural –
no rural se encuentran siguiendo la siguientes urls 10.6084/m9.figshare.7272563.v1 (Sanabria &
Fonseca, 2018d), 10.6084/m9.figshare.7272482.v1 (Sanabria & Fonseca, 2018h) Los datos
extraídos para clasificación de coberturaas se pueden acceder con la siguientes urls
10.6084/m9.figshare.7272626.v1 (Sanabria & Fonseca, 2018b), 10.6084/m9.figshare.7272647
(Sanabria & Fonseca, 2018f).
3.3.4. DISEÑO DE ALGORITMO Y OBTENCIÓN DE LOS COMPONENTES PRINCIPALES
Como se expuso en la sección 2.5.3, el análisis de componentes principales (PCA) es una técnica
que permite reducir el número de dimensiones de un conjunto de datos. A partir de dicho desarrollo
matemático se ha procedido a deiseñar el algoritmo para extraer dichas caracteristicasel cual se
presenta a continuación:
39
P ← numero de componetes principales
NUMIMG ← numero de imágenes
Para n ← 1 hasta NUMIMG
Vector I [1:M,1:N,3] ← leer matrices de imagen(n) //obtenemos las 3 matrices de MxN de la imagen.
Vector IM[1,3] ← zeros//inicializamos con zeros el valor medio de la imagen
Vector IMC[1:M,1:N,3] ← zeros //inicializamos con zeros la imagen corregida
Vector COV1[1:M,1:N] ← zeros //inicializamos con zeros la covarianza para la banda R oY
Vector COV2[1:M,1:N] ← zeros //inicializamos con zeros la covarianza para la banda G o U
Vector COV3[1:M,1:N] ← zeros //inicializamos con zeros la covarianza para la banda B o V
Vector PCA1[1:M,1:P, NUMIMG] ← zeros //inicializamos con zeros los PCA para la banda R o Y
Vector PCA2[1:M,1:P, NUMIMG] ← zeros //inicializamos con zeros los PCA para la banda G o U
Vector PCA3[1:M,1:P, NUMIMG] ← zeros //inicializamos con zeros los PCA para la banda B o V
IM ← (1/P)*SUMAR( I ) //Caculo de la media de cada banda de la imagen
IMC ← I - IM //restamos a la imagen su valor medio
COV1 ← IMC[:,:,1] * IMC[:,:,1]T //Caculo de la matriz de covarianza para la banda R o Y
COV2 ← IMC[:,:,2] * IMC[:,:,2]T //Caculo de la matriz de covarianza para la banda G o U
COV3 ← IMC[:,:,3] * IMC[:,:,3]T //Caculo de la matriz de covarianza para la banda B o V
V ← EIGEN(COV1) //Caculo de la eigenvectores para la banda R o Y
PCA1[:,:,n] ← V[:,1:P] //Caculo de los PCA para R o Y
V ← EIGEN(COV2) //Caculo de la eigenvectores para la banda G o U
PCA2[:,:,n] ← V[:,1:P] // Caculo de los PCA para G o U
V ← EIGEN(COV3) //Caculo de la eigenvectores para la banda G o U
PCA3[:,:,n] ← V[:,1:P] // Caculo de los PCA para R o Y
Fin Para
GUARDAR( [PCA1 PCA2 PCA3]) // Guardamos los PCA de todas las imágenes
El código en MATLAB para obtener los componentes principales de una imagen digital se
encuentra en el Apéndice D.
Con el fin de observar las diferencias existentes entre una imagen digital reconstruida por medio
de sus componentes principales y la imagen original, se utilizó la imagen de prueba mostrada en
la Figura 14 y se le halló la magnitud del error cuadrático medio obtenido al variar la cantidad de
componentes principales a utilizar para la reconstrucción de la imagen de prueba. Los resultados
se muestran en la Figura 19 para el modelo de color RGB y en la Figura 20 para el modelo de
color YUV. El código en MATLAB para la reconstrucción de una imagen por medio de sus
componentes principales se encuentra en el Apéndice E.
40
Figura 19. Error cuadrático medio para los componentes principales de R, G y B.
Figura 20. Error cuadrático medio para las componentes principales de Y, U y V.
En la Figura 19 se puede observar que el error disminuye rápidamente para los primeros 30
componentes principales para los tres colores RGB. Después de 30 componentes principales el
error empieza a caer lentamente.
41
En la Figura 20 se puede apreciar que con una cantidad de 10 componentes principales en U y en
V el MSE no disminuye significativamente, simultáneamente en la componente Y con 30
componentes principales el MSE no disminuye significativamente.
A partir de la Figura 19 se ha tomado como criterio del codo de las curvas de error cuadrático
medio escogiendo una cantidad de 20 componentes principales por cada banda de color RGB (60
componentes en total), y a partir de la Figura 20 se ha tomado como criterio del codo de las curvas
de error cuadrático medio escogiendo una cantidad de 10 componentes principales para las bandas
U y V y 30 componentes principales para la banda Y (50 componentes en total).
Para cada imagen utilizada en la clasificación rural-no rural, la cantidad de entradas obtenidas es
de 30720 en RGB y 25600 en YUV. Las entradas obtenidas se han subido al repositorio del
proyecto que se encuentra en figshare, pudiendo ser accedidos mediante los siguiente urls
10.6084/m9.figshare.5682658 (Sanabria & Fonseca, 2017c), 10.6084/m9.figshare.5682754
(Sanabria & Fonseca, 2017e).
Para las imágenes utilizadas en la clasificación de coberturas, la cantidad de entradas obtenidas es
de 7680 en RGB y 6400 en YUV. Mediante las siguientes urls de figshare se puede acceder a las
entradas obtenidas, 10.6084/m9.figshare.7272719.v1 (Sanabria & Fonseca, 2018e),
10.6084/m9.figshare.7272833.v1 (Sanabria & Fonseca, 2018i).
En el Apéndice F se puede observar la imagen de prueba reconstruida para distintos números de
componentes principales en el modelo de color RGB y YUV.
3.4. DISEÑO Y ENTRENAMIENTO DE LA RED NEURONAL FEED-
FORWARD
Para la creación de las redes neuronales feed-forward que serán utilizadas como clasificador
binario para las imágenes rurales y no rurales así como la clasificación de las coberturas en las
imágenes rurales se utilizó como base la ecuación (8) en el apartado 2.6. Para la arquitectura de la
red neuronal se utilizó el modelo de back-propagation utilizando la derivada del error para
actualizar los pesos de las neuronas. Para la función de activación se utilizó la función sigmoidal
o logística, utilizando como criterio el estudio realizado por (Llano, Hoyos, Arias, & Velásquez,
2007) en donde se habla de la función logística como la función de activación comúnmente
42
utilizada por su derivada que es fácil de computar. En la Tabla 7 se muestra una de las tablas
comparativas del estudio realizado.
Función
objetivo
Entrenamiento Validación
Mejor Peor Mejor Peor
F1 radbas tansig radbas tansig
F2 logsig tansig logsig tansig
F3 tansig logsig tansig logsig
F4 radbas tansig logsig tansig
F5 radbas tansig logsig radbas
Tabla 7. Análisis comparativo funciones objetivo. Tomado de (Llano et al., 2007)
Para el proceso de entrenamiento de las redes neuronales se utilizó el 70% del total de los datos
guardados en la base de datos de imágenes. Para el proceso de validación se usó el 30 % restante.
3.4.1. DISEÑO E IMPLEMENTACIÓN DEL ALGORIMO DE RED NEURONAL FEED –
FORWARD
Para el diseño de la red neuronal se utilizó el algoritmo back-propagation en su forma matricial
que se trató teóricamente en la sección 2.6. En dicho algoritmo las características de entrada de la
red neuronal son ingresadas mediante una matriz, cuyo número de columnas representa la cantidad
de datos (en nuetro caso imágenes) que calsificará la red neurnal, y cuyo número de filas representa
la longitud del vector de características extraidas a cada dato de entrada.
//parámetros inicicales
Vector X ← leer características de entrada
Vector S ← leer etiquetas de salida
Vector L ← número de neuronas en cada capa
Vector W ← RAND() //inicializamos los pesos con datos aleatorios entre 0 y 1
Vector G ← zeros //inicializamos con zeros la salida de cada capa de neuronas
Vector ER ← zeros //inicializamos con zeros el vector de error
Vector D ← zeros //inicializamos con zeros el vector de deltas
Decimal ETA ← tasa de aprendizaje
Entero ITER ← número de iteraciones
Entero NC ← número de capas
// inicio del algoritmo
Para i ← 1 hasta ITER
| //paso hacia adelante
| Para j ← hasta NC – 1
| | A ← W*G[j]
| | A ← LOGSIG(A) //función de activacion
| | G[j+1] ← [A; 1] //agregamos el bias a la capa j+1
| Fin Para
| //paso hacia atrás
43
| ER ← S – G[NC] //error en la capa de salida
| Para k ← NC – 1 hasta 1
| | D[k] ← ER .* (G[k + 1] .* (1 – G[k + 1])) //Derivada del error en la capa k
| | D[k] ← D[k][1:END-1] //eliminación del bias del delta
| | W[k] ← W[k] + ETA *(D[k]*G[k]) // actualización de los pesos de la capa k
| | ER ← W[k] * D[k]
| FinPara
Fin Para
GUARDAR(W) // Guardamos los pesos de la red neuronal
En el Apéndice G se puede encontrar el diagrama de actividades para el diseño y funcionamiento
de la red neuronal y en el Apéndice H se puede encontrar el código de la red neuronal en Julia.
3.4.2. DISEÑO Y PRUEBA DE LA RED NEURONAL PARA LA CLASIFICACIÓN RURAL – NO
RURAL
3.4.2.1. OBTENCIÓN DE LA TOPOLOGÍA
Para la escogencia de topología de la red neuronal de clasificación de imágenes rurales y no rurales
se utilizó el método de la pirámide geométrica observada en la sección 2.6.2. Se obtuvo dos
topologías, la primera para una red neuronal de una capa oculta y la segunda para una red neuronal
de dos capas ocultas.
Para el diseño de una red neuronal con una capa oculta se aplicó la ecuación (15), los resultados
se muestran en la Tabla 8. Para el diseño de una red neuronal de dos capas ocultas se aplicó la
ecuación (16), los resultados se muestran en la Tabla 9.
Método de obtención de
características
Número de neuronas capa
de Entrada
Número de neuronas
en la capa salida
Número de neuronas
en la capa oculta
Histogramas RGB 1x768 1x1 27
Momentos de color RGB 1x9 1x1 3
PCA RGB 1x30720 1x1 175
Histogramas YUV 1x768 1x1 27
Momentos de color YUV 1x9 1x1 3
PCA YUV 1x25600 1x1 160
Tabla 8. Cantidad de neuronas en la capa oculta para clasificador binario rural-no rural.
44
Método de
obtención de
características
Número de
neuronas capa de
entrada
Número de
neuronas capa de
salida
Número de
neuronas primera
capa oculta
Número neuronas
segunda capa
oculta
Histogramas RGB 1x768 1x1 84 9
Momentos de color
RGB 1x9 1x1 4 2
PCA RGB 1x30720 1x1 981 31
Histogramas YUV 1x768 1x1 84 9
Momentos de color
YUV
1x9 1x1 4 2
PCA YUV 1x25600 1x1 869 30
Tabla 9. Cantidad de neuronas en las dos capas ocultas para clasificador binario rural-no rural.
3.4.2.2. OBTENCIÓN DE LA TASA DE APRENDIZAJE
Para la obtención de la tasa de aprendizaje se realizaron una serie de entrenamientos preliminares
para tener una idea de su comportamiento. Se ha realizado el proceso de entrenamiento cuatro
veces por cada variación de la tasa de aprendizaje, variando el valor entre 0.1 y 0.000001,
obteniendo las curvas de error cuadrático medio y escogiendo el que se ha considerado mejor en
cuanto a velocidad de convergencia de la curva hacia un valor de MSE mínimo sin que ese valor
oscile. Este proceso se realizó tanto para topologías de red de una capa oculta como con dos capas
ocultas, por cada uno de los 3 métodos de entrenamiento.
En la Tabla 10 se presentan las tasas de aprendizaje escogidos por análisis empírico de las curvas
obtenidas. Las curvas de error cuadrático medio obtenidas se pueden observar en el Apéndice I.
Tasa de aprendizaje (eta)
1 capa oculta 2 capas ocultas
Histogramas 0.0065 0.0048
Momentos de color 0.0000063 0.000081
Componentes principales 0.0053 0.00248
Tabla 10. Tasas de aprendizaje escogidas para el entrenamiento de la red neuronal de clasificación rural – no rural.
3.4.2.3. VARIACIÓN DEL NÚMERO DE NEURONAS
Una vez escogidas las topologías y las tasas de aprendizaje, se ha procedido a realizar nuevos
entrenamientos incrementando el número de neuronas en la o las capas ocultas con respecto a su
valor nominal (valor hallado con el método de la pirámide geométrica), con el fin de observar el
impacto que tiene dicha variación en el rendimiento del algoritmo de la red neuronal durante el
45
proceso de entrenamiento y validación además de obtener el método candidato para la solución
del problema propuesto.
Para la red neuronal de una capa oculta se ha realizado el proceso de entrenamiento diez veces por
cada modelo de color y por cada método de obtención de características, incrementando el número
de neuronas en la capa oculta de 10 en 10 hasta un máximo de 30 neuronas por encima de su valor
nominal. La evaluación del desempeño se realiza mediante la obtención del área bajo la curva
(AUC) de las curvas ROC, presentadas en la sección 2.9.2.
En la Tabla 11 se muestra el valor del parámetro AUC de las curvas ROC obtenidas de la red
neuronal de una capa oculta. Las curvas ROC son mostradas en el Apéndice J.
Método Sin variación +10 neuronas +20 neuronas +30 neuronas
Histogramas RGB 0,959384 0,950120 0,952968 0,960944
Momentos de color RGB 0.941738 0.943838 0.957255 0.954166
PCA RGB 0,820992 0,841248 0,821184 0,819232
Histogramas YUV 0,968432 0,969760 0,971200 0,969632
Momentos de color YUV 0.949216 0.951361 0.953327 0.950583
PCA YUV 0,756376 0,786688 0,772656 0,761760
Tabla 11. Valor del parámetro AUC para cada uno de los métodos propuestos al variar el número de neuronas en la
capa oculta.
Para el caso de la red neuronal con dos capas ocultas, primero se incrementó la cantidad de
neuronas en la primera capa oculta, dejando sin cambio la cantidad de neuronas en la segunda capa
oculta y luego se obtuvieron las curvas ROC. Después, se calculó el valor del parámetro AUC,
escogiendo la topología de mayor valor de AUC. A partir de dicha topología, se incrementó la
cantidad de neuronas en la segunda capa oculta, realizando el mismo procedimiento de
comparación de las curvas ROC y cálculo del parámetro AUC.
El valor calculado del parámetro AUC al variar la cantidad de neuronas en la primera capa oculta
para todos los métodos propuestos se muestra Tabla 12. El valor calculado del parámetro AUC al
variar la cantidad de neuronas en la segunda capa oculta para todos los métodos propuestos se
muestra en la Tabla 13. En el Apéndice K se puede observar las curvas ROC para la red neuronal
con dos capas ocultas.
46
Método Sin variación +10 neuronas +20 neuronas +30 neuronas
Histogramas RGB 0,951528 0,959792 0,954232 0,944144
Momentos de color RGB 0.937716 0.946116 0.946088 0.939333
PCA RGB 0,834208 0,847872 0,830936 0,816080
Histogramas YUV 0,969288 0,974464 0,970248 0,972032
Momentos de color YUV 0.944905 0.938388 0.945161 0.941355
PCA YUV 0,776456 0,794976 0,810584 0,788792
Tabla 12. Valor del parámetro AUC para cada uno de los métodos propuestos al variar el número de neuronas en la
primera capa oculta.
Método Sin variación +10 neuronas +20 neuronas +30 neuronas
Histogramas RGB 0,959792 0,950912 0,948272 0,953264
Momentos de color RGB 0.946116 0.953838 0.952938 0.943905
PCA RGB 0,847872 0,833736 0,820752 0,812560
Histogramas YUV 0,974464 0,970072 0,969160 0,965608
Momentos de color YUV 0.945161 0.943777 0.935816 0.946044
PCA YUV 0,810584 0,824552 0,793800 0,791656
Tabla 13. Valor del parámetro AUC para cada uno de los métodos propuestos al variar el número de neuronas en la
segunda capa oculta
3.4.2.4. MÉTODO Y TOPOLOGÍA ESCOGIDOS
A partir de los resultados expuestos en la Tabla 11, la Tabla 12 y la Tabla 13 del apartado 3.4.2.3,
se puede apreciar que el método de los histogramas en el modelo de color RGB y en el modelo de
color YUV son los que ofrecen un mejor parámetro AUC y por ende un mejor rendimiento en
cuanto a clasificación, con el método de histogramas YUV generando un rendimiento ligeramente
superior. También se aprecia que, para ambos casos, al aumentar el número de neuronas y el
número de capas ocultas el AUC presentan una mejoría menor al 1% por lo que, no se justifica
aplicar una segunda capa oculta, ni aumentar el número de neuronas.
Por lo tanto, para el entrenamiento y validación se escogen como características de entrada los
histogramas en el modelo de YUV con la topología de red calculada a partir del método de la
pirámide geométrica para una capa oculta, dato que fue presentado en la Tabla 8.
47
3.4.3. RESULTADOS OBTENIDOS DEL PROCESO DE ENTRENAMIENTO-VALIDACIÓN
PARA LA CLASIFICACIÓN RURAL-NO RURAL.
A partir de la topología y método escogidos se ha procedido al entrenamiento y validación de la
red neuronal. Para dicho proceso se corrió el algoritmo 50 veces durante cien mil iteraciones
usando como datos de entrada los histogramas en modelo de color YUV, procediendo luego a
utilizar los pesos resultantes de cada entrenamiento en el clasificador para aplicarles en ellos el
proceso de validación cruzada, calculando para cada caso la curva ROC y el parámetro AUC con
el fin de comparar sus rendimientos.
En la Tabla 14 se presenta el valor del mayor parámetro AUC obtenido en el proceso de
validación. Se incluye en la tabla el valor de umbral de clasificación para el cual se genera el punto
más alejado en la curva ROC con respecto a la línea de no discriminación.
Tabla 14. Parámetro AUC y mejor umbral obtenidos a partir del proceso de validación cruzada.
En la Tabla 15 se muestra la matriz de confusión obtenida del clasificador, utilizando los datos
de validación, para el umbral de clasificación hallado.
Valor predicho por la red neuronal
Valor real
Tipo de Imagen Rural No Rural
Rural 288 12
No Rural 1 299
Tabla 15. Matriz de confusión en el modelo de color YUV para el clasificador de imágenes rurales y no rurales.
3.4.4. DISEÑO Y PRUEBA DE LA RED NEURONAL DE CLASIFICACIÓN DE COBERTURAS
El diseño de la red neuronal de clasificación de coberturas se ha realizado teniendo en cuenta los
resultados en cuanto a variación de capas obtenidos en el Diseño y prueba de la red neuronal para
la clasificación rural – no rural, puesto que se observó que añadir una nueva capa no aporta mejoría
al resultado de la clasificación por lo tanto se ha decidido entrenar con una capa oculta.
AUC Umbral
Histogramas YUV 0.980655 0,0036
48
3.4.4.1. OBTENCIÓN DE LA TOPOLOGÍA
Aplicando la ecuación (15) del método de la pirámide geométrica, en la Tabla 16 se muestra la
cantidad de neuronas que debe contener la red neuronal de una sola capa oculta para cuatro salidas.
Método de obtención de
características
Numero de neuronas capa
de Entrada
Numero de neuronas
en la capa salida
Numero de neuronas
en la capa oculta
Histogramas RGB 1x768 1x4 55
Momentos de color RGB 1x9 1x4 6
PCA RGB 1x7680 1x4 350
Histogramas YUV 1x768 1x4 55
Momentos de color YUV 1x9 1x4 6
PCA YUV 1x6400 1x4 320
Tabla 16. Cantidad de neuronas en la capa oculta para clasificador multiclase.
3.4.4.2. OBTENCIÓN DE LA TASA DE APRENDIZAJE
La obtención de la tasa de aprendizaje se realizó siguiendo el mismo procedimiento utilizado en
la sección 3.4.2.2 del Diseño y prueba de la red neuronal para la clasificación rural – no rural. En
la Tabla 17 se presentan las tasas de aprendizaje escogidos por análisis empírico de las curvas
obtenidas. Las curvas de error cuadrático medio obtenidas se pueden observar en el Apéndice L.
Tasa de aprendizaje (eta)
1 capa oculta
Histogramas 0.00021
Momentos de color 0.0000065
Componentes principales 0.00032
Tabla 17. Tasas de aprendizaje escogidas para el entrenamiento de la red neuronal de clasificación de coberturas.
3.4.4.3. VARIACIÓN DEL NÚMERO DE NEURONAS
Se utilizó el mismo procedimiento realizado en la sección 3.4.2.3 para la obtención del parámetro
AP de las curvas de precisión y exhaustividad para cada variación en el número de neuronas en la
capa oculta.
Desde la Tabla 18 hasta la Tabla 21 se muestran el valor del parámetro AP de las curvas de
precisión y exhaustividad obtenidas de la red neuronal de una capa oculta para cada clase de
cobertura. Las curvas de precisión y exhaustividad son mostradas en el Apéndice M.
49
Cobertura de árboles
Método Sin variación +10 neuronas +20 neuronas +30 neuronas
Histogramas RGB 0.8215 0.8176 0.8315 0.8230
Momentos de color RGB 0.7619 0.7781 0.7718 0.8021
PCA RGB 0.5627 0.5180 0.5701 0.5719
Histogramas YUV 0.8307 0.8259 0.8250 0.8274
Momentos de color YUV 0.7535 0.7851 0.7824 0.7843
PCA YUV 0.5884 0.5065 0.5085 0.5707
Tabla 18. Valor del parámetro AP para cada uno de los métodos propuestos al variar el número de neuronas en la
capa oculta para la clasificación de cobertura de árboles.
Cobertura de césped
Método Sin variación +10 neuronas +20 neuronas +30 neuronas
Histogramas RGB 0.8083 0.8131 0.8033 0.8081
Momentos de color RGB 0.8287 0.8141 0.7997 0.8324
PCA RGB 0.5578 0.5530 0.5390 0.5500
Histogramas YUV 0.8225 0.8297 0.8380 0.8414
Momentos de color YUV 0.7981 0.8200 0.8243 0.8123
PCA YUV 0.5689 0.5574 0.5604 0.5592
Tabla 19. Valor del parámetro AP para cada uno de los métodos propuestos al variar el número de neuronas en la
capa oculta para la clasificación de cobertura de césped.
Cobertura de suelo descubierto
Método Sin variación +10 neuronas +20 neuronas +30 neuronas
Histogramas RGB 0.3462 0.3493 0.3496 0.3469
Momentos de color RGB 0.2116 0.3678 0.3983 0.3955
PCA RGB 0.1754 0.1734 0.1808 0.1893
Histogramas YUV 0.3865 0.3618 0.3509 0.3538
Momentos de color YUV 0.2917 0.3436 0.3574 0.3697
PCA YUV 0.1885 0.1779 0.1828 0.1870
Tabla 20. Valor del parámetro AP para cada uno de los métodos propuestos al variar el número de neuronas en la
capa oculta para la clasificación de cobertura de suelo descubierto.
50
Cobertura de cuerpos de agua
Método Sin variación +10 neuronas +20 neuronas +30 neuronas
Histogramas RGB 0.2111 0.2417 0.0825 0.2181
Momentos de color RGB 0.1491 0.2369 0.2440 0.2487
PCA RGB 0.1047 0.1100 0.1263 0.1137
Histogramas YUV 0.1745 0.1838 0.1782 0.1881
Momentos de color YUV 0.1291 0.2152 0.2294 0.2285
PCA YUV 0.1021 0.1009 0.1187 0.0979
Tabla 21. Valor del parámetro AP para cada uno de los métodos propuestos al variar el número de neuronas en la
capa oculta para la clasificación de cobertura de cuerpos de agua.
3.4.4.4. MÉTODO Y TOPOLOGÍA ESCOGIDOS
A partir de los resultados expuestos en la Tabla 18, Tabla 19, Tabla 20 y Tabla 21 del apartado
3.4.4.3, se puede apreciar que el método de los momentos de color en modelo RGB ofrecen un
mejor parámetro AP para la clasificación de suelos descubiertos y cuerpos de agua, en cambio,
para coberturas de árboles y césped los histogramas en modelo RGB y YUV muestran mejor
rendimiento. Sin embargo, la diferencia en los parámetros AP de los métodos de histogramas en
modelo RGB y YUV no difieren de más de 3% respecto a los parámetros AP del método de los
momentos de color en modelo RGB.
Observando el rendimiento para las distintas variaciones de neuronas con el método de los
momentos de color en modelo RGB, se muestra que con una variación de 30 neuronas se presenta
un aumento de un poco más de 10% en el valor del parámetro AP con respecto a la no variación
de neuronas en la capa oculta, para la clasificación de coberturas de suelo descubierto y cuerpos
de agua.
Por lo tanto, para el entrenamiento se escogen como características de entrada los momentos de
color en el modelo de color RGB con una adición de 30 neuronas en su capa oculta respecto a su
valor de topología de red calculada a partir del método de la pirámide geométrica.
51
3.4.5. RESULTADOS OBTENIDOS DEL PROCESO DE ENTRENAMIENTO-VALIDACIÓN
PARA LA CLASIFICACIÓN DE COBERTURAS
A partir de la topología y método escogidos se ha procedido al entrenamiento y validación de la
red neuronal. Para dicho proceso se corrió el algoritmo 50 veces durante cien mil iteraciones,
usando como datos de entrada los histogramas en modelo de color YUV, procediendo luego a
utilizar los pesos resultantes de cada entrenamiento en el clasificador para aplicarles en ellos el
proceso de validación cruzada, calculando para cada caso la curva ROC y el parámetro AUC con
el fin de comparar sus rendimientos.
A partir de la topología y método escogidos se ha procedido a realizar el proceso de entrenamiento
y validación de la red neuronal. Para dicho proceso se corrió el algoritmo 50 veces durante
quinientas mil iteraciones, usando como datos de entrada los momentos de color en el modelo de
color RGB, y se escogió el entrenamiento que presentara los mejores parámetros AP en el proceso
de validación en al menos tres de las cuatro coberturas. En la Tabla 22 se presenta el mayor valor
del parámetro AP por cobertura obtenido en el proceso de validación cruzada junto con el umbral
de clasificación donde se obtiene el error total mínimo.
Tabla 22. Parámetro AP y mejor umbral obtenidos a partir del proceso de validación cruzada.
Desde la Tabla 23 hasta la Tabla 26 se muestra las matrices de confusión por cada cobertura
para el umbral de clasificación hallado.
Valor predicho por la red neuronal
Valor real
Tipo de Imagen Rural No Rural
Cobertura 2073 424
Sin cobertura 668 1635
Tabla 23. Matriz de confusión para la clasificación de cobertura de árboles.
AP Umbral
Cobertura de
árboles
0,802468 0,6655
Cobertura de
césped
0,859154 0,3936
Cobertura de
suelo descubierto
0,393193 0,5175
Cobertura de
cuerpos de agua
0,237139 0,4249
52
Valor predicho por la red neuronal
Valor real
Tipo de Imagen Rural No Rural
Cobertura 1941 543
Sin cobertura 649 1667
Tabla 24. Matriz de confusión para la clasificación de cobertura de césped.
Valor predicho por la red neuronal
Valor real
Tipo de Imagen Rural No Rural
Cobertura 103 692
Sin cobertura 74 3931
Tabla 25. Matriz de confusión para la clasificación de cobertura de suelo descubierto.
Valor predicho por la red neuronal
Valor real
Tipo de Imagen Rural No Rural
Cobertura 48 425
Sin cobertura 42 4285
Tabla 26. Matriz de confusión para la clasificación de cobertura de cuerpos de agua.
53
4. DISEÑO Y PRUEBA DEL MÓDULO DE IMÁGENES DE
RITAQDA
En este capítulo se presenta el diseño y puesta a prueba del módulo de imágenes de RITAQDA
según los requerimientos de La Red de Investigaciones de Tecnología Avanzada RITA UD, junto
con la implementación del sistema CBIR en el mismo, según lo planteado en la sección 1.1 del
presente documento.
El software de RITAQDA se encuentra implementado en el framework de Django, que trabaja
utilizando lenguaje Python, y utiliza el gestor de base de datos MySQL para guardar información
correspondiente al proyecto creado, los archivos subidos al proyecto y los códigos, categorías y
citaciones correspondiente al archivo, pudiendo el programa acceder a estos datos y haciendo del
software una herramienta CAQDAS. Por este motivo se requiere para la implementación del
módulo de imágenes crear modelos de tablas de base de datos, donde se guarden los archivos de
las imágenes subidas, así como la información correspondiente a los códigos, categorías y
citaciones realizadas a las imágenes, crear las vistas que permita manejar la información dentro
del programa y crear el entorno gráfico que permita al usuario visualizar esa información. Todo
esto se desarrollará según los requerimientos del software.
Para la implementación del sistema CBIR se escribe los códigos de extracción de características y
las redes neuronales dentro de clases en archivo Python que se puede importar desde el proyecto
principal de RITAQDA para su utilización. Los códigos de los algoritmos de extracción de
características y de las redes neuronales se desarrollarán siguiendo los resultados obtenidos en el
apartado 2.9.5. La red neuronal de clasificación rural-no rural utilizará como datos de entrada los
histogramas YUV de las imágenes, y para la red neuronal de clasificación de coberturas se dividirá
la imagen rural en partes iguales y se utilizará los momentos de color RGB de cada una de esas
partes como los datos de entrada. Se utilizará como pesos para las redes neuronales y como valor
de umbral de clasificación aquellos que generaron los mayores desempeños obtenidos en el
proceso de entrenamiento-validación, mostrados en la sección 3.4.3 y 3.4.5, es decir, aquellos que
generaron el mayor valor en el parámetro AUC y AP. La salida de la red neuronal de clasificación
de coberturas se utilizará como códigos dentro de RITAQDA con el nombre de cada una de las
54
coberturas y las implementará dentro de la imagen según los requerimientos del sistema CBIR
para el software.
Una vez implementado todo el módulo, se suben imágenes a la plataforma y se mira su
funcionamiento. El funcionamiento del software ha de proceder según los requerimientos del
mismo.
4.1. DESCRIPCION Y ESTADO DE DESARROLLO DE RITAQDA
Como se observó en la sección 1.1, la Red de Investigaciones de Tecnología Avanzada RITA UD
se encuentra en proceso de desarrollo de una herramienta CAQDAS de código abierto llamada
RITAQDA basada en el código fuente de una iniciativa de código abierto denominada LibreQDA
(Silva, Freitas, Fulchi, & Muñoz Justicia, 2017), dicha herramienta utiliza una arquitectura cliente
servidor proporcionando al usuario un servicio web y fue realizada mediante el lenguaje de
programación Python que gestiona el servicio a través del framework Django. Dicho framework
está basado en el modelo vista plantilla MTP (por sus siglas en ingles Model View Template). En
la Figura 21 se puede observar una descripción detallada del su funcionamiento.
Figura 21. Modelo vista plantilla del framework Django. Tomado de (Infante Montero, 2012)
RITAQDA es un proyecto en desarrollo que emprendió RITA en el año 2016 al servicio de la
Universidad Distrital Francisco José de Caldas. El desarrollo de este software está contemplado
en 4 fases, en las cuales se implementará la codificación de texto, imagen, audio y video (Rita,
2016).Actualmente el software cuenta con el módulo de gestión de documentos, gestión de
códigos, citaciones, anotaciones, aunque dentro del módulo de documentos solo se pueden crear
citaciones pudiendo agregar códigos y anotaciones a dichas citaciones.
55
El modelo de la base de datos de concerniente a la funcionalidad del software se puede observar
en la Figura 22.
Figura 22. Estado de la base de datos antes del inicio del proyecto. Fuente elaboración propia.
4.2. REQUERIMIENTOS DEL MÓDULO DE IMÁGENES DE RITAQDA
Para el desarrollo del módulo de imágenes se llevó a cabo mediante el grupo de investigación
RITA un análisis de los requerimientos, funcionales y no funcionales que debería tener el mismo,
pactados sobre la base de código ya existente. A continuación, se presentan dichos requerimientos:
4.2.1. REQUERIMIENTOS FUNCIONALES
Con el grupo de investigación RITA se han identificado las siguientes funcionalidades:
56
4.2.1.1. AGREGAR O ELIMINAR IMAGEN A PROYECTO (REQ-01)
Un usuario registrado debe poder agregar una imagen a un proyecto al que pertenezca dicho
usuario. También debe poder eliminar una imagen de un proyecto al que pertenezca dicho usuario.
4.2.1.2. LISTAR IMÁGENES PERTENECIENTES A UN PROYECTO (REQ-02)
El módulo debe listar las imágenes pertenecientes a un proyecto, mostrando en detalle el nombre
de la imagen, el comentario asociado, el tipo de imagen, la fecha en que fue agregada y el usuario
que la subió.
4.2.1.3. SUBIR IMAGEN (REQ-03)
El módulo de imágenes de RitaQDA debe permitir a un usuario registrado, una vez seleccionado
el proyecto, subir una imagen al servidor, especificando un nombre y un comentario para dicha
imagen.
4.2.1.4. VERIFICAR IMAGEN (REQ-04)
En caso de no ser un archivo imagen valida el módulo debe informarlo al usuario y no permitir
que la imagen sea subida al sistema.
4.2.1.5. IDENTIFICAR INFORMACIÓN EN LA IMAGEN (REQ-05)
Una vez subida una imagen el módulo debe identificar si la imagen pertenece a la categoría rural
o no rural, si se encuentra en la categoría rural se deben identificar cuatro características dentro de
la misma como lo son árboles, césped, suelo descubierto y cuerpos de agua.
4.2.1.6. VISUALIZAR IMAGEN (REQ-06)
El módulo debe permitir al usuario visualizar una imagen del proyecto, mostrando también el
nombre de dicha imagen, si la imagen es rural debe hacer una sugerencia de las características
identificadas en la funcionalidad 4.2.1.5 encuadrándolas en una parte de la imagen, y asignándolas
como códigos al proyecto en caso de ser aceptada dicha sugerencia.
4.2.1.7. REALIZAR CITACIONES SOBRE LA IMAGEN (REQ-07)
Una vez visualizada una imagen se debe poder seleccionar una parte rectangular de la imagen y
asignarle una citación.
57
4.2.1.8. ASIGNAR CÓDIGOS A UNA ANOTACIÓN (REQ-08)
Una vez agregada una anotación a una imagen se deben poder asignar los códigos del proyecto a
dicha citación.
4.2.1.9. ASIGNAR CATEGORÍAS A UNA ANOTACIÓN (REQ-09)
Una vez agregada una anotación a una imagen se deben poder asignar las categorías del proyecto
a dicha citación.
4.2.1.10. VER DETALLES DE UNA ANOTACIÓN (REQ-10)
Si se visualiza una imagen con citaciones un usuario al seleccionar una de ellas y visualizar la
información. Mostrando la fecha de creación y modificación, el creador, y el comentario asociado.
Así como también los códigos asignados a la cita.
4.2.2. REQUERIMIENTOS NO FUNCIONALES
A partir del sistema ya implementado se ha procedido a establecer los requerimientos no
funcionales que se listan a continuación.
• El módulo debe ser programado en Python y su framework Django versión 1.4.
• Se debe utilizar el modelo de datos implementado por el framework Django.
• La interfaz gráfica se debe realizar mediante las tecnologías web Html , css y javascript.
• La interfaz gráfica se debe estilizar mediante el framework Boostrap.
• Las anotaciones deben ser compatibles con la librería Jquery.
• Se debe utilizar la base de datos Mysql.
4.3. MODELO DE BASE DE DATOS PARA EL MÓDULO DE IMÁGENES
A partir del modelo de la base de datos inicial observado en la Figura 23 y los requerimientos
funcionales se han identificado las entidades (tablas), y sus respectivos atributos, que serán
añadidas a la base de datos.
58
Figura 23. Entidades que es necesario añadir para implementar el módulo de imágenes de Ritaqda.
4.4. IMPLEMENTACIÓN DEL SISTEMA CBIR
En la Figura 24 se puede apreciar el modelo propuesto para el sistema CBIR implementado en el
módulo de imágenes de Ritaqda, compuesto por el frontend y el backend. El frontend es accesible
mediante cualquier navegador web, y se realizó mediante tecnologías como Html, Css, Javascript,
con sus respectivos frameworks como son Jquery, Boostrap y Annotorious. El backend consta de
una base de datos Mysql y se programó en el lenguaje Python, dentro del cual se utilizó el
framework Django para construir el aplicativo web. En el Apéndice N se puede observar el código
59
de las vistas, las plantillas y los modelos agregados a Ritaqda. Para la implementación del
clasificador basado en redes neuronales se utilizó código Python.
Figura 24. Modelo del sistema CBIR implementado en el módulo de imágenes de Ritaqda.
4.4.1 ALGORITMO DE EXTRACCIÓN DE CARACTERÍSTICAS Y RED NEURONAL
A partir de los pesos obtenidos del entrenamiento realizado en la sección 3.4 se ha procedido a
realizar la programación del módulo de clasificación en el lenguaje de programación Python,
creando dos clases cuyo diagrama podemos apreciar en la Figura 25 y que es utilizada por una de
las vistas del módulo de imágenes.
60
Figura 25. Diagrama de clases de los clasificadores.
En estas clases se encuentran las funciones de extracción de características para cada uno de los
clasificadores, según los análisis realizados en las secciones 3.4.2.4 y 3.4.4.4. La funcion de
extracción de característica del clasificador rural-no rural recibe como entrada la matriz RGB de
la imagen subida al software y realiza el algoritmo de extracción de características de histogramas
descrito en la sección 3.3.2, en modelo de color YUV. La función de extracción de característica
del clasificador de coberturas recibe como entrada la matriz RGB de cada una de las partes de la
imagen luego de dividirla en pedazos de tamaño cercanas o iguales a 128x128 pixeles, y realiza el
algoritmo de extracción de características de momento de color descrito en la sección 3.3.3, en
modelo de color RGB.
Los resultados obtenidos de la extracción de características entran a la función de la red neuronal
de su respectivo clasificador y utilizan el algoritmo descrito en la sección 3.4.1. Si el clasificador
rural-no rural reconoce la imagen como rural habilita el programa para que realice la clasificación
de coberturas, en caso contrario no lo habilita. En ambos casos, la imagen es guardada en la base
de datos y la salida de la red neuronal de clasificación de coberturas para cada una de las partes de
la imagen es indexada y también almacenada. En el Apéndice O se puede observar el código en
Python de las clases.
4.4.2 ALGORITMO DE FUNCIÓN DE SIMILITUD
Para la escogencia de la función de similitud se utilizó como métrica la distancia de Manhattan al
ser esta considerada en la bibliografía como la medida estadística más robusta (Ciocca & Gagliardi,
2000). La fórmula de la distancia de Manhattan se tomó de la Tabla 3 de la sección 2.9.5.
En el algoritmo, la función recibe desde la base de datos la suma normalizada, para cada una de
las 4 salidas de la red neuronal de coberturas, de todos los fragmentos para cada una de las
61
imágenes rurales almacenadas. La suma normalizada de la imagen a la cual se le está buscando
similitud se guarda en un vector A. La suma normalizada para cualquier otra imagen se guarda en
un vector B. Expresándolo en ecuaciones, la forma de obtener el vector para cualquier imagen es
de la siguiente forma:
𝑉𝑒𝑐𝑡𝑜𝑟(𝑎𝑟𝑏𝑜𝑙, 𝑐𝑒𝑠𝑝𝑒𝑑, 𝑠𝑢𝑒𝑙𝑜, 𝑎𝑔𝑢𝑎) =1
𝑛∑ 𝑆𝑐𝑖(𝑎𝑟𝑏𝑜𝑙, 𝑐𝑒𝑝𝑒𝑑, 𝑠𝑢𝑒𝑙𝑜, 𝑎𝑔𝑢𝑎)
𝑛
𝑖=1
Donde Sci es la salida de la red neuronal de coberturas para uno de los fragmentos de la imagen y
n es la cantidad de partes en la que se dividió la imagen rural.
Una vez obtenidos los vectores se realiza la función de Manhattan entre ellos. La distancia obtenida
se compara con un valor umbral. Si la distancia es menor al valor umbral las imágenes son
similares.
El código de la distancia de Manhattan se encuentra implementado dentro del código en la función
similar de la vista del módulo de imágenes (Apéndice N).
4.5. PRUEBA DEL MÓDULO DE IMÁGENES
Para verificar el funcionamiento del módulo de imágenes de RITAQDA y el sistema CBIR
implementado en él se hicieron pruebas con 54 imágenes.
Por medio de la consola de Python se pudo comprobar el funcionamiento de la red neuronal de
clasificación rural-no rural al imprimir un mensaje mostrando si la imagen era rural o no. Por
medio del navegador se comprobó el funcionamiento de la red neuronal de clasificación de
coberturas para la codificación de imágenes rurales ya que solo para ese tipo de imágenes se mostró
una lista de códigos sugeridos con los tipos de coberturas que la red neuronal consideró que
poseían.
En la Figura 26 y Figura 27 se muestran pantallazos del funcionamiento del software para los
casos donde se sube una imagen no rural y una imagen rural respectivamente junto con su
respectivo mensaje de la consola de Python mostrando si es rural o no. Para la imagen rural también
se muestra la lista de códigos sugeridos con sus respectivas coberturas.
62
Figura 26. Resultado del software para una imagen no rural.
Figura 27. Resultado del software para una imagen rural.
63
Al seleccionar mediante el puntero del ratón alguna de las opciones de la lista de códigos sugeridos
y al hacer click en ellos, se muestra que efectivamente el programa encuadra la zona de la imagen
donde la red neuronal piense que se encuentre dicha cobertura y agrega una etiqueta de código con
la misma. En la Figura 28, Figura 29 y Figura 30 se muestran algunos de estos ejemplos.
Figura 28. Resultado de software respecto al etiquetado de coberturas en imágenes rurales.
Figura 29. Resultado de software respecto al etiquetado de coberturas en imágenes rurales.
64
Figura 30. Resultado del software respecto al etiquetado de coberturas en imágenes rurales.
Figura 31. Resultado del software respecto al etiquetado de coberturas en imágenes rurales
Para la prueba del sistema de búsqueda de imágenes similares se escogieron 4 de las 54 imágenes
subidas, cada una con un tipo de cobertura dominante. Se varió el umbral de comparación entre
valores de 0.1 a 1.5 en pasos de una décima para observar la relación entre las imágenes
recuperadas por el sistema y las imágenes relevantes. En la Tabla 27, Tabla 28, Tabla 29 y Tabla
30 se muestran la cantidad de imágenes recuperadas, la cantidad de imágenes relevantes, la
precisión y la exhaustividad por cada valor umbral para cada imagen de prueba.
65
Umbral Imágenes
recuperadas
Imágenes
relevantes
Precisión Exhaustividad
0 0 0 - 0
0.1 0 0 - 0
0.2 3 2 0,66666667 0,25
0.3 14 4 0,28571429 0,5
0.4 26 6 0,23076923 0,75
0.5 34 8 0,23529412 1
0.6 40 8 0,2 1
0.7 44 8 0,18181818 1
0.8 44 8 0,18181818 1
0.9 46 8 0,17391304 1
1 46 8 0,17391304 1
Tabla 27. Cantidad de imágenes recuperadas e imágenes relevantes
al variar el umbral de comparación para la imagen de prueba 1.
Umbral Imágenes
recuperadas
Imágenes
relevantes
Precisión Exhaustividad
0.1 0 0 - 0
0.2 0 0 - 0
0.3 1 1 1 0,1
0.4 1 1 1 0,1
0.5 5 3 0,6 0,3
0.6 7 4 0,57142857 0,4
0.7 8 5 0,625 0,5
0.8 11 5 0,45454545 0,5
0.9 13 6 0,46153846 0,6
1 24 10 0,41666667 1
1.1 30 10 0,33333333 1
1.2 40 10 0,25 1
1.3 44 10 0,22727273 1
1.4 45 10 0,22222222 1
1.5 46 10 0,2173913 1
Tabla 28. Cantidad de imágenes recuperadas e imágenes relevantes
al variar el umbral de comparación para la imagen de prueba 2.
66
Umbral Imágenes
recuperadas
Imágenes
relevantes
Precisión Exhaustividad
0 0 0 - 0
0.1 0 0 - 0
0.2 1 1 1 0,125
0.3 3 3 1 0,375
0.4 9 4 0,44444444 0,5
0.5 15 6 0,4 0,75
0.6 31 7 0,22580645 0,875
0.7 39 8 0,20512821 1
0.8 44 8 0,18181818 1
0.9 46 8 0,17391304 1
Tabla 29. Cantidad de imágenes recuperadas e imágenes relevantes
al variar el umbral de comparación para la imagen de prueba 3.
Umbral Imágenes
recuperadas
Imágenes
relevantes
Precisión Exhaustividad
0 0 0 - 0
0.1 1 1 1 0,06666667
0.2 3 2 0,66666667 0,13333333
0.3 9 7 0,77777778 0,46666667
0.4 15 10 0,66666667 0,66666667
0.5 31 13 0,41935484 0,86666667
0.6 32 13 0,40625 0,86666667
0.7 36 14 0,38888889 0,93333333
0.8 43 14 0,3255814 0,93333333
0.9 45 15 0,33333333 1
1 46 15 0,32608696 1
Tabla 30. Cantidad de imágenes recuperadas e imágenes relevantes
al variar el umbral de comparación para la imagen de prueba 4.
En la Figura 32, Figura 34, Figura 36 y Figura 38 se muestra las imágenes utilizadas para hacer
las pruebas y en la Figura 33, Figura 35, Figura 37 y Figura 39 se muestran los resultados de la
búsqueda de similitud realizada por el sistema para un valor de umbral de comparación de 0.35,
para cada una de las respectivas imágenes de prueba.
67
Figura 32. Imagen de prueba 1 con cobertura de árboles.
Figura 33. Resultado del software respecto a la búsqueda de imágenes similares con coberturas de árboles.
68
Figura 34. Imagen de prueba 2 con cobertura de cesped.
Figura 35. Resultado del software respecto a la búsqueda de imágenes similares con coberturas de cesped.
69
Figura 36. Imagen de prueba 3 con cobertura de suelo descubierto.
Figura 37. Resultado del software respecto a la búsqueda de imágenes similares con coberturas de suelo
descubierto.
70
Figura 38. Imagen de prueba 4 con cobertura de cuerpos de agua.
Figura 39. Resultado del software respecto a la búsqueda de imágenes similares con coberturas de cuerpos de agua.
71
5. ANÁLISIS DE RESULTADOS
En este capítulo se analizan los resultados obtenidos en los procesos de validación para la red
neuronal de clasificación de imágenes rurales y no rurales y para la red neuronal de clasificación
de coberturas en imágenes rurales. A su vez, estos análisis resultan transcendentes a la hora de
explicar los resultados mostrados de las pruebas realizadas al software de RITAQDA con el
sistema CBIR.
5.1. ANÁLISIS DE LAS REDES NEURONALES FEED-FORWARD
5.1.1. ANÁLISIS DE LA RED NEURONAL DE CLASIFICACIÓN RURAL-NO RURAL
A partir de los resultados mostrados en la Tabla 14 y en la Tabla 15 de la sección 3.4.3 y de las
ecuaciones mostradas en la Tabla 2 se observa que, para el valor de umbral de clasificación de
0.0036, la tasa de error del clasificador rural-no rural es de 2.4% y la exactitud es del 97.6%,
implicando que el clasificador predice con buen grado de acierto las instancias rurales y no rurales.
Al calcular la sensibilidad del sistema obtenemos una tasa del 96% y al calcular la especificidad
del sistema obtenemos una tasa del 99.6%. Esto último da a entender que la red neuronal tiende a
clasificar más correctamente las imágenes no rurales que las imágenes rurales.
Finalmente, en la Figura 40 se muestra la curva ROC del clasificador obtenida en el proceso de
validación. En ella se puede observar que la curva se acerca a la forma ideal dibujada para un
clasificador perfecto. Si analizamos el valor del parámetro AUC, el cual es de 0.980655,
efectivamente se observa que el valor es muy cercano a 1 que es el valor ideal de un clasificador
perfecto.
72
Figura 40. Curva ROC de la red neuronal de clasificación rural-no rural aplicada al software de RITAQDA.
5.1.2. ANÁLISIS DE LA RED NEURONAL DE CLASIFICACIÓN DE COBERTURAS
A partir de los resultados mostrados en la Tabla 22, Tabla 23, Tabla 24, Tabla 25 y Tabla 26 de
la sección 3.4.5 y de las ecuaciones mostradas en la Tabla 2 hallamos los valores de la tasa de
error, exactitud, sensibilidad y precisión para el valor de umbral de clasificación específico de cada
cobertura. A continuación, se enlistan en una tabla los valores obtenidos.
Tasa de error (%) Exactitud (%) Sensibilidad (%) Precisión (%)
Cobertura de
árboles
22.75 77.25 83.01 75.63
Cobertura de
césped
24.83 75.16 78.14 74.94
Cobertura de suelo
descubierto
15.95 84.04 12.95 58.19
Cobertura de
cuerpos de agua
9.73 90.27 10.14 53.33
Tabla 31. Parámetros de clasificación obtenidos de la red neuronal de coberturas.
A partir de la Tabla 31 se observa que el clasificador de coberturas genera tasas de error
medianamente bajo y con valores por debajo del 25% para todas las coberturas. A su vez, los
valores de exactitud para cada cobertura se pueden considerar altos al estar todos por encima del
75%.
73
Analizando los datos del clasificador para la cobertura de árboles y para la cobertura de césped se
puede notar que poseen valores similares en la sensibilidad y en la precisión. Estos valores, que
están aproximadamente entre un 80% para sensibilidad y un 75% para precisión, nos están
indicando, respectivamente, que la red neuronal está clasificando correctamente cada 4 de 5
instancias positivas y que además la proporción de instancias positivas predichas que son correctas,
es 3 de cada 4.
Al observar las curvas de precisión y exhaustividad de las coberturas de árboles y césped mostradas
en la Figura 41 y Figura 42 se puede notar que la posición de la línea de discriminación en ambos
casos está ligeramente por encima del 50% lo cual implica que el conjunto de datos con el cual se
validó la red neuronal es prácticamente balanceado. Al hallar los valores de especificidad
obtenemos valores de 70.99% para cobertura de árboles y 71.97% para cobertura de césped. Al
comparar dichos valores con los de sensibilidad se observa que la red neuronal clasifica
correctamente, en mayor medida las instancias positivas que las instancias negativas.
Figura 41. Curva de precisión y exhaustividad de la red neuronal de clasificación de coberturas para la clasificación
de árboles.
74
Figura 42. Curva de precisión y exhaustividad de la red neuronal de clasificación de coberturas para la clasificación
de césped.
Analizando los datos del clasificador para la cobertura de suelo descubierto y cuerpos de agua se
observa que, a diferencia de las coberturas de árboles y césped, estos poseen bajos valores de
sensibilidad que rondan alrededor del 10%, y poseen valores de precisión que rondan alrededor
del 50% para la cobertura de suelo descubierto y 60% para la cobertura de cuerpos de agua. Esto
implica que solo 1 de cada 10 instancias positivas son clasificadas correctamente, y que la mitad
de las predicciones de las instancias positivas son correctas.
Al observar las curvas de precisión y exhaustividad para las coberturas de suelo descubierto y
cuerpos de agua mostradas en la Figura 43 y Figura 44 puede notarse que las posiciones de la
líneas de discriminación se encuentran muy por debajo del 50%, lo que indica que el conjunto de
datos con el cual se validó la red neuronal no es balanceado con una mayor cantidad de instancias
negativas que positivas. Al hallar la especificidad obtenemos un valor de 98.15% para cobertura
de suelo descubierto y 99.02% para cobertura de cuerpos de agua. Al comparar dichos valores con
los de sensibilidad se observa que la red neuronal tiende a clasificar perfectamente las instancias
negativas, pero presenta una proporción de clasificación baja de instancias positivas.
75
Figura 43. Curva de precisión y exhaustividad de la red neuronal para la clasificación de suelo descubierto.
Figura 44. Curva de precisión y exhaustividad de la red neuronal para la clasificación de cuerpos de agua.
76
5.2. ANÁLISIS AL MÓDULO DE IMÁGENES DEL SOFTWARE RITAQDA
5.2.1. CUMPLIMIENTO DE REQUERIMIENTOS
A partir de los requerimientos funcionales para el módulo de imágenes se presenta en la Tabla 32
la confirmación de lo que se cumplió al implementar el módulo de imágenes de RitaQDA.
Código de
requerimiento Descripción ¿Se Cumplió?
REQ-01 Agregar o eliminar imagen de proyecto. Si
REQ-02 Listar imágenes pertenecientes a un proyecto. Si
REQ-03 Subir imagen. Si
REQ-04 Verificar imagen. Si
REQ-05 Identificar información en la imagen. Si
REQ-06 Visualizar imagen. Si
REQ-07 Realizar citaciones sobre imagen. Si
REQ-08 Asignar códigos a una anotación. Si
REQ-09 Asignar categorías a una anotación. No
REQ-10 Ver detalles de una anotación. Si
Tabla 32. Lista de requerimientos cumplidos en el desarrollo del software de RITAQDA.
Cabe resaltar que no fue posible el cumplimiento del requerimiento REQ-09 debido a que dentro
del software no estaban implementada la vista de categorías y al ser inexistente no podíamos
relacionarla dentro del módulo.
5.2.2. ANÁLISIS AL SISTEMA CBIR
En base a las pruebas realizadas en la sección 4.5 y al análisis realizado a las redes neuronales en
la sección 5.1 se analiza el sistema de codificación y etiquetamiento de coberturas en las
imágenes rurales y el sistema de búsqueda de imágenes similares.
5.2.2.1 SISTEMA DE CODIFICACIÓN Y ETIQUETAMIENTO
Debido a que el clasificador de las coberturas no es perfecto se generaron errores de clasificación.
Como la salida del clasificador está conectada con la codificación y etiquetado de coberturas en el
software, estos errores se pueden visualizar. Los errores que han sido visualizados en la
codificación y etiquetado son los siguientes:
77
1. Exclusión de cobertura: No se visualiza dentro de la lista de sugerencia de códigos alguna
cobertura a pesar de existir dicha cobertura en la imagen. Analizando, el error sucede
debido a que el valor de la sensibilidad para cada cobertura no es del 100%. Se ha
observado la cobertura que ha sido más afectada por este error ha sido la cobertura de
cuerpos de agua, la cual es la que posee el menor valor de sensibilidad.
2. Inclusión de cobertura: Se visualiza dentro de la lista de sugerencia de códigos alguna
cobertura que no existe en la imagen. Se ha observado que las coberturas que han sido más
afectadas por este error han sido la cobertura de árboles y la cobertura de césped. Esto
último sucede debido a que el valor de la especificidad no es cercano al 100% como sucede
con los casos de las coberturas de suelo descubierto y cuerpos de agua y por lo tanto existe
una cantidad considerable de falsos positivos.
3. Etiquetado de cobertura extra: Se coloca etiqueta de cobertura en zona de la imagen donde
no existe esa cobertura. El error sucede debido a un valor alto en la sensibilidad y un valor
pequeño en la precisión.
4. Etiquetado de cobertura no incluida: No se coloca etiqueta de cobertura en una zona de la
imagen a pesar de que sí existe esa cobertura en esa zona. El error sucede cuando el valor
de la especificidad es alto y el valor de la sensibilidad es pequeña.
5.2.2.2 SISTEMA DE BÚSQUEDA DE IMÁGENES SIMILARES
Además de errores debido al clasificador, se pudo observar el efecto del umbral de comparación
al momento de mostrar imágenes similares. A partir de los resultados mostrados en la Tabla 27,
Tabla 28, Tabla 29 y Tabla 30 se obtuvieron las curvas de precisión y exhaustividad del sistema
de búsqueda realizadas a las imágenes de prueba mostradas en la Figura 32, Figura 34, Figura
36 y Figura 38. Las curvas de precisión y exhaustividad se muestran en la Figura 45, Figura 46,
Figura 47 y Figura 48, junto con ellas las curvas aproximadas con métodos de regresión.
A partir de las curvas se observa que a medida que aumenta la precisión decrece la exhaustividad
lo que implica que, a medida que disminuimos el umbral de comparación la cantidad de imágenes
recuperadas por el sistema será menor pero la mayoría de las imágenes recuperadas serán
relevantes. Debido a que nuestro sistema creado es un sistema de sugerencia, se ha decidido
priorizar más la precisión del sistema que su exhaustividad. Se ha escogido para el sistemaun valor
umbral que genere una precisión del 60%.
78
Figura 45. Curva de precisión y exhaustividad para el sistema de búsqueda de la imagen de prueba 1.
Figura 46. Curva de precisión y exhaustividad para el sistema de búsqueda de la imagen de prueba 2.
79
Figura 47. Curva de precisión y exhaustividad para el sistema de búsqueda de la imagen de prueba 3.
Figura 48. Curva de precisión y exhaustividad para el sistema de búsqueda de la imagen de prueba 4.
80
CONCLUSIONES
En el presente proyecto construyó un módulo, para la organización y análisis de imágenes
aplicando la metodología QDA, implementado en el software Ritaqda. Además, se ha provisto a
dicho módulo de características como el etiquetado automático de códigos y la sugerencia de
imágenes similares para imágenes rurales, mediante la implementación de un sistema CBIR basado
en redes neuronales Feed-forward.
Durante el proceso se utilizaron técnicas de extracción de características en imágenes utilizadas en
la bibliografía de referencia como lo fueron los histogramas, los momentos de color y la extracción
de los componentes principales de la imagen, proceso realizado en dos modelos de color, también
presentes en la bibliografía, como lo fueron el YUV y el RGB.
A partir de las características extraídas se realizó el proceso de entrenamiento de los modelos de
red neuronal que por un lado clasifican imágenes rurales vs no rurales, y por el otro clasifican
cuatro coberturas dentro de las imágenes rurales. Los resultados obtenidos demostraron que (de
los modelos utilizados en la presente monografía) el modelo de red neuronal con mejor desempeño
en la clasificación de imágenes rurales-no rurales, fue aquel cuya topología constaba de una capa
oculta sin variar el número de neuronas calculado mediante el método de la pirámide geométrica,
y en el que se utilizaron como características de entrada los histogramas en el modelo de color
YUV. Así mismo también se demostró a partir de los resultados obtenidos que (de los modelos
utilizados en la presente monografía) el modelo de red neuronal con mejor desempeño para la
clasificación de coberturas en imágenes rurales, fue aquel cuya topología constaba de una capa
oculta aumentándole 30 neuronas al valor calculado mediante el método de la pirámide geométrica
y utilizando como características de entrada los momentos de color en el modelo RGB. Durante
esta fase se logró evidenciar que, los clasificadores obtenidos con datos balanceados tuvieron un
rendimiento cercano al ideal, mientras que, con datos desbalanceados los clasificadores tienden a
sesgar los resultados hacia la instancia con mayor cantidad de datos. Esto se observó para las redes
neuronales de clasificación de coberturas de suelo descubierto y cuerpos de agua las cuales
clasificaban mejor las instancias negativas, clasificando las instancias positivas en una menor
medida.
81
Para la búsqueda de imágenes similares se logró observar que para imágenes que presenten
diferentes coberturas el umbral de comparación con cual se discrimina imágenes relevantes de las
no relevantes es diferente. Así, para discriminar mejor las imágenes es mejor tener un valor umbral
específico por cada cobertura clasificada.
A partir de los clasificadores basados en redes neuronales se procedió a desarrollar el sistema
CBIR y el módulo de imágenes para el software RitaQDA, mediante el lenguaje de programación
Python y su framework Django conectado a la base de datos MySql, como backend, y tecnologías
de la web como Html, Css y Javascript en la parte del frontend. Finalmente, todo este proceso
culmino exitosamente con la integración del módulo desarrollado en la presente monografía dentro
de la plataforma RitaQDA.
82
TABAJO FUTURO
Durante la realización de este proyecto surgieron algunas inquietudes, que consideramos pueden
ser de interés para la comunidad académica y que pueden desembocar en el mejoramiento de los
resultados aquí obtenidos. Dichas inquietudes se encuentran relacionadas con la identificación de
clases en imágenes y se enuncian a continuación:
• Utilización de otros modelos de color como el HSV o el Rg chromaticity que también son
usados en aplicaciones de visión artificial.
• En la presente monografía se entrenó una red neuronal muticlase para la clasificación de
cuatro coberturas, se plantea el entrenamiento de cuatro redes neuronales por separado para
comparar su rendimiento.
• Utilización de algoritmos no supervisados como redes autoorganizadas de kohonen y otros
algoritmos más modernos como las redes neuronales convolucionales.
• Utilización de bibliotecas de visión artificial como opencv y luminot las cuales poseen
técnicas avanzadas en visión por computadora.
83
REFERENCIAS
Afifi, A. J. (2011). Image Retrieval Based on Content Using Color Feature By.
Alarcón Venegas, J., Quijada Carrasco, J., & Ponce Pérez, A. (2012). Breve historia de la investigación
cualitativa. Retrieved from http://licentiare.blogspot.com.co/2012/11/breve-historia-de-la-
investigacion.html
Arango, M., Branch, J., & Botero, V. (2005). Clasificación no supervisada de coberturas vegetales sobre
imágenes digitales de sensores remotos: “LANDSAT– ETM+.” Facultad Nacional de Agricultura
Medellín, 58(1), 2611–2634.
Aristizábal Ramírez, D. L., & Ramírez Martínez, C. A. (2006). Conceptos Básicos del Procesamiento
Digital de Imágenes Usando OrquideaJAI. Retrieved from https://goo.gl/BgbVmr
Atlas.ti. (2014). Atlas.ti El conjunto de herramientas del conocimiento. Retrieved from
http://atlasti.com/wp-content/uploads/2014/07/atlas.ti6_brochure_2009_es.pdf
Bach, J. R., Fuller, C., Gupta, A., Hampapur, A., Horowitz, B., Humphrey, R., … Shu, C.-F. (1996).
Virage Image Search Engine: An Open Framework for Image Management. In I. K. Sethi & R. C.
Jain (Eds.), Storage and Retrieval for Image and Video Databases (SPIE) (Vol. 2670, pp. 76–87).
SPIE. Retrieved from http://dblp.uni-trier.de/db/conf/spieSR/spieSR96.html#BachFGHHHJS96
Bayona, G. A. T., & Salcedo, I. A. L. (2012). Evaluación de las Redes Neuronales Artificiales Perceptron
Multicapa y Fuzzy-Artmap en la Clasificación de Imágenes Satelitales. Ingeniería, 17(1), 61–72.
Retrieved from http://revistas.udistrital.edu.co/ojs/index.php/reving/article/view/3849
Bezanson, J., Karpinski, S., Shah, V. B., & Edelman, A. (2012). Julia: A Fast Dynamic Language for
Technical Computing, 1–27. https://doi.org/10.1109/APS.2015.7305314
Black, P. E. (2006). Manhattan distance. Retrieved from
https://xlinux.nist.gov/dads/HTML/manhattanDistance.html
Bratkova, M., Boulos, S., & Shirley, P. (n.d.). oRGB : A Practical Opponent Color Space for Computer
Graphics.
Brodersen, K. H., Ong, C. S., Stephany, K. E., & Buhmann, J. M. (2010). The binormal assumption on
precision-recall curves. Proceedings - International Conference on Pattern Recognition, (Section
IV), 4263–4266. https://doi.org/10.1109/ICPR.2010.1036
Castrillon, W. A., Alvarez, D. A., & López, A. F. (2008). Técnicas de extracción de características en
imágenes para el reconocimiento de expresiones faciales. Scientia et Technica, (38), 7–12.
https://doi.org/10.22517/23447214.3681
Castro, D. A. (2009). Recuperación de imágenes basada en texto y contenido visual mediante redes
neuronales. Tesis Licenciatura.
Choras, R. S. (2007). Image feature extraction techniques and their applications for CBIR and biometrics
systems. International Journal of Biology and Biomedical Engineering, 1(1), 6–16. Retrieved from
http://www.naun.org/journals/bio/bio-2.pdf
Ciocca, G., & Gagliardi, I. (2000). Quicklook_ An integrated multimedia system.pdf.
Córdoba, E., Puentes, M., & Otero, L. (2006). Análisis de imágenes Landsat-7 ETM+ para determinar la
cobertura del suelo de la zona costera de la bahía de Tumaco. Boletín Científico CCCP, (13), 41–52.
84
Erande, V. Y., & Badadapure, P. P. R. (2013). Content Based Image Retrieval using Neural Network,
4(8), 571–575.
Espín, T. (2015). COMPARACIÓN DE MÉTODOS DE CLASIFICACIÓN DE IMÁGENES DE
SATÉLITE EN LA CUENCA DEL RÍO ARGOS (REGIÓN DE MURCIA), 327–348.
Fawcett, T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8), 861–874.
https://doi.org/10.1016/j.patrec.2005.10.010
Fernández Núñez, L. (2006). Fichas para investigadores ¿Cómo analizar datos cualitativos? Bulletí
LaRecerca, 1–13. https://doi.org/ISSN: 1886-1946 / Depósito legal: B.20973-2006
Flickner, M., Sawhney, H., Niblack, W., Ashley, J., Huang, Q., Dom, B., … Yanker, P. (1995). The
QBIC System, (September).
Ford, A., & Roberts, A. (1998). Colour Space Conversions (Vol. 1).
Giraldo, L. F., & Barrero, J. P. (2012). Implementación de una red neuronal para clasificación de
coberturas terrestres en imágenes MODIS, 1–113.
Gonzalez, J. (2016). Redes neuronales feed forward.
Google. (2010). Rastreo e indexación. Retrieved from
https://www.google.com/intl/es/insidesearch/howsearchworks/crawling-indexing.html
Grubinger, M. (2007). Analysis and Evaluation of Visual Information Systems Performance, (April).
He, H., & Garcia, E. A. (2009). Learning from imbalanced data. IEEE Transactions on Knowledge and
Data Engineering, 21(9), 1263–1284. https://doi.org/10.1109/TKDE.2008.239
Hernandez Sampieri, R., Fernandez Collado, C., & Baptista Lucio, M. del P. (2010a). Metodología de la
investigación. Metodología de la investigación. https://doi.org/- ISBN 978-92-75-32913-9
Hernandez Sampieri, R., Fernandez Collado, C., & Baptista Lucio, M. del P. (2010b). Metodología de la
investigación. Metodología de la investigación. https://doi.org/- ISBN 978-92-75-32913-9
Huber, G. L., & Gürtler, L. (2013). AQUAD 7 - MANUAL DEL PROGRAMA PARA ANALIZAR
DATOS CUALITATIVOS.
Infante Montero, S. (2012). Entendiendo como trabaja Django. Retrieved from
http://www.maestrosdelweb.com/curso-django-entendiendo-como-trabaja-django/
Jack, K. (2008). Digital video and DSP: instant access (1st ed.). Newnes.
Jack, K. (2009). Colour spaces. In Communications engineering desk reference (pp. 469–471).
Jain, A. K., & Vailaya, A. (1995). Image Retrieval using Color and Shape 1 Introduction.
Jayaraman, S., Esakkirajan, S., & Veerakumar, T. (2011). Digital Image Processing. McGraw-Hill.
Jurman, G., Riccadonna, S., Visintainer, R., & Furlanello, C. (2009). Canberra distance on ranked lists.
ResearchGate, 2–7.
Karamti, H., Tmar, M., & Gargouri, F. (2014). Content-based image retrieval system using neural
network. 2014 IEEE/ACS 11th International Conference on Computer Systems and Applications
(AICCSA), 14(6), 723–728. https://doi.org/10.1109/AICCSA.2014.7073271
Kato, T. (1992). Database architecture for content-based image retrieval. Proceedings of SPIE Conference
85
on Image Storage and Retrieval Systems, 1662(March), 112–123. https://doi.org/10.1117/12.58497
Kumar, K. K., & Gopal, T. V. (2010). CBIR : Content Based Image Retrieval. National Conference on
Recent Trends in information/Network Security, 36–43.
La Serna Palomino, N., Contreras, W., & Ruiz, M. E. (2010a). Procesamiento Digital de textura :
Técnicas utilizadas en aplicaciones actuales de CBIR. Revista de Investigación de Sistemas E
Informática, 7(1), 57–64. Retrieved from
http://sisbib.unmsm.edu.pe/bibvirtual/publicaciones/risi/2010_n1/v7n1/a06v7n1.pdf
La Serna Palomino, N., Contreras, W., & Ruiz, M. E. (2010b). Procesamiento Digital de textura :
Técnicas utilizadas en aplicaciones actuales de CBIR. Revista de Investigación de Sistemas E
Informática, 7(1), 57–64.
Lehmann, E. L., & Casella, G. (2006). Theory of point estimation. Springer Science & Business Media.
Lizarazo, I. (2008). Clasificación de la cobertura y del uso del suelo urbano usando imágenes de satélite y
algoritmos supervisados de Inteligencia Artificial. Revista UD Y La GEOMÁTICA, 1(2), 4–18.
Llano, L., Hoyos, A., Arias, F., & Velásquez, J. (2007). Activación en Redes Feedforward para aproximar
Funciones de Datos con y sin Ruido Comparison of the Activation Functions Performance in Neural
Networks Feedforward to approximate Data Functions with and without Noise. Avances En
Sistemas E Informática, 4(2), 1–10.
Ma, W. Y., & Manjunath, B. S. (1999). NeTra: A toolbox for navigating large image databases.
Multimedia Systems, 7(3), 184–198. https://doi.org/10.1007/s005300050121
Mahalanobis, P. C. (1936). On the generalized distance in statistics. Proceedings of the National Institute
of Sciences of India.
Maldonado, O., Para, B., Vasco, P., & Gra, M. (2008). Estudio de métodos de indexación y recuperación
en bases de datos de imágenes.
Marques, O., & Furht, B. (2002). Content-based image and video retrieval (Vol. 21). Springer Science &
Business Media.
Martínez Comeche, J. A. (2013). La recuperación automatizada de imágenes : retos y soluciones, 23,
423–436.
Meléndez Acosta, N., Figueroa Rios, H. V., & Marín Hernández, A. (2013). Recuperador de imágenes en
base a contenido: una aplicación con esporas. Research in Computing Science, 62.
NCSS Statistical Software. (2014). One ROC Curve and Cutoff Analysis.
Nithya, S. (2013). Bio-Medical Image Retrieval Using Neural Network, 2(3), 351–356.
Nixon, M. S., & Aguado, A. S. (2012). Feature Extraction & Image Processing for Computer Vision.
Feature Extraction & Image Processing for Computer Vision. https://doi.org/10.1016/B978-0-12-
396549-3.00001-X
Noor, A. I., Mokhtar, M. H., Rafiqul, Z. K., & Pramod, K. M. (2012). Understanding Color Models : A
Review. ARPN Journal of Science and Technology, 2(3), 265–275.
P. Sardey, M., & G. K, K. (2015). A Comparative Analysis of Retrieval Techniques in Content Based
Image Retrieval. Computer Science & Information Technology ( CS & IT ), 113–121.
https://doi.org/10.5121/csit.2015.51410
86
Panik, M. J. (2005). Advanced statistics from an elementary point of view (Vol. 9). Academic Press.
Pano Azucena, A. D. (2015). Realización FPGA de una Red Neuronal Artificial para Reproducir
Comportamiento Caótico. Instituto Nacional de Astrofíısica óptica y Electrónica.
Phillips, D. (2000). Image Processing in C Second Edition. Source, i(C), 794.
https://doi.org/10.1108/aa.1998.03318cad.010
Pitarque, A., Roy, J. F., & Ruiz, J. C. (1998). Redes neurales vs modelos estadísticos: Simulaciones sobre
tareas de predicción y clasificación. Psicológica, 19(1998), 387–400.
https://doi.org/10.3145/epi.2008.nov.01
Plataniotis, K. ., & Venetsanopoulos, A. . (2000). Color Image Processing and Applictions (1st ed.).
Springer-Verlag Berlin Heidelberg. https://doi.org/10.1007/978-3-662-04186-4
Raja, S. (2016). A Derivation of Backpropagation in Matrix Form. Retrieved from
https://sudeepraja.github.io/Neural/
Rita. (2016). RITAQDA. Retrieved from https://rita.udistrital.edu.co
Rodríguez Gómez, G., Gil Flores, E., & García Jiménez, J. (2011). Metodología de la Investigación
Cualitativa.
Rogé, J., El Zufari, V., Vienne, F., Ndiaye, D., Zhang, H., Lu, Y., … Electrónico, D. I. (2013).
Reconocimiento de imágenes utilizando redes neuronales artificiales. Estudios Gerenciales, 13(3),
1017–1030. https://doi.org/10.1016/j.estger.2015.05.002
Russell, S. J., & Norvig, P. (2016). Artificial intelligence: a modern approach. Malaysia; Pearson
Education Limited,.
Saito, T., & Rehmsmeier, M. (2015). The precision-recall plot is more informative than the ROC plot
when evaluating binary classifiers on imbalanced datasets. PLoS ONE, 10(3), 1–21.
https://doi.org/10.1371/journal.pone.0118432
Saldaña, J. (2015). The coding manual for qualitative researchers. Sage.
Sanabria, H., & Fonseca, A. (2017a). Output Labels. https://doi.org/10.6084/m9.figshare.5682571
Sanabria, H., & Fonseca, A. (2017b). RGB Histogram Inputs.
https://doi.org/10.6084/m9.figshare.5682610.v2
Sanabria, H., & Fonseca, A. (2017c). RGB input PCA dataset.
https://doi.org/10.6084/m9.figshare.5682658.v3
Sanabria, H., & Fonseca, A. (2017d). YUV Histogram Inputs.
https://doi.org/10.6084/m9.figshare.5682721.v1
Sanabria, H., & Fonseca, A. (2017e). YUV input PCA dataset.
https://doi.org/10.6084/m9.figshare.5682754
Sanabria, H., & Fonseca, A. (2018a, October). multiclass output labels. figshare.
https://doi.org/10.6084/m9.figshare.7203299
Sanabria, H., & Fonseca, A. (2018b, October). RGB color moments input dataset for coverages. figshare.
https://doi.org/10.6084/m9.figshare.7272626.v1
Sanabria, H., & Fonseca, A. (2018c, October). RGB Histogram Inputs for coverages. figshare.
https://doi.org/10.6084/m9.figshare.7272665.v1
87
Sanabria, H., & Fonseca, A. (2018d, October). RGB input color moments dataset. figshare.
https://doi.org/10.6084/m9.figshare.7272563.v1
Sanabria, H., & Fonseca, A. (2018e, October). RGB input PCA dataset for coverages. figshare.
https://doi.org/10.6084/m9.figshare.7272719.v1
Sanabria, H., & Fonseca, A. (2018f, October). YUV color moments input dataset for coverages. figshare.
https://doi.org/10.6084/m9.figshare.7272647
Sanabria, H., & Fonseca, A. (2018g, October). YUV Histogram Inputs for coverages. figshare.
https://doi.org/10.6084/m9.figshare.7272677.v1
Sanabria, H., & Fonseca, A. (2018h, October). YUV input color moments dataset. figshare.
https://doi.org/10.6084/m9.figshare.7272482.v1
Sanabria, H., & Fonseca, A. (2018i, October). YUV input PCA dataset for coverages. figshare.
https://doi.org/10.6084/m9.figshare.7272833.v1
Sanabria, H., & Fonsecca, A. (2017). Image Data Base. https://doi.org/10.6084/m9.figshare.5677681.v1
Santo, R. do E. (2012). Principal Component Analysis applied to digital image compression, 10(55 11),
135–139. https://doi.org/10.1590/S1679-45082012000200004
Science, C., & Studies, M. (2015). RGB to Lab Transformation Using Image Segmentation, 8–16.
Shereena, V. B., & David, J. M. (2014). CONTENT BASED IMAGE RETRIEVAL :
CLASSIFICATION USING NEURAL NETWORKS, 6(5), 31–44.
Shih, F. Y. (2010). Image processing and pattern recognition: fundamentals and techniques. John Wiley
& Sons.
Shirazi, S. H., Umar, A. I., Naz, S., Ul, N., Khan, A., Razzak, M. I., & Alhaqbani, B. (2016). Content-
Based Image Retrieval Using Texture Color Shape and Region. IJACSA) International Journal of
Advanced Computer Science and Applications, 7(1), 418–426.
Silva, C., Freitas, P., Fulchi, L. A., & Muñoz Justicia, J. (2017). LibreQDA. Retrieved from
https://libreqda.github.io/
Stalman, R. (2013). FLOSS and FOSS. Retrieved from https://www.gnu.org/philosophy/floss-and-
foss.html
Sudhir, R. (2011). An Efficient CBIR Technique with YUV Color Space and Texture Features, 2(6), 78–
85.
Universitat de València. (2007). INTRODUCCIÓN AL ANÁLISIS CLUSTER. Retrieved from
https://www.uv.es/ceaces/multivari/cluster/criterios_de_similitud.htm
Vasa, H., Munagala, S. A., Tallapally, D., & Vishal, B. V. (2017). Google Images Download. Retrieved
from https://github.com/hardikvasa/google-images-download
Vasilachis de Gialdino, I., Ameigeira, A. R., & Chernobilsky, L. B. (2006). Estrategias de investigacion
cualitativa.
Vegad, S. P., & Italiya, P. K. (2015). Image Classification using Neural Network for Efficient Image
Retrieval. International Conference on Electrical, Electronics, Signals, Communication and
Optimization(EESCO), (January), 6. https://doi.org/10.1109/EESCO.2015.7253860
Visa, S., Ramsay, B., Ralescu, A., & Van Der Knaap, E. (2011). Confusion matrix-based feature
88
selection. CEUR Workshop Proceedings, 710, 120–127.
89
APÉNDICES
APÉNDICE A
APÉNDICE B
90
APÉNDICE C
91
APÉNDICE D
92
APÉNDICE E
93
APÉNDICE F
En la Figura 49 se puede apreciar la imagen de prueba recuperada con 1, 10, 50 y 100 componentes
principales. La diferencia en la nitidez entre la imagen recuperada con 50 componentes y la imagen
recuperada con 100 componentes es poca.
94
A) B)
C) D)
Figura 49. Imagen de prueba reconstruida con: A) 1 componente principal. B) 10 componentes principales.
C) 50 componentes principales. D) 100 componentes principales
En la Figura 50 y en la Figura 51 se observa el efecto de variar la cantidad de componentes PCA
de Y, U y V en la imagen de prueba. En la Figura 50 se observa lo que pasa cuando se varía el
número de componentes principales de U y V en 1, 10 y 100 utilizando solo un componente
95
principal en Y. En la Figura 51 se observa lo que pasa cuando se varía el número de componentes
principales de Y en 1, 10 y 100 pero utilizando solo un componente principal en U y V.
A) B) C)
Figura 50. Imagen de prueba recuperada con 1 componente principal en Y (luma) y: A) 1 componente principal en
U y V. B) 10 componentes principales en U y V.C) 100 componentes principales en U y V.
A) B) C)
Figura 51. Imagen de prueba recuperada con 1 componente principal en U y V y: A) 1 componente principal en Y.
B) 10 componentes principales en Y. C) 100 componentes principales en Y.
96
APÉNDICE G
97
98
APÉNDICE H
99
100
APÉNDICE I
Desde la Figura 52 hasta la Figura 57 se presentan el comportamiento del MSE al variar el valor
de la tasa de aprendizaje eta, por cada método de extracción de característica utilizadas como valor
de entrada de la red neuronal de clasificación rural – no rural, para una y dos capas ocultas
respectivamente.
Figura 52. Comportamiento del MSE al variar la tasa de aprendizaje al utilizar los histogramas como características
de entrada para la red neuronal con una capa oculta.
101
Figura 53. Comportamiento del MSE al variar la tasa de aprendizaje al utilizar los histogramas como características
de entrada para la red neuronal con dos capas ocultas.
Figura 54. Comportamiento del MSE al variar la tasa de aprendizaje al utilizar los momentos de color como
características de entrada para la red neuronal con una capa oculta.
102
Figura 55. Comportamiento del MSE al variar la tasa de aprendizaje al utilizar los momentos de color como
características de entrada para la red neuronal con dos capas ocultas.
Figura 56. Comportamiento del MSE al variar la tasa de aprendizaje al utilizar los métodos de componentes
principales como características de entrada para la red neuronal con una capa oculta.
103
Figura 57. Comportamiento del MSE al variar la tasa de aprendizaje al utilizar los métodos de componentes
principales como características de entrada para la red neuronal con dos capas ocultas.
104
APÉNDICE J
Desde la Figura 58 hasta la Figura 63 se presentan las curvas ROC para cada método de obtención
de característica y modelo de color variando la cantidad de neuronas en la capa oculta respecto al
valor que se obtuvo mediante el método de la pirámide geométrica presentado en la Tabla 8.
Figura 58. Comparación de las curvas ROC al variar el número de neuronas en la capa oculta para el método de los
histogramas RGB.
105
Figura 59. Comparación de las curvas ROC al variar el número de neuronas en la capa oculta para el método de
momentos de color RGB.
Figura 60. Comparación de las curvas ROC al variar el número de neuronas en la capa oculta para el método de
componentes principales RGB.
106
Figura 61. Comparación de las curvas ROC al variar el número de neuronas en la capa oculta para el método de los
histogramas YUV.
Figura 62. Comparación de las curvas ROC al variar el número de neuronas en la capa oculta para el método de
coeficientes de predicción lineal YUV.
107
Figura 63. Comparación de las curvas ROC al variar el número de neuronas en la capa oculta para el método de
componentes principales YUV.
APÉNDICE K
Desde la Figura 64 hasta la Figura 75 se presentan las curvas ROC para cada método de obtención
de características y modelo de color, variando la cantidad de neuronas en la primera y en la segunda
capa respecto al valor calculado por medio del método de la pirámide geométrica que se presentó
en la Tabla 9. Dicha variación se realizó aumentado la cantidad de neuronas en diez, veinte y
treinta neuronas sobre el valor obtenido en la Tabla 9.
108
Figura 64. Comparación de las curvas ROC al variar la cantidad de neuronas en la primera capa oculta para el método
de los histogramas en el modelo de color RGB, manteniendo constante el número de neuronas en la segunda capa.
Figura 65. Comparación de las curvas ROC al variar la cantidad de neuronas en la segunda capa oculta para el método
de los histogramas en el modelo de color RGB, manteniendo constante el número de neuronas en la primera capa.
109
Figura 66. Comparación de las curvas ROC al variar la cantidad de neuronas en la primera capa oculta para el
método de los momentos de color en el modelo de color RGB, manteniendo constante el número de neuronas en la
segunda capa.
Figura 67. Comparación de las curvas ROC al variar la cantidad de neuronas en la segunda capa oculta para el
método de los momentos de color en el modelo de color RGB, manteniendo constante el número de neuronas en la
primera capa.
110
Figura 68. Comparación de las curvas ROC al variar la cantidad de neuronas en la primera capa oculta para el
método de los PCA en el modelo de color RGB, manteniendo constante el número de neuronas en la segunda capa.
Figura 69. Comparación de las curvas ROC al variar la cantidad de neuronas en la segunda capa oculta para el
método de los PCA en el modelo de color RGB, manteniendo constante el número de neuronas en la primera capa.
111
Figura 70. Comparación de las curvas ROC al variar la cantidad de neuronas en la primera capa oculta para el método
de los histogramas en el modelo de color YUV, manteniendo constante el número de neuronas en la segunda capa.
Figura 71. Comparación de las curvas ROC al variar la cantidad de neuronas en la segunda capa oculta para el método
de los histogramas en el modelo de color YUV, manteniendo constante el número de neuronas en la primera capa.
112
Figura 72. Comparación de las curvas ROC al variar la cantidad de neuronas en la primera capa oculta para el
método de los momentos de color en el modelo de color YUV, manteniendo constante el número de neuronas en la
segunda capa.
Figura 73. Comparación de las curvas ROC al variar la cantidad de neuronas en la segunda capa oculta para el
método de los momentos de color en el modelo de color YUV, manteniendo constante el número de neuronas en la
primera capa.
113
Figura 74. Comparación de las curvas ROC al variar la cantidad de neuronas en la primera capa oculta para el
método de los PCA en el modelo de color YUV, manteniendo constante el número de neuronas en la segunda capa.
Figura 75. Comparación de las curvas ROC al variar la cantidad de neuronas en la segunda capa oculta para el
método de los PCA en el modelo de color YUV, manteniendo constante el número de neuronas en la primera capa.
114
APÉNDICE L
Desde la Figura 76 hasta la Figura 78 se presentan el comportamiento del MSE al variar el valor
de la tasa de aprendizaje eta, por cada método de extracción de característica utilizadas como valor
de entrada de la red neuronal de clasificación de coberturas, para una capa oculta.
Figura 76. Comportamiento del MSE al variar la tasa de aprendizaje al utilizar los histogramas como características
de entrada para la red neuronal de clasificación de coberturas.
115
Figura 77. Comportamiento del MSE al variar la tasa de aprendizaje al utilizar los momentos de color como
características de entrada para la red neuronal de clasificación de coberturas.
Figura 78. Comportamiento del MSE al variar la tasa de aprendizaje al utilizar los componentes principales como
características de entrada para la red neuronal de clasificación de coberturas.
116
APÉNDICE M
A continuación, se presenta las curvas de precisión y exhaustividad obtenidas del diseño y prueba
de la red neuronal de clasificación de coberturas, en la sección 3.4.4.
Desde la Figura 79 hasta la Figura 82 se muestra las curvas para la red neuronal utilizando como
entradas las características de la imagen obtenidas por método de histogramas en el modelo de
color RGB.
Figura 79. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de los histogramas RGB para el clasificador de cobertura de árboles.
117
Figura 80. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de los histogramas RGB para el clasificador de cobertura de césped.
Figura 81. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de los histogramas RGB para el clasificador de cobertura de suelo descubierto.
118
Figura 82. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de los histogramas RGB para el clasificador de cobertura de cuerpos de agua.
Desde la Figura 83 hasta la Figura 86 se muestra las curvas para la red neuronal utilizando como
entradas las características de la imagen obtenidas por método de momentos de color en el modelo
de color RGB.
119
Figura 83. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de los momentos de color RGB para el clasificador de cobertura de árboles.
Figura 84. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de los momentos de color RGB para el clasificador de cobertura de césped.
120
Figura 85. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de los momentos de color RGB para el clasificador de cobertura de suelo descubierto.
Figura 86. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de los momentos de color RGB para el clasificador de cobertura de cuerpos de agua.
121
Desde la Figura 87 hasta la Figura 90 se muestra las curvas para la red neuronal utilizando como
entradas las características de la imagen obtenidas por método de componentes principales en el
modelo de color RGB.
Figura 87. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de componentes principales RGB para el clasificador de cobertura de árboles.
122
Figura 88. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de componentes principales RGB para el clasificador de cobertura de césped.
Figura 89. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de componentes principales RGB para el clasificador de cobertura de suelo descubierto.
123
Figura 90. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de componentes principales RGB para el clasificador de cobertura de cuerpos de agua.
Desde la Figura 91 hasta la Figura 94 se muestra las curvas para la red neuronal utilizando como
entradas las características de la imagen obtenidas por método de histogramas en el modelo de
color YUV.
124
Figura 91. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de histogramas YUV para el clasificador de cobertura de árboles.
Figura 92. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de histogramas YUV para el clasificador de cobertura de césped.
125
Figura 93. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de histogramas YUV para el clasificador de cobertura de suelo descubierto.
Figura 94. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de histogramas YUV para el clasificador de cobertura de cuerpos de agua.
126
Desde la Figura 95 hasta la Figura 98 se muestra las curvas para la red neuronal utilizando como
entradas las características de la imagen obtenidas por método de momentos de color en el modelo
de color YUV.
Figura 95. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de momentos de color YUV para el clasificador de cobertura de árboles.
127
Figura 96. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de momentos de color YUV para el clasificador de cobertura de césped.
Figura 97. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de momentos de color YUV para el clasificador de cobertura de suelo descubierto.
128
Figura 98. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de momentos de color YUV para el clasificador de cobertura de cuerpos de agua.
Desde la Figura 99 hasta la Figura 102 se muestra las curvas para la red neuronal utilizando como
entradas las características de la imagen obtenidas por método de componentes principales en el
modelo de color YUV.
129
Figura 99. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de componentes principales YUV para el clasificador de cobertura de árboles.
Figura 100. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de componentes principales YUV para el clasificador de cobertura de césped.
130
Figura 101. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de componentes principales YUV para el clasificador de cobertura de suelo descubierto.
Figura 102. Comparación de las curvas precisión y exhaustividad al variar el número de neuronas en la capa oculta
con el método de componentes principales YUV para el clasificador de cobertura de cuerpos de agua.
131
APÉNDICE N
1. Vistas del módulo de imágenes:
@login_required
def view_image(request, pid, did, template='view_image.html'):
"""
vista encargada de la visualización.
:related models: Project, ImageInstance, Coberturas.
:template: view_image.html
:url: r'^project/(?P<pid>\d+)/images/(?P<did>\d+)/$'.
@params
:param request: Metadatos de la petición http.
:param pid: Id del proyecto al que pertenece la imagen
:param did: Id de la imagen
:param template: documento html asociado a esta vista.
:return: si el método es POST retorna las citaciones correspondientes a
la imagen
si el método es GET retorna el template de visualizacion de la
imagen y las citaciones
correspondientes a dicha imagen.
"""
p = get_object_or_404(Project, pk=pid)
d = get_object_or_404(ImageInstance, pk=did)
if request.method == 'POST':
citations = d.citations.all()
payload={"datos":[]}
for cit in citations:
payload["datos"].append({"serial":cit.serialized,"id":cit.id})
return JsonResponse(payload)
else:
texts = {
'add_code': _(u'Asignar códigos'),
'add_annotation': _(u'Asignar anotación'),
'view_details': _('Ver detalles'),
}
return render(request,
template,
{'project': p,
'image': d,
'citations': d.citations.all(),
'texts': texts})
@login_required
def upload_image(request, pid, template='upload_image.html'):
"""
Vista encargada de la subida de imágenes.
:template: upload_image.html
:related models: Image, ImageInstance, Coberturas.
132
:url: r'^project/(?P<pid>\d+)/images/add/$'.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param template: documento html asociado a la vista.
:return: Si el método es POST guarda los datos asociados a la imagen en
el modelo Image
creando una instancia en ImageInstance. Si la imagen subida
es rural guarda las coberturas
identificadas en el modelo Coberturas.
Si el método es GET renderiza el formulario de subida de
imágenes.
"""
p = get_object_or_404(Project, pk=pid)
if request.method == 'POST':
form = UploadImageForm(request.POST, request.FILES)
if form.is_valid():
name = form.cleaned_data['name']
comment = form.cleaned_data['comment']
image_file = request.FILES['image']
share = form.cleaned_data['share']
image = Image(name=name,
comment=comment,
uploaded_by=request.user,
file=image_file,
type=splitext(image_file.name)[1],
share=share)
image.save()
img_instance = ImageInstance(name=name,
project=p,
comment=comment,
image=image,
type=image.type,
uploaded_by=request.user)
img_instance.save()
image.file.close()
# sección para clasificación y guardado de códigos en la base de
datos
path_img = image.file.url
CLS = Clasificacion_rural(path_img)
salida = CLS.clasificar()
if salida == 1:
print("La imagen es rural!!!", salida)
DIV = Clasificacion_cobertura(path_img)
DIV.dividir_imagen()
DIV.obtener_momentos()
salida_cobertura_real = DIV.red_neuronal()
umbral = np.array([0.6655, 0.3936, 0.5175, 0.4249])
salida_cobertura = np.array_str(1 * (salida_cobertura_real >=
umbral))
133
coverage = np.transpose(salida_cobertura_real)
tree = float(np.sum(coverage[0])) / float(len(coverage[0]))
grass = float(np.sum(coverage[1])) / float(len(coverage[1]))
ground = float(np.sum(coverage[2])) / float(len(coverage[2]))
water = float(np.sum(coverage[3])) / float(len(coverage[3]))
cobertura = Coberturas(id_image=img_instance,
coberturas=salida_cobertura,
parte_x=DIV.parx,
parte_y=DIV.pary,
arbol=tree,
cesped=grass,
suelo=ground,
agua=water)
cobertura.save()
else:
image.share = False
image.save()
print("la imagen no es rural", salida)
return redirect('browse_projects')
else:
form = UploadImageForm()
back_url = reverse('browse_projects')
form_action = reverse('upload_image', args=(pid,))
return render(request,
template,
{'project': p,
'documents': Image.objects.all(),
'form': form,
'form_action': form_action,
'back_url': back_url})
@login_required
def delete_image(request, pid, did):
"""
Vista encargada de eliminar una imagen.
:related models: Project, ImageInstance.
:url: r'^project/(?P<pid>\d+)/images/(?P<did>\d+)/delete/$'.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param did: Id de la imagen.
:return: Redirige a la vista principal.
"""
p = get_object_or_404(Project, pk=pid)
d = get_object_or_404(ImageInstance, pk=did)
if p.owner == request.user:
d.image.delete()
d.delete()
else:
raise Http404
return redirect('browse_projects')
134
@login_required
def add_code_to_image_citation(request, pid, cid, template='modal.html'):
"""
Vista encargada de agreagar un código a una citación de una imagen.
:template: modal.html
:related models: ImageCitation, Project.
:url: r'^project/(?P<pid>\d+)/image_citation/(?P<cid>.+)/code/assign/$'.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param cid: Id de la citacion.
:param template: documento html asociado a la vista.
:return: Si el método es POST agrega un código a una citación de una
imagen, y retorna dicha citación.
Si el método es GET renderiza el formulario para agregar uno o
varios códigos a una citación.
"""
if request.method == 'POST':
form = AddCodeToCitationForm(request.POST)
p = get_object_or_404(Project, pk=pid)
cit = get_object_or_404(ImageCitation, pk=cid)
if form.is_valid():
response_data = {'success': True}
for code in form.cleaned_data['codes']:
if cit.codes.filter(pk=code.pk).exists():
response_data = {'error': _('Code already in project')}
break
cit.codes.add(code)
response_data['cid'] = cid
response_data['codes_str'] = cit.codes_str()
response_data['codes_color'] = cit.html_color()
response_data['top'] = cit.y_coordinate
response_data['left'] = cit.x_coordinate
response_data['width'] = cit.width
return JsonResponse(response_data)
else:
p = get_object_or_404(Project, pk=pid)
cit = get_object_or_404(ImageCitation, pk=cid)
form = AddCodeToCitationForm()
form_action = reverse('add_code_to_image_citation',
kwargs={'pid': pid, 'cid': cid})
available_codes =
Code.objects.filter(project=p).exclude(pk__in=cit.codes.all())
form.fields['codes'].queryset = available_codes
response_dict = {
'form': form,
'form_action': form_action,
'form_header': _(u'Asignar códigos a la imágen'),
}
html_response = render_to_string(
template, response_dict, RequestContext(request))
135
response_data = {'html': html_response}
return JsonResponse(response_data)
@login_required
def image_citation_details(request, pid, cid,
template='image_citation_details.html'):
"""
Vista encargada mostrar información de una citación de una imagen.
:template: image_citation_details.html
:related models: ImageCitation, Project.
:url: r'^project/(?P<pid>\d+)/image_citation/(?P<cid>.+)/details/$'.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param cid: Id de la citación.
:param template: documento html asociado a la vista.
:return: Si el método es GET retorna el html con los detalles de la
citación.
"""
p = get_object_or_404(Project, pk=pid)
cit = get_object_or_404(ImageCitation, pk=cid)
response_dict = {
'project': p,
'citation': cit,
'form_header': _('Detalles de la imagen'),
}
html_response = render_to_string(
template, response_dict, RequestContext(request))
response_data = {'html': html_response}
return JsonResponse(response_data)
@login_required
def remove_code_from_image_citation(request, pid, citid, codeid):
"""
Vista encargada eliminar un código asociado a una citación de una imagen.
:related models: ImageCitation, Code.
:url: r'^project/(?P<pid>\d+)/image_citation/(?P<cid>.+)/details/$'.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param citid: Id de la citación.
:param codeid: Id del código.
:param template: documento html asociado a la vista.
:return: Si el método es GET retorna el html con los detalles de la
citación.
"""
cit = get_object_or_404(ImageCitation, pk=citid)
code = get_object_or_404(Code, pk=codeid)
if code not in cit.codes.all():
raise Http404
cit.codes.remove(code)
cit.save()
136
return redirect('view_image', pid=pid, did=cit.image.pk)
@login_required
def browse_code_image_citations(request, cid,
pid,template='browse_code_image_citations.html'):
"""
Vista encargada visualizar las citaciones que tienen asignado un mismo
código.
:template: browse_code_image_citations.html
:related models: ImageCitation, Code.
:url: r'^project/(?P<pid>\d+)/image_codes/$'.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param cid: Id de la citación.
:param template: documento html asociado a la vista.
:return: Si el método es GET rerenderiza las citaciones de imágnes
asigadas a un código.
"""
c = get_object_or_404(Code, pk=cid)
citas = ImageCitation.objects.filter(codes=cid)
return render(request, template, {'code': c, 'citas': citas, 'pid': pid})
@login_required
def browse_image_citations(request, pid, did,
template='browse_image_citations.html'):
"""
Vista encargada de visualizar las citaciones pertenecientes a una imagen.
:template: browse_image_citations.html
:related models: ImageInstance, Code.
:url: r'^project/(?P<pid>\d+)/images/(?P<did>\d+)/citations$'.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param cid: Id de la citación.
:param template: documento html asociado a la vista.
:return: Si el método es GET rerenderiza las citaciones pertenecientes a
una imagen.
Si el método es POST realiza una búsqueda y devuelve las
citaciones relacionadas
con dicha búsqueda.
"""
form_action = reverse('browse_image_citations', args=(pid, did,))
imagenes = ImageInstance.objects.filter(project_id=pid)
imagenes_ids = imagenes.values_list('id', flat=True)
if request.method == 'POST':
busqueda = request.POST['busqueda']
citas = ImageCitation.objects.filter(image_id__in=imagenes_ids,
comment__icontains=busqueda)
else:
citas = ImageCitation.objects.filter(image_id=did)
response_dict = {
'form_action': form_action,
137
'citas': citas,
'pid': pid
}
html_response = render_to_string(template, response_dict,
RequestContext(request))
response_data = {'html': html_response}
return JsonResponse(response_data)
@login_required
def browse_codes_from_images(request, pid,
template='browse_codes_from_images.html'):
"""
Vista encargada retornar el codigo html con la información de los códigos
del proyecto,
para visualizarlo desde el template de visualización de una imagen.
:template: browse_codes_from_images.html
:related models: Project.
:url: r'^project/(?P<pid>\d+)/image_codes/$'.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param template: documento html asociado a la vista.
:return: Si el método es GET retorna el código html con la informacion .
"""
p = get_object_or_404(Project, pk=pid)
response_dict = {'project': p}
html_response = render_to_string(
template, response_dict, RequestContext(request))
response_data = {'html': html_response}
return JsonResponse(response_data)
@login_required
def cit_image_add(request, pid, did):
"""
Vista encargada de agreagar una citación a una imagen.
:related models: ImageCitation,ImageInstance.
:url: r'^project/(?P<pid>\d+)/images/(?P<did>\d+)/cit_add/$'.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param did: id de la imagen.
:return: si el metodo es POST agrega una citacion a una imagen.
"""
138
i = get_object_or_404(ImageInstance, pk=did)
if request.method == 'POST':
serialized = request.POST.get("an")
citacion = json.loads(serialized)
add = ImageCitation(image=i,
created_by=request.user,
creation_date=datetime.now(),
modified_date=datetime.now(),
comment=citacion["text"],
x_coordinate=citacion["shapes"][0]['geometry']['x'],
y_coordinate=citacion["shapes"][0]['geometry']['y'],
width=citacion["shapes"][0]['geometry']['width'],
height=citacion["shapes"][0]['geometry']['height'],
serialized=serialized)
add.save()
if add.serialized.find('"id":') == -1:
serializ = add.serialized[:len(add.serialized) - 1] + ',"id":' +
str(add.id) + '}'
else:
serializ = add.serialized[:add.serialized.find(',"id":') - 1] +
',"id":' + str(add.id) + '}'
add.serialized = serializ
add.save()
citations = i.citations.filter(serialized=serializ)
payload = {"datos": []}
for cit in citations:
payload["datos"].append({"serial": cit.serialized, "id": cit.id})
return JsonResponse(payload)
else:
return redirect('http://localhost:8000/project/' + str(pid) +
'/images/' + str(did) + '/')
@login_required
def cit_image_update(request, pid, did):
"""
Vista encargada de modificar una citacion ya existente.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param did: id de la imagen.
:return: Si el método es POST modifica una citacion.
"""
if request.method == 'POST':
serialized = request.POST.get("an")
citacion = json.loads(serialized)
id = citacion["id"]
update = ImageCitation.objects.get(pk=id)
update.modified_date = datetime.now()
update.comment = citacion["text"]
139
update.serialized = serialized
update.save()
return JsonResponse({"success": True})
else:
return redirect('http://localhost:8000/project/' + str(pid) +
'/images/' + str(did) + '/')
@login_required
def cit_image_del(request, pid, did):
"""
Vista encargada de eliminar una citacion perteneciente a una imagen.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param did: id de la imagen.
:return: devuelve un JSON con respuesta exitosa.
"""
if request.method == 'POST':
serialized = request.POST.get("an")
citacion = json.loads(serialized)
id = citacion["id"]
deleted = ImageCitation.objects.get(pk=id)
deleted.delete()
return JsonResponse({"success": True})
else:
return redirect('view_image', pid=pid, did=did)
@login_required
def sugerencia(request, pid, did):
"""
Vista encargada de enviar y agregar las sugerencias de códicos
identificados en la imagen.
:Related models: ImageCitation, Codes.
:url: r'^project/(?P<pid>\d+)/images/(?P<did>\d+)/sugerencia/$'.
@Params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param did: Id de la imagen.
:return: Si el método es POST agrega un código y una anotación a una
imagen.
Si el método es GET obtiene y envía en formato JSON las
coberturas identificadas por la red neuronal.
"""
if request.method == 'POST':
cid = request.POST.get("cid")
p = get_object_or_404(Project, pk=pid)
cit = get_object_or_404(ImageCitation, pk=cid)
selector = request.POST.get("selector")
name = request.POST.get("name")
140
sugerencia = Code.objects.filter(name=name)
if sugerencia.count() <= 0:
if selector == 'arbol':
nombre = name
peso = 55
tecnicolor = 's'
comentario = "Cobertura de arboles"
elif selector == 'cesped':
nombre = name
peso = 45
tecnicolor = 'd'
comentario = "Cobertura de cesped"
elif selector == 'suelo':
nombre = name
peso = 20
tecnicolor = 'w'
comentario = "Cobertura de suelo descubierto"
elif selector == 'agua':
nombre = name
peso = 15
tecnicolor = 'i'
comentario = "Cobertura de cuerpos de agua"
else:
return JsonResponse({"success": False})
c = Code(project=p,
name=nombre,
weight=peso,
created_by=request.user,
color=tecnicolor,
comment=comentario,
modified_date=datetime.now(),
creation_date=datetime.now())
c.save()
cit.codes.add(c)
else:
c = Code.objects.get(name=name)
cit.codes.add(c)
response_data = {'success': True}
response_data['cid'] = cid
response_data['codes_str'] = cit.codes_str()
response_data['codes_color'] = cit.html_color()
response_data['top'] = cit.y_coordinate
response_data['left'] = cit.x_coordinate
response_data['width'] = cit.width
return JsonResponse(response_data)
else:
try:
coverage = Coberturas.objects.get(id_image=did)
datos = {"success": True,
"codigos": coverage.coberturas,
"x": coverage.parte_x,
"y": coverage.parte_y}
return JsonResponse(datos)
except:
datos = {"success": False}
return JsonResponse(datos)
141
@login_required
def similar(request, pid, did, template='view_similar_image.html'):
"""
Vista encargada de Mostrar imagenes similares que hayan sido compartidas
por otros investigadores.
:Related models: Coberturas,Image,ImageInstance,
:url: r'^project/(?P<pid>\d+)/images/(?P<did>\d+)/similar/$'.
:template: view_similar_image.html.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param did: id de la imagen.
:param template: documento html asociado a la vista.
:return: Si el metodo es GET renderiza las imagenes similares encontradas
en la base de datos.
"""
coverage = Coberturas.objects.get(id_image=did)
coverages = Coberturas.objects.exclude(id_image=did)
image_duplicates =
Image.objects.values('file').annotate(file_count=Count('file')).filter(file_c
ount__gt=1)
excludes = []
data = []
if image_duplicates.exists():
for duplicate in image_duplicates:
data.extend(Image.objects.filter(file=duplicate['file']).values('id',
'file'))
id_url = {}
for dat in data:
id_url[str(dat['id'])] = dat['file']
instances =
ImageInstance.objects.filter(project_id=pid).values('image_id')
for id in instances:
iid = str(id['image_id'])
try:
id_url[iid]
excludes.append(id_url[iid])
except:
print("no esta repetido")
payload = {"coverage": []}
vector_a = np.array([coverage.arbol, coverage.cesped, coverage.suelo,
coverage.agua], dtype=float)
for cover in coverages:
vector_b = np.array([cover.arbol, cover.cesped, cover.suelo,
cover.agua], dtype=float)
manhattan = sum(abs(vector_a - vector_b)) #manhattan
if float(manhattan) < 0.9 and /
int(cover.id_image.project_id) !=int(pid): #si la imagen supera umbral
y no pertenece al mismo proyecto
if cover.id_image.image.share: #si la imagen esta compartida con
otros proyectos
if excludes.count(cover.id_image.image.file) == 0: #si la
142
imagen no se repite en otro proyecto
cover.signature = manhattan
payload["coverage"].append(cover)
payload["coverage"].sort(key=attrgetter('signature'))
paginator = Paginator(payload["coverage"], 6)
page = request.GET.get('page')
try:
images = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
images = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
images = paginator.page(paginator.num_pages)
page_range = paginator.page_range
page_range = map(str, page_range)
return render(request, template, {"images": images,
"page_range": page_range,
"pid": pid,
"did": did})
@login_required
def add_image_to_project(request, pid, did):
"""
Vista encargada de agreagar una imagen sugerida al proyecto actual.
:related models: Image,ImageInstance.
:url:
r'^project/(?P<pid>\d+)/images/(?P<did>\d+)/similar/add_share_image/$'.
@params
:param request: Metadatos de la petición http.
:param pid: id del proyeto.
:param did: id de la imagen.
:return: Si el método es POST agrega una imagen sugerida al proyecto
actual.
"""
p = get_object_or_404(Project, pk=pid)
if request.method == 'POST':
id = request.POST.get("id")
i = get_object_or_404(Image, pk=id)
image = Image(name=i.name,
comment=i.comment,
uploaded_by=request.user,
file=i.file,
type=i.type,
share=False)
image.save()
img_instance = ImageInstance(name=i.name,
project=p,
comment=i.comment,
image=image,
type=i.type,
uploaded_by=request.user)
img_instance.save()
143
im = ImageInstance.objects.get(image=id)
c = Coberturas.objects.get(id_image=im.id)
cobertura = Coberturas(id_image=img_instance,
coberturas=c.coberturas,
parte_x=c.parte_x,
parte_y=c.parte_y,
arbol=c.arbol,
cesped=c.cesped,
suelo=c.suelo,
agua=c.agua)
cobertura.save()
return JsonResponse({"success": True})
2. Modelos del módulo de imágenes:
# La siguiete parte son los modelos encargados para el funcionamiento del
módulo de imágenes:
# función para generar ruta de archivo de imagen
def get_new_image_path(instance, filename):
img_uuid = uuid.uuid4().hex
return os.path.join(
'libreqda/static/images',
img_uuid,
filename)
# Este es el modelo donde se guarda registro de todos las imágenes que alguna
vez se han subido al programa
class Image(models.Model):
name = models.CharField(max_length=250) # nombre de las imágenes
type = models.CharField(max_length=250) # tipo de imagen
comment = models.TextField(blank=True, null=True) # comentarios de la
imagen a subir
file = models.ImageField(
upload_to=get_new_image_path) # archivos de las imagenes subidos a
la carpeta libreqda/static/images
uploaded_by = models.ForeignKey(User) # usuario que subió la imagen
creation_date = models.DateTimeField(auto_now_add=True) # fecha de
creacion
# campo opcional para habilitar si se comparte o no la imagen a otros
proyectos y/o usuarios
share = models.BooleanField(default=True)
def __unicode__(self):
return "Image: %s" % (self.name) # retorna string unicode "Image -
name"
# Este modelo relaciona las imágenes con el proyecto donde se subió para
saber que imagen pertenece a un proyecto
class ImageInstance(models.Model):
image = models.ForeignKey(Image, related_name='instances')
project = models.ForeignKey(Project, related_name='images') # proyecto
144
donde se subió la imagen
name = models.CharField(max_length=250) # Nombre con el que se subió la
imagen
type = models.CharField(max_length=250) # Tipo de imagen
comment = models.TextField(blank=True, null=True) # Comentarios
realizados
modified_date = models.DateTimeField(auto_now=True) # Fecha de
modificacion
uploaded_by = models.ForeignKey(User)
creation_date = models.DateTimeField(auto_now_add=True)
annotations = models.ManyToManyField('Annotation', related_name='images')
def __unicode__(self):
return "ImageInstance: %s" % (self.name)
# El siguiente modelo permite guardar las citaciones que se realizan sobre
una imagen y así separarlo de las citaciones realizadas a los textos
class ImageCitation(models.Model):
image = models.ForeignKey(ImageInstance, related_name='citations',
on_delete=models.CASCADE)
created_by = models.ForeignKey(User)
creation_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)
comment = models.TextField(null=True, blank=True)
x_coordinate = models.FloatField()
y_coordinate = models.FloatField()
width = models.FloatField()
height = models.FloatField()
serialized = models.TextField(null=True, blank=True)
#annotations = models.ManyToManyField(Annotation,
# null=True,
# blank=True,
# related_name='image_citations')
def __unicode__(self):
return self.comment
def codes_str(self):
return ', '.join(self.codes.all().values_list('name', flat=True))
def html_color(self):
if not self.codes.all():
return 'blank'
return self.codes.all()[0].html_color()
return ', '.join(self.codes.all().values_list('name', flat=True))
# El siguiente modelo es opcional, correspondiente a la identificación de
coberturas en imágenes rurales
class Coberturas(models.Model):
id_image = models.ForeignKey(ImageInstance, related_name='coberturas')
coberturas = models.CharField(max_length=1000, blank=False,
verbose_name=_("Codigos"))
parte_x = models.IntegerField()
parte_y = models.IntegerField()
145
arbol = models.FloatField()
cesped = models.FloatField()
suelo = models.FloatField()
agua = models.FloatField()
3. Plantilla html de visualización de imágenes:
{% extends "base.html" %}
{% load i18n %}
{% block head %}
{{ block.super }}
<!-- Annotorious lib -->
<link type="text/css" rel="stylesheet" href="{{ STATIC_URL
}}annotorius/css/annotorious.css" />
<script type="text/javascript" src="{{ STATIC_URL
}}annotorius/annotorious.min.js"></script>
<!-- JQuery contextMenu lib-->
<link href="{{ STATIC_URL }}lib/jquery.contextMenu/jquery.contextMenu.css"
rel="stylesheet" type="text/css">
<script src="{{ STATIC_URL }}lib/jquery.contextMenu/jquery.contextMenu.js"
type="text/javascript"></script>
{% endblock head %}
{% block topbar_extra %}
{% endblock topbar_extra %}
{% block body %}
<div class="modal hide fade" id="codeModal">
</div>
<div class="modal hide fade" id="citationModal">
</div>
<div class="modal hide fade" id="codesModal">
</div>
<div class="modal hide fade" id="citationsModal">
</div>
<div id="documents-menu" class="menu left" style="left:-430px">
{% include "view_image_images_tab.html" %}
</div>
<div class="row-fluid">
<div class="span10 offset1">
<div class="toolbar move-up">
<a class="btn left-group-button pull-right" target="_blank" href="{%
url browse_categories pid=project.id %}"><i class="icon-tags"></i> {% trans
"Categorías" %}</a>
<!-- <a class="btn left-group-button pull-right disabled"><i
class="icon-file"></i> {% trans "Informes" %}</a> -->
<a class="btn left-group-button pull-right" target="_blank" href="{%
url browse_queries pid=project.id %}"><i class="icon-search"></i> {% trans
"Consultas" %}</a>
<!-- <a class="btn left-group-button pull-right disabled"><i
class="icon-filter"></i> {% trans "Filtros" %}</a> -->
<!--<a class="btn left-group-button pull-right" target="_blank"
146
href="{% url browse_annotations pid=project.id %}"><i class="icon-
comment"></i> {% trans "Anotaciones" %}</a>-->
<a class="btn left-group-button pull-right codes" data-url="{% url
browse_codes_from_images pid=project.id %}"><i class="icon-book"></i> {%
trans "Códigos" %}</a>
<a class="btn left-group-button pull-right citations" data-url="{%
url browse_image_citations pid=project.id did=image.id %}"><i class="icon-
bookmark"></i> {% trans "Citas" %}</a>
<a class="btn left-group-button pull-right"
href="/project/{{project.id}}"><i class="icon-circle-arrow-left"></i> {%
trans "Regresar al proyecto" %}</a>
</div>
</div>
</div>
<div class="document-container white-background with-border row-fluid">
<div class="span9 document-text">
<h3>{{ image.name }} </h3>
<div id="doc-text-area">
{% for cit in citations %}
<div id="bar-id-{{ cit.id }}" class="citation-bar cit-{{
cit.html_color }}" title="{{ cit.codes_str }}" data-cid="{{ cit.id }}"
style="position:relative; z-index:-1; top:100px"></div>
{% endfor %}
<img src="/{{ image.image.file.url }}" alt="Error, la imagen no se
muestra" class="annotatable"/>
</div>
</div>
<div id="coberturas" class="btn-group" style="display:none">
<button class="btn" disabled>Códigos sugeridos:</button>
<button class="btn dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul id="sugerencias" class="dropdown-menu">
<li><a id="arbol" href="#" data-name="Árboles"
class="selector">Árboles</a></li>
<li><a id="cesped" href="#" data-name="Césped"
class="selector">Césped</a></li>
<li><a id="suelo" href="#" data-name="Suelo descubierto"
class="selector">Suelo descubierto</a></li>
<li><a id="agua" href="#" data-name="Cuerpos de agua"
class="selector">Cuerpos de agua</a></li>
</ul>
</div>
<div id="similar" class="btn-group" style="display:none">
<a class="btn" href="{% url similar pid=project.id did=image.id
%}?page=1">Buscar Imágenes Similares</a>
</div>
</div>
<script type="text/javascript">
/* the following codes are responsible in adding, updating and deleting
citations in a image using the Javascript
* API from annotorious
*/
/* this function creates an annotation in the image */
147
var myVar;
function setAnnotation(){
$.ajax({
url:'{% url view_image pid=project.id did=image.id %}',
dataType:"json",
type:"POST",
data:{csrfmiddlewaretoken: csrftoken},
success: function(data) {
data.datos.forEach(function(element){
an = JSON.parse(element.serial);
an.id = element.id;
anno.addAnnotation(an);
barPosition(an);
barOffset();
});
}
});
clearInterval(myVar);
}
/* these functions load the annotations saved in the database in the image
*/
$(window).on("load", function() {
myVar = setInterval(function(){ loadAnnotation(); }, 300);
});
function loadAnnotation(){
$.ajax({
url:'{% url view_image pid=project.id did=image.id %}',
dataType:"json",
type:"POST",
data:{csrfmiddlewaretoken: csrftoken},
success: function(data) {
data.datos.forEach(function(element){
an = JSON.parse(element.serial);
an.id = element.id;
anno.addAnnotation(an);
barOffset();
barPosition(an);
positionTooltips(".citation-bar");
});
}
});
clearInterval(myVar);
}
/* this function create the csrftoken */
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length
+ 1));
break;
}
148
}
}
return cookieValue;
}
var csrftoken = getCookie('csrftoken');
/* when the citation is created this function calls a post to send the data
of the citation to a view for saving it
* in the database
*/
anno.addHandler('onAnnotationCreated', function(annotation) {
anot = JSON.stringify(annotation);
$.ajax({
url:'{% url cit_image_add pid=project.id did=image.id %}',
dataType:"json",
type:"POST",
data:{csrfmiddlewaretoken: csrftoken, an:anot},
success: function(data) {
data.datos.forEach(function(element){
an = JSON.parse(element.serial);
an.id = element.id;
$('.annotorious-annotationlayer').before('<div id="bar-id-' + an.id
+ '" class="citation-bar" data-original-title="<br>"></div>');
});
}
});
anno.reset();
myVar = setInterval(function(){ setAnnotation(); }, 150);
});
/* when the citation is updated this function calls a post to send the data
of the updated citation to a view for saving it
* in the database
*/
anno.addHandler('onAnnotationUpdated', function(annotation){
anot = JSON.stringify(annotation);
$.post( '{% url cit_image_update pid=project.id did=image.id %}', {
csrfmiddlewaretoken: csrftoken, 'an':anot});
});
/* when the citation is deleted this function calls a post to send the data
of the citation to be deleted to a view to
* delete it from the database
*/
anno.addHandler('onAnnotationRemoved', function(annotation){
anot = JSON.stringify(annotation);
$.post( '{% url cit_image_del pid=project.id did=image.id %}', {
csrfmiddlewaretoken: csrftoken, 'an':anot}, function(data){
var selector = '#bar-id-' + annotation.id;
$(selector).tooltip('hide');
habilitarBotones(selector);
$(selector).remove();
$('.citation-bar').each(function(element){
var sel = '#' + $(this).attr('id');
if ($(this).attr('id').split('bar-id-')[1] < annotation.id){
var top = parseInt($(sel).css('top').split('px')[0])-5;
var newtop = top.toString()+"px";
149
$(sel).css('top',newtop);
}
});
});
});
/////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////
/* the following functions are responsible for assigning, displaying and
deleting label codes for citations */
anno.addHandler('onMouseOverItem', function(annotation){
$('.annotorious-item').contextMenu(false);
while (typeof $('.context-menu-list')[1] != 'undefined'){
$('.context-menu-list')[1].remove()
}
});
anno.addHandler('onMouseOverAnnotation', function(annotation){
if (typeof annotation.C != 'undefined'){
cid = annotation.C.id;
$('.annotorious-item').contextMenu(true);
$.contextMenu({
selector: '.annotorious-item',
callback: function(key, options) {
// Empty global callback
},
items: {
"addCode": {
name: "{{ texts.add_code }}",
icon: "edit",
callback: function(key, options) {
cit = cid;
url = '{% url add_code_to_image_citation pid=project.id
cid='CIT_ID' %}'.replace('CIT_ID', cit);
$.getJSON(url, function(data) {
$('#codeModal').html(data.html);
$('#codeModal').modal('show');
});
},
},
"addAnnotation": {
name: "{{ texts.add_annotation }}",
icon: "paste",
callback: function(key, options) {
// Empty global callback
},
},
"viewCodes": {
name: "{{ texts.view_details }}",
icon: "copy",
callback: function(key, options) {
cit = cid;
url = '{% url image_citation_details pid=project.id
cid="CIT_ID" %}'.replace('CIT_ID', cit);
$.getJSON(url, function(data) {
$('#codeModal').html(data.html);
$('#codeModal').modal('show');
150
});
},
},
}
});
}
});
anno.addHandler('onMouseOutOfAnnotation', function(annotation){
$('.annotorious-item').contextMenu(false);
while (typeof $('.context-menu-list')[1] != 'undefined'){
$('.context-menu-list')[1].remove()
}
});
/* Modal on submit ** This function gets the JsonResponse after receiving
POST from code form */
$('#codeModal').on('submit', 'form', function() {
$.ajax({
type: $(this).attr('method'),
url: this.action,
data: $(this).serialize(),
context: this,
success: function(data, status) {
if (data.success) {
var selector = '#' + 'bar-id-' + data.cid;
barColor(data, selector);
$('#codeModal').modal('hide');
positionTooltips(selector);
}
else {
$('#codeModal').html(data.html);
}
}
});
return false;
});
/////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////
/* the following functions create the bar color for label codes */
function barOffset(){
$('.citation-bar').each(function(element){
var selector = '#' + $(this).attr('id');
var top = parseInt($(selector).css('top').split('px')[0])+5;
var newtop = top.toString()+"px";
$(selector).css('top',newtop);
});
}
function barPosition(data){
var selector = '#' + 'bar-id-' + data.id;
var width = Math.round(data.shapes[0].geometry.width *
$(".annotatable").width());
var top = Math.round(data.shapes[0].geometry.y *
$(".annotatable").height());
151
var left = Math.round(data.shapes[0].geometry.x *
$(".annotatable").width());
$(selector).attr('style', "position: relative; z-index:1; width:" +
width + "px; top:" + top + "px; left:" + left +"px;")
}
function barColor(data,selector){
$(selector).attr('class', "citation-bar cit-" + data.codes_color)
.attr('title', data.codes_str)
.attr('data-original-title', data.codes_str);
}
function positionTooltips (selector) {
$(selector).each(function( index ) {
// Display tooltips
if ($(this).attr('title') != undefined) {
var code_list = $(this).attr('title').split(", ");
} else {
var code_list = $(this).attr('data-original-
title').split("<br>");
}
$(this).tooltip({
html: true,
placement: 'right',
delay: 0,
animation: false,
trigger: 'manual'
});
$(this).attr('title', code_list.join('<br>'))
.tooltip('fixTitle').tooltip('show');
});
}
/////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////
/* the following functions enable and display the suggested coverage codes
and also enable the similar image button */
var myAnnotation = {
src : '/{{image.image.file.url}}',
text : '',
shapes : [{
type : 'rect',
geometry : { x : 0, y: 0, width : 0.5, height: 0.5}
}]
}
/* this function enables the list of suggested coverage codes and displays
citation on image
* when mouse is over list
*/
$(document).ready(function() {
$.get('{% url sugerencia pid=project.id did=image.id %}', function(data){
if (data.success){
d = ((data.codigos.replace('[[', '[')).replace(']]',
']')).split('\n');
var codigo=[];
152
d.forEach(function(element,index){codigo[index]=JSON.parse(($.trim(element)).
replace(new RegExp(" ", 'g'), ","));});
if (data.success){
$('#coberturas').show();
$('#similar').show();
var allAnnotations = [];
if (columnaCobertura(codigo, 0).length === 0)
$('#arbol').hide();
else {
var arbol = columnaCobertura(codigo,
0)[Math.floor(Math.random()*columnaCobertura(codigo, 0).length)];
$("#arbol").hover(function(){allAnnotations =
mouseOverRecommendation(allAnnotations, arbol, data, 1, 'cobertura de
árboles')},
function(){mouseOutOfRecommendation(allAnnotations, data)});}
if (columnaCobertura(codigo, 1).length === 0)
$('#cesped').hide();
else {
var cesped = columnaCobertura(codigo,
1)[Math.floor(Math.random()*columnaCobertura(codigo, 1).length)];
$("#cesped").hover(function(){allAnnotations =
mouseOverRecommendation(allAnnotations, cesped, data, 0.99, 'cobertura de
césped')},
function(){mouseOutOfRecommendation(allAnnotations, data)});}
if (columnaCobertura(codigo, 2).length === 0)
$('#suelo').hide();
else {
var suelo = columnaCobertura(codigo,
2)[Math.floor(Math.random()*columnaCobertura(codigo, 2).length)];
$("#suelo").hover(function(){allAnnotations =
mouseOverRecommendation(allAnnotations, suelo, data, 0.99*0.99, 'cobertura de
suelo descubierto')},
function(){mouseOutOfRecommendation(allAnnotations, data)});}
if (columnaCobertura(codigo, 3).length === 0)
$('#agua').hide();
else {
var agua = columnaCobertura(codigo,
3)[Math.floor(Math.random()*columnaCobertura(codigo, 3).length)];
$("#agua").hover(function(){allAnnotations =
mouseOverRecommendation(allAnnotations, agua, data, 0.99*0.99*0.99,
'cobertura de cuerpos de agua')},
function(){mouseOutOfRecommendation(allAnnotations, data)});}
}
}
}, "json");
/* this function shows window of codes from code button /*
$('.codes').click(function(ev) {
ev.preventDefault(); // prevent navigation
var url = $(this).data("url"); // get the form url
$.getJSON(url, function(data) { // load the url into the modal
$('#codesModal').html(data.html);
$("#codesModal").modal('show');
});
153
return false; // prevent the click propagation
});
/* this function shows window of citations from citation button /*
$('.citations').click(function(ev) {
ev.preventDefault(); // prevent navigation
var url = $(this).data("url"); // get the form url
$.getJSON(url, function(data) { // load the url into the modal
$('#citationsModal').html(data.html);
$("#citationsModal").modal('show');
});
return false; // prevent the click propagation
});
});
/* if mouse's selector is over coverage option, it shows coverage location
within the image and hide other citations */
function mouseOverRecommendation(allAnnotations, aleatorio, data, decre,
texto){
myAnnotation.shapes[0].geometry.x = (aleatorio%data.x)/data.x;
myAnnotation.shapes[0].geometry.y = Math.trunc(aleatorio/data.x)/data.y;
myAnnotation.shapes[0].geometry.height = (1/data.y)*decre;
myAnnotation.shapes[0].geometry.width = (1/data.x)*decre;
myAnnotation.text = texto;
allAnnotations = anno.getAnnotations();
anno.removeAll();
anno.addAnnotation(myAnnotation);
return allAnnotations;
}
/* if mouse's selector is out of coverage option, it hides coverage
location within the image and enable other citations */
function mouseOutOfRecommendation(allAnnotations, data){
anno.removeAnnotation(myAnnotation);
allAnnotations.forEach(function(annotation){anno.addAnnotation(annotation)});
}
/* line up coverages array into columns and return array of index where
coverage exists */
function columnaCobertura(codigo, i){
indiceCobertura =(codigo.map(function(value, index){return
value[i];})).reduce(
function(a,element,index){
if(element===1)
a.push(index);
return a;
}, []);
return indiceCobertura
}
/*hide coverage option from list if coverage code is already being used in
image*/
$('#coberturas').click(function(){
$('.citation-bar').each(function(index,element){
id = '#' + $(this).attr('id');
if($(id).attr('data-original-title') == $('#arbol').attr('data-name'))
$('#arbol').hide();
154
if($(id).attr('data-original-title') == $('#cesped').attr('data-name'))
$('#cesped').hide();
if($(id).attr('data-original-title') == $('#suelo').attr('data-name'))
$('#suelo').hide();
if($(id).attr('data-original-title') == $('#agua').attr('data-name'))
$('#agua').hide();
});
});
/*enable coverage option from list if coverage code is not being used in
image*/
function habilitarBotones(selector){
id = selector;
if($(id).attr('data-original-title') == $('#arbol').attr('data-name'))
$('#arbol').show();
if($(id).attr('data-original-title') == $('#cesped').attr('data-name'))
$('#cesped').show();
if($(id).attr('data-original-title') == $('#suelo').attr('data-name'))
$('#suelo').show();
if($(id).attr('data-original-title') == $('#agua').attr('data-name'))
$('#agua').show();
}
/* add citation and label coverage code after make click in the list
options */
var cid = 0;
$('.selector').click(function(){
selector = $(this).attr('id');
name = $(this).attr('data-name');
annotation = anno.getAnnotations()[0];
$.post('{% url cit_image_add pid=project.id did=image.id %}',
{csrfmiddlewaretoken: csrftoken, 'an': JSON.stringify(annotation)},
function(data) {
an = JSON.parse(data.datos[0].serial);
an.id = data.datos[0].id;
cid = data.datos[0].id;
$('.annotorious-annotationlayer').before('<div id="bar-id-' + an.id +
'" class="citation-bar" data-original-title></div>');
anno.addAnnotation(an);
barPosition(an);
barOffset();
$.post('{%url sugerencia pid=project.id did=image.id%}',
{csrfmiddlewaretoken: csrftoken, 'selector': selector, 'name': name, 'cid':
cid},
function(data){
var select = '#' + 'bar-id-' + data.cid;
barColor(data, select);
positionTooltips(select);
}, "json");
}, "json");
$(this).hide();
});
</script>
{% endblock %}
155
156
APÉNDICE O
class Clasificacion_rural(object):
# constructor de la clase
def __init__(self,nombre_imagen):
self.nombre_imagen=nombre_imagen
self.W1 = genfromtxt('pesos/Wyuv1.csv', delimiter=',') #carga la
primera capa de pesos de la red neuronal
self.W2 = genfromtxt('pesos/Wyuv2.csv', delimiter=',') #carga la
segunda capa de pesos de la red neuronal
self.W3 = genfromtxt('pesos/Wyuv3.csv', delimiter=',') #carga la
tercera capa de pesos de la red neuronal
# obtiene los histogramas de una imagen a partir de una matriz RGB
def clasificar(self):
self.obtener_histograma_yuv()
self.red_neuronal()
return self.Y
def obtener_histograma_RGB(self):
imagen_RGB = scipy.misc.imread(self.nombre_imagen)
rango = np.arange(257,dtype=float) # niveles de cada color 0 - 255
R , XX = np.histogram(imagen_RGB[:,:,0],rango) # histograma para el
color rojo
R = R.astype(float) # conversion de entero a coma flotante
R=R/max(R) # normalizacion de datos
G , XX = np.histogram(imagen_RGB[:,:,1],rango) # histograma para el
color verde
G=G.astype(float) # conversion de entero a coma flotante
G=G/max(G) # normalizacion de datos
B , XX = np.histogram(imagen_RGB[:,:,2],rango) # histograma para el
color azul
B=B.astype(float) # conversion de entero a coma flotante
B=B/max(B) # normalizacion de datos
histograma = np.concatenate((R,G),axis=0) # concatenamos histogramas
de rojo y verde
self.histograma = np.concatenate((histograma,B),axis=0).T #
concatenamos histograma azul con los dos anteriores
self.histograma=np.insert(self.histograma,len(self.histograma),1) #
extension para la red neuronal
def obtener_histograma_yuv(self):
imagen_RGB = scipy.misc.imread(self.nombre_imagen)
rango = np.arange(257,dtype=float) # niveles de cada color 0 - 255
imagen_RGB = imagen_RGB/255.0
Y =
0.299*imagen_RGB[:,:,0]+0.587*imagen_RGB[:,:,1]+0.114*imagen_RGB[:,:,2] #
obtencion de la luminancia
U = 0.493*(imagen_RGB[:,:,2]-Y) # obtencion de la crominancia U
V = 0.877*(imagen_RGB[:,:,0]-Y) # obtencion de la crominancia V
Y = (255*Y).astype(np.uint8) # mapeo de los valores al intervalo 0 -
255
Yh , XX = np.histogram(Y,rango) # obtencion del histograma de la
luminancia
157
Yh = Yh/float(max(Yh)) # normalizacion de datos
U = ((255*U/0.872)+127.5).astype(np.uint8) # mapeo de los valores al
intervalo 0 - 255
Uh , XX = np.histogram(U,rango) # obtencion del histograma de la
crominancia U
Uh = Uh/float(max(Uh)) # normalizacion de datos
V = ((255*V/1.23) + 127.5).astype(np.uint8) # mapeo de los valores al
intervalo 0 - 255
Vh , XX = np.histogram(V,rango) # obtencion del histograma de la
crominancia V
Vh = Vh/float(max(Vh)) # normalizacion de datos
histograma = np.concatenate((Yh,Uh),axis=0)
histograma = np.concatenate((histograma,Vh),axis=0)
self.histograma = np.insert(histograma,len(histograma),1)
# clasifica Una imagen a partir de un histograma RGB
def red_neuronal(self):
G= np.dot(self.histograma,self.W1)#paso por la capa 1
# print(G)
G1=1/(1+np.exp(-G))#funcion de activacion de la capa1
G1=np.insert(G1,len(G1),1)
G = np.dot(G1,self.W2)#paso por la capa 2
# print(G)
G2=1/(1+np.exp(-G))#funcion de activacion de la capa2
G2=np.insert(G2,len(G2),1)
G = np.dot(G2,self.W3)#paso por la capa 3
# print(G)
self.Y=1/(1+np.exp(-G))#funcion de activacion de la capa3
# print(self.Y)
if self.Y>= 0.0036:
self.Y=1
else:
self.Y=0
# print int(self.Y)#salida de la red neuronal
class Clasificacion_cobertura(object):
def __init__(self, nombre_imagen):
self.nombre_imagen = nombre_imagen
self.momentos = np.array([0,0,0,0,0,0,0,0,0,0])
self.imagen_RGB = scipy.misc.imread(self.nombre_imagen)
self.imagen_RGB = self.imagen_RGB.astype(float)
self.ancho,self.alto,XX=self.imagen_RGB.shape
self.W1 = genfromtxt('pesos/Wmc1.csv', delimiter=',') # carga la
primera capa de pesos de la red neuronal
self.W2 = genfromtxt('pesos/Wmc2.csv', delimiter=',') # carga la
segunda capa de pesos de la red neuronal
#self.W3 = genfromtxt('libreqda/pesos/W3.csv', delimiter=',') #carga
la tercera capa de pesos de la red neuronal
def clasificar(self):
158
self.obtener_momentos()
self.red_neuronal()
return self.Y
def obtener_momentos(self):
for tile in self.tiles:
img = np.array(tile.image)
ancho, alto, XX = img.shape
P= float(ancho*alto)
# Media: primer momento de color
Er = (np.sum(img[:,:,0]))/P # media de la banda roja de la imagen
Eg = (np.sum(img[:,:,1]))/P # media de la banda verde de la
imagen
Eb = (np.sum(img[:,:,2]))/P # media de la banda azul de la imagen
E = {'red':Er,'green':Eg,'blue':Eb}
# Desviacion standar: segundo momento de color
Dr = (np.sum((np.around(img[:,:,0]-
Er).astype(np.uint8)**2.0).astype(np.uint8))/P)**(1.0/2.0) # Desviacion
standar para la banda roja
Dg = (np.sum((np.around(img[:,:,1]-
Eg).astype(np.uint8)**2.0).astype(np.uint8))/P)**(1.0/2.0) # Desviacion
standar para la banda verde
Db = (np.sum((np.around(img[:,:,2]-
Eb).astype(np.uint8)**2.0).astype(np.uint8))/P)**(1.0/2.0) # Desviacion
standar para la banda azul
D = {'red':Dr,'green':Dg,'blue':Db}
# Simetria : tercer momento de color
Skr = (np.sum((np.around(img[:,:,0]-
Er).astype(np.uint8)**3.0).astype(np.uint8))/P)**(1.0/3.0) # Simetria para la
banda roja
Skg = (np.sum((np.around(img[:,:,1]-
Eg).astype(np.uint8)**3.0).astype(np.uint8))/P)**(1.0/3.0) # Simetria para la
banda verde
Skb = (np.sum((np.around(img[:,:,2]-
Eb).astype(np.uint8)**3.0).astype(np.uint8))/P)**(1.0/3.0) # Simetria para la
banda azul
Sk = {'red':Skr,'green':Skg,'blue':Skb}
momento =
(np.array([E["red"],D["red"],Sk["red"],E["green"],D["green"],Sk["green"],E["b
lue"],D["blue"],Sk["blue"],1])).T
self.momentos = np.vstack([self.momentos,momento])
self.momentos = np.delete(self.momentos,0,0)
def obtener_histograma(self):
# imagen_RGB = scipy.misc.imread(self.nombre_imagen)
rango = np.arange(257,dtype=float) # niveles de cada color 0 - 255
R , XX = np.histogram(self.imagen_RGB[:,:,0],rango) # histograma para
el color rojo
R = R.astype(float) # conversion de entero a coma flotante
R=R/max(R) # normalizacion de datos
G , XX = np.histogram(self.imagen_RGB[:,:,1],rango) # histograma para
el color verde
G=G.astype(float) # conversion de entero a coma flotante
G=G/max(G) # normalizacion de datos
159
B , XX = np.histogram(self.imagen_RGB[:,:,2],rango) # histograma para
el color azul
B=B.astype(float) # conversion de entero a coma flotante
B=B/max(B) # normalizacion de datos
histograma = np.concatenate((R,G),axis=0) # concatenamos histogramas
de rojo y verde
histograma = np.concatenate((histograma,B),axis=0).T # concatenamos
histograma azul con los dos anteriores
self.histograma=np.insert(histograma,len(histograma),1) # extension
para la red neuronal
def dividir_imagen(self):
parx = math.ceil(self.ancho/128.0)
pary = math.ceil(self.alto/128.0)
partes = parx*pary# numero de partes en los que se dividira la imagen
#print(parx)
#print(pary)
#print(partes)
self.tiles = image_slicer.slice(self.nombre_imagen, partes,
save=False)
self.parx = parx
self.pary = pary
def red_neuronal(self):
G= np.dot(self.momentos,self.W1)#paso por la capa 1
G1=1/(1+np.exp(-G))#funcion de activacion de la capa1
xx, yy = G1.shape
G1 = (np.vstack([G1.T, np.ones(xx)])).T
G = np.dot(G1,self.W2)#paso por la capa 2
Y=1/(1+np.exp(-G))#funcion de activacion de la capa3
#umbrales de calsificacion
#arboles 0.6655
#cesped 0.3936
#suelo descubierto 0.5175
#cuerpos de agua 0.4249
self.Y = Y
return self.Y