You are on page 1of 73

INSTITUTO POLITÉCNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERÍA
MECÁNICA Y ELÉCTRICA
UNIDAD PROFESIONAL “ADOLFO LÓPEZ MATEOS”

INGENIERÍA EN COMUNICACIONES Y ELECTRÓNICA

“COMPUTO INTELIGENTE PARA LA IDENTIFICACIÓN
DE PERSONAS MEDIANTE TATUAJES”

TRABAJO TERMINAL

QUE PARA OBTENER EL TITULO DE:
INGENIERÍA EN COMUNICACIONES Y ELECTRÓNICA

PRESENTAN:
C. JOSÉ ANTONIO HERNÁNDEZ CAMACHO
C. ALAN MAURICIO LEÓN MENDOZA

DIRECTORES DE TESIS:
DRA. MARÍA ELENA ACEVEDO MOSQUEDA
M. EN C. ARMANDO MARTÍNEZ RÍOS

CIUDAD DE MÉXICO, DICIEMBRE 2017

Índice

Capítulo 1. Introducción ............................................................................................................. 9
1.1 Planteamiento del problema .............................................................................................. 10
1.2 Justificación ........................................................................................................................ 10
1.3 Objetivos............................................................................................................................. 14
1.4 Alcance del proyecto .......................................................................................................... 14
Capítulo 2. Estado del arte ....................................................................................................... 16
2.1 Los tatuajes desde un enfoque criminológico .................................................................... 17
2.2 Algoritmos de reconocimiento ........................................................................................... 17
2.3 Algoritmos de reconocimiento de tatuajes ........................................................................ 19
2.4 Tatt-C .................................................................................................................................. 20
2.4.1 Metodología .................................................................................................................... 20
2.4.2 Conjunto de datos ........................................................................................................... 22
2.4.3 Resultados del programa Tatt-C ...................................................................................... 23
2.4.3.1 Identificación de tatuajes ............................................................................................. 23
2.4.3.2 Región de interés .......................................................................................................... 24
2.4.3.3 Similitud de tatuajes ..................................................................................................... 26
2.4.3.4 Detección de tatuaje .................................................................................................... 27
2.5 Tatt-E .................................................................................................................................. 28
2.5.1 Progreso del programa Tatt-E ......................................................................................... 28
2.6 Tatto-ID ............................................................................................................................... 29
2.6.1 Descripción del sistema Tatto-ID ..................................................................................... 29
2.6.2 Procesamiento de las imágenes ...................................................................................... 29
2.6.3 Relacionado de las imágenes........................................................................................... 30
2.6.4 Resultados experimentales ............................................................................................. 30
2.6.4.1 Experimento 1 del sistema ........................................................................................... 31
2.6.4.1 Experimento 2 del sistema .......................................................................................... 31
2.6.4.3 Experimento 3 del sistema ........................................................................................... 32
2.7 Memorias Asociativas en la agricultura: un caso práctico ................................................. 33
Capítulo 3. Marco Teórico ......................................................................................................... 34
3.1 Memorias Asociativas ......................................................................................................... 35
3.1.1 Fundamentos Teóricos .................................................................................................... 35
3.1.2 Tipos de memorias asociativas ........................................................................................ 37
3.2 Transformada SURF (Speeded-Up Robust Features).......................................................... 39
3.2.1 Detector "Fast-Hessian" .................................................................................................. 39
3.2.2 Descriptor SURF ............................................................................................................... 41
3.3 EmguCV............................................................................................................................... 42
3.3.1 Clases de EmguCV............................................................................................................ 44
3.3.2 Característias para la plataforma Windows .................................................................... 44
3.3.3 Ventajas de EmguCV........................................................................................................ 45
3.4 Lenguaje C# y .NET Framework ......................................................................................... 46
3.4.1 Lenguaje C# ..................................................................................................................... 46
3.4.2 Arquitectura de la plataforma .NET Framework ............................................................. 46
Capítulo 4. Desarrollo y construcción....................................................................................... 48
4.1 Instalación de EmguCV ....................................................................................................... 49
4.1.1 Prueba de funcionamiento de EmguCV........................................................................... 49
4.2 Configuración de EmguCV en Visual Studio 2017 .............................................................. 49

2

4.3 Obtención de los puntos de interés ................................................................................... 51
4.3.1 Almacenamiento de los puntos de interés ...................................................................... 51
4.4 Generación de los patrones de entrada y salida para las imágenes procesadas ............... 52
4.4.1Generación de los patrones de entrada ........................................................................... 52
4.4.2 Generación de los patrones de salida ............................................................................. 53
4.5 Generación de las memorias asociativas (Máxima y Mínima) ........................................... 53
4.6 Fase de recuperación del algoritmo ................................................................................... 54
4.7 Estructura de la interfaz gráfica ......................................................................................... 56
Capitulo 5 Pruebas y Resultados .............................................................................................. 58
5.1 Conclusiones ....................................................................................................................... 59
5.2 Recomendaciones............................................................................................................... 59
5.3 Conocimientos adquiridos .................................................................................................. 60
5.4 Experiencias ........................................................................................................................ 60
5.5 Pruebas y resultados .......................................................................................................... 61
Anexos ...................................................................................................................................... 63
Fuentes Documentales ............................................................................................................. 64
Anexo II: Código ....................................................................................................................... 65

3

....................... Figura 2.......... 40 Figura 3................. 36 Figura 3. 23 Figura 2........................................9: Imagen de tatuaje de pez tomada en siete condiciones diferentes ..........3: Puntos de interés detectados en un campo de flores .............................. 50 Figura 4.......................8:Resultados gráficos del experimento 1 ......... 49 Figura 4... 43 Figura 3.. 27 Figura 2.........................5: Puntajes de confidencialidad para la categoría de detección de tatuaje ................. 42 Figura 3............................................................................3: Resultados para la categoría de región de interés ........................................5:Representación de los vectores usados para las memorias asociativas ................................11: Curva de relación acumulativa del experimento 3 ............................................. 26 Figura 2........................... Índice de figuras............6:Número de asociaciones exitosas que realizó cada memoria.... 56 Figura 5................................................. 51 Figura 4............................... 31 Figura 2...........................................4:Puntos de interés dibujados sobre el tatuaje ........................ 41 Figura 3....................... 55 Figura 4......2: Resultados para la categoría de identificacion de tatuajes ............10: Curva de relación acumulativa del experimento 2 ................................ 47 Figura 4.....2: Aproximaciones de la derivada Gaussiana de segundo orden..........NET Framwork ..7: Transformaciones aplicadas a una imagen de tatuaje .... 25 Figura 2.......... 31 Figura 2...5: Diagrama de clases de EmguCV ..6: Arquitectura del funcionamiento de .. 54 Figura 4..................... 61 4 ......................7:Formulario utilizado para ejecutar el algoritmo de reconocimiento ...............................................2: Configuración de archivos de EmguCV ............................1:Resultados de identificación del algoritmos con 3 tatuajes diferentes ........ 30 Figura 2........................ 52 Figura 4..................6: Imágenes originales e imágenes segmentadas por el sistema Tatto-ID ...1: Ejemplo SURFFeatures compilado correctamente ........1: Ejemplos representativos de las imágenes utilizadas en el programa Tatt-C...........4: Resultados para la categoria de similitud de tatuajes .. 29 Figura 2..... ............. 32 Figura 2............4: Esquema general de una memoria asociativa .................................... 32 Figura 3............3: Vector descriptor con los atributos de los puntos de interés obtenidos .......... 24 Figura 2.....1: Esquema general de una memoria asociativa ..........

............................... Índice de tablas Tabla 2....1:Característica de EmguCV ........... 25 Tabla 2...................1: Resultados de recuperación par las memorias asociativas ...............................................................3: Áreas de interés de los algoritmos participantes........................................ 21 Tabla 2......... 27 Tabla 3....... 45 Tabla 5................. 27 Tabla 2........................................................................... 22 Tabla 2....6: Estadísticas acumulativas para la categoría de región de interés ............. ............ 24 Tabla 2......................2: Participantes del programa Tatt-C ..... 18 Tabla 2.....................................4: Resumen del conjunto de datos de Tatt-C ...............8: Estadísticas de la precisión de detección ................7: Estadísticas acumulativas para la categoría de similitud de tatuajes ..............................1: Reporte de efectividad de diferentes métodos de reconocimiento facial en 3D ......5: Estadísticas acumulativas para la categoría de identificación de tatuaje . 21 Tabla 2..... 61 5 ......

Todos estos conceptos se retoman para poder diseñar un algoritmo capaz de identificar a personas mediante sus tatuajes de manera eficaz Para tener una mejor predicción y control sobre el funcionamiento del algoritmo se realizaron pruebas de funcionamiento con un banco de imágenes que contiene 100 imágenes de tatuajes previamente recortadas para poder tener la mayor cantidad de tatuaje que se pueda en la imagen y así facilitar al algoritmo la detección y extracción de puntos de interés. en nuestro caso presentarle la imagen sin modificar y la imagen rotada ciertos grados para verificar que estas variaciones no afectan a su funcionamiento. las cuales tienen aplicación en el almacenamiento y recuperación de información por asociación con otras informaciones a partir del conocimiento parcial de la información original. pruebas de ADN entre otros. con los cuales se realizará un entrenamiento al algoritmo para después poder presentar una imagen de la cual se quiere recuperar su patrón e identificar al sujeto al que pertenece dicho tatuaje. el desarrollo de la presente investigación busca aplicar las bases de programación en conjunto con las memorias asociativas morfológicas. Resumen El presente trabajo retoma la problemática que se presenta al querer identificar a sujetos que cometieron un crimen y que no se logra identificarlos mediante rasgos físicos como son: el iris. 6 . Se pretende que dicho algoritmo establezca los principios de las memorias asociativas morfológicas para su utilización e implementación a la hora de presentarles patrones de entrada provenientes de las imágenes de tatuajes. pero se tiene una imagen del tatuaje del sujeto. huellas dactilares. Por esta razón. Estas pruebas consisten en presentar todas las imágenes al algoritmo de diferente manera. esto bastará para poder identificarlo cuando el sujeto se encuentre en una base de datos la cual tenga una foto de su rostro y su tatuaje o tatuajes asociados.

All these concepts are retaken in order to design an algorithm capable of identifying people through their tattoos effectively. in our case presenting the image without modifying it and the image rotated certain degrees to verify that these variations do not affect its operation It is intended that said algorithm establishes the principles of morphological associative memories for its use and implementation when presenting them with input patterns from the tattoo images. 7 . These tests consist in presenting all the images to the algorithm in a different way. the development of this research seeks to apply the bases of programming in conjunction with morphological associative memories. DNA tests among others. which have application in the storage and retrieval of information by association with other information from the partial knowledge of the original information. fingerprints. performance tests were performed with a bank of images containing 100 images of previously cut tattoos in order to have as much tattoo as possible in the image and thus facilitate the algorithm detection and extraction of points of interest. this will be enough to identify him when the subject is in a database which has a photo of his face and his tattoo or associated tattoos. In order to have a better prediction and control over the operation of the algorithm. but if you have a tattoo image of the subject. Abstract The present work takes up the problem that arises when wanting to identify subjects that committed a crime and that cannot be identified by physical features such as: the iris. with which an algorithm training will be carried out in order to present an image of the which one wants to recover its pattern and identify the subject to whom the tattoo belongs. For this reason.

Matriz: Es un arreglo bidimensional de números compuesta por filas y columnas.NET OpenCV: Es una biblioteca libre de visión artificial capaz de implementar funciones para sistemas de seguridad. Byte: Es la unidad de información de base utilizada en computación y telecomunicaciones. Memoria Asociativa: Es un dispositivo electrónico o computacional que permite asociar patrones de entrada con patrones de salida. detección de movimiento hasta control de procesos en los que se requiera reconocimiento de objetos. cuya sintaxis básica se deriva de C y C++. Glosario EmguCV: Es una dependencia que bibliotecas de procesamiento de imágenes de OpenCV para poder ser implementadas en lenguajes de estructura . capaz de obtener una representación visual de una imagen y extraer información específica y detallada del contenido. SURF: Es un algoritmo de visión por computadora. Patrón: Valores numéricos que se relacionan entre si y pertenecen a un mismo conjunto. Algoritmo: Secuencia de instrucciones que representan un modelo de solución para determinado tipo de problemas. 8 . Pixel: Es la menor unidad en color que forma parte de una imagen digitalizada. C#: Es un lenguaje de programación orientado a objetos desarrollado por Microsoft. y que resulta equivalente a un conjunto ordenado de bits.

CAPÍTULO 1 Introducción. En este capítulo se presentarán las bases que sustentan el presente trabajo. 9 . así como la problemática que existe en la actualidad con la identificación de individuos mediante rasgos físicos y como los tatuajes son una alternativa de identificación de sospechosos en el área forense.

baja calidad de imagen en el reconocimiento del iris en una persona. mediante el reconocimiento de rasgos físicos únicos en esa persona. Otra referencia de la estadística de los tatuajes es Lycos. Por otro lado. en los años 2003. enfermedades en los ojos. en donde según la revista LIFE el 6% de la población en 1936 tenía por lo menos un tatuaje. requieren una imagen de la persona a la que se quiere identificar en una posición estática. 14 y 21% respectivamente.1 Planteamiento del problema Actualmente. que entorpece este proceso de reconocimiento.1. ejemplos de estos factores son quemaduras en la piel en las manos.2 Justificación Es un hecho importante que los tatuajes han tomado importancia debido a que el índice de personas que deciden tatuarse en la actualidad ha crecido de manera determinante. Lycos de esta manera realizó una lista de los cincuenta términos más buscados en la web y encontró que en el año de 1999 “tatuajes” fue el onceavo término más buscado en dicho año. 2008 y 2012 el porcentaje de personas que tenía al menos un tatuaje crecía a un 16. la utilidad de algunos métodos para esta tarea es insuficiente. estableció que. que presenta dificultades ante variaciones en las condiciones de posición o iluminación durante la etapa de captura. Prueba de ello se presentan en las estadísticas. lo cual reduce la utilidad de estos procesos. en el año 10 . entre otros. que modifican la estructura genética de la imagen a reconocer. el sistema de reconocimiento facial. asociación de investigación de mercado encargada de realizar encuestas de opinión pública. en el área forense existen métodos para la identificación de personas implicadas en un atentado. puesto que existen factores que alteran sus resultados. 1. Harris Polls. que imposibilitan el reconocimiento de las huellas dactilares. Es importante destacar que además de ser procesos meticulosos. un portal web con buscador integrado que logró capturar estadísticas de los términos más buscados en Internet en los pasados años. puesto que la mayoría de las ocasiones no se contará con el sujeto a identificar si es sospechoso de algún delito. Sin embargo.

tomando una destacada popularidad en la sociedad actual. Este hecho es importante para puntuar que la implementación del software capaz de identificar a una persona basándose en su tatuaje es entonces pertinente ya que su uso puede volverse cada vez más necesario conforme pase el tiempo. Objetivos particulares: • Seleccionar de un banco de imágenes aquellas que cumplan las condiciones para su procesamiento con la transformada SURF y las memorias asociativas morfológicas. 11 . Es posible determinar de esta manera que la tendencia que tienen las personas de decidir portar un tatuaje crece a medida que van pasando los años. • Obtener los puntos de interés en las imágenes a analizar mediante la transformada SURF. • Implementar un sistema de clasificación de tatuajes con base en matrices descriptoras obtenidas mediante la transformada SURF para generar asociaciones con la técnica de memorias asociativas morfológicas. 1.2000 fue el séptimo término.3 Objetivos Objetivo general: Realizar el reconocimiento de personas a través de sus tatuajes mediante herramientas de cómputo inteligente para extraer puntos de interés de las imágenes que permitan la identificación de personas asociadas a su tatuaje.4 Alcance del proyecto En este apartado se pretende determinar lo que haga y que no haga el algoritmo de reconocimiento de las personas a través de sus tatuajes. en el 2001 obtuvo el tercer lugar dentro de la lista de búsquedas más populares. y en el 2002 alcanzó el mejor posicionamiento obteniendo el segundo lugar de popularidad de búsqueda. 1.

el sistema no realiza pruebas de selección para verificar si una imagen cumple las condiciones para pertenecer al banco de imágenes. y si posteriormente se quiere agregar una imagen al banco. En cuanto al modo de operar del software. es decir. tales como los casos de individuos que ya hayan cometido previamente un delito y se tenga registro de ellos. la etapa de captura de las imágenes debió haberse realizado previamente y ser añadidas al banco de imágenes a utilizar. Por tal razón se espera que en la fase de captura las imágenes tengan una calidad adecuada para poder ser agregadas al banco de imágenes a utilizar. éste se limita a realizar la ejecución del algoritmo de obtener los puntos de interés de cada imagen y generar un patrón de entrada por cada imagen recibida. 12 . personas que por alguna razón hayan tenido mérito para pertenecer al banco de imágenes del algoritmo. este proceso deberá seguir realizándose de manera manual. para poder posteriormente recuperar la respectiva salida cuando se vuelva a ingresar como patrón de entrada alguna imagen de algún tatuaje. o el caso de que se quiera reconocer a alguna persona en caso de un deceso. para confirmar que cada imagen tuviera más de cincuenta puntos de interés.En primer lugar. por lo que dicho proceso se realizó de manera manual utilizando la transformada SURF. éste solo es capaz de trabajar con imágenes que contengan un mínimo de cincuenta puntos de interés detectados por la transformada SURF. el algoritmo va dirigido solamente a las personas de las cuales ya se tenga una captura de uno de sus tatuajes. Con respecto a la selección de las imágenes de tatuajes. es decir. Además de que el software no es un sistema en tiempo real. debido a que cada patrón de entrada que se le presenta a la memoria asociativa contiene cincuenta elementos (con un valor de cero al 255). En cuanto al desarrollo del software. estos elementos son obtenidos tomando el valor en byte de cada punto de interés detectado.

En este capítulo se hablará del marco contextual del trabajo y se incluirán antecedentes históricos de los tatuajes. CAPÍTULO 2 Estado del arte. 13 . la importancia del tatuaje visto con un enfoque criminalístico. así como otros trabajos que hayan utilizado distintos algoritmos de identificación de rasgos físicos lo cual nos permitirá tener un acercamiento a las herramientas a utilizar y un mejor panorama de lo que ya existe relacionado al tema central del presente trabajo.

rotaciones y transformaciones de escala en el dominio de la imagen y robusto a moderadas transformaciones de perspectiva y variaciones de iluminación. el descriptor SIFT ha probado ser muy útil en la práctica najo condiciones reales en el relacionado de imágenes y en el reconocimiento de objetos. En Chile. este doctor separó a aquellos reclusos según la gravedad de sus actos para poder realizar estudios más profundos sobre la historia de sus tatuajes. él los clasificó de la siguiente manera: homicidas. los que cometieron lesiones y los ladrones. al mando de este departamento se encontraba el médico militar Francisco Martínez Vaca. Este estudio fue enfocado a las causas de porque una persona se realiza un tatuaje y el mensaje que este quiere dar al mostrarlo. y México en 2004 se aprobaron normas que prohíben tatuar a menores de 18 años que no cuenten con el consentimiento de sus padres. Por otro lado. Uruguay. El descriptor SIFT es invariante a traslaciones. Este descriptor de imágenes es usado para diversos propósitos en la visión por computadora relacionados con el pareo de puntos entre diferentes vistas en una escena 3-D y en el reconocimiento de objetos basado en la vista. Experimentalmente.2 Algoritmo de extracción de características SIFT La transformación de características invariante en escala (SIFT) es un descriptor de imagen para el relacionado y reconocimiento basado en imágenes desarrollado por David Lowe en el 2004. El tatuaje se puede dividir en tatuajes de modas socioculturales y tatuajes de motivo de expresión delictiva. 14 .2.1 Los tatuajes desde un enfoque criminológico. El tatuaje es un fenómeno que se ha manifestado frecuentemente no sólo en las calles de México sino de todo el mundo y su diferente uso objeto de expresión varía con cada persona y desde que se crearon han formado gran parte de la cultura de la humanidad. Los presos fueron de los primeros grupos en usar el tatuaje para diferenciarse socialmente del resto de las personas. en las cárceles en el momento en que un recluso se realiza un tatuaje se desprende todo un universo de posibilidades de lo que ese tatuaje quiere dar a significar desde el punto de vista del recluso en cuestión. En 1891 se creó el departamento de antropología forense en la penitenciaria de Puebla. 2. muchas veces con afán de dar una señal de rebeldía o para identificarse a su pandilla dentro de la misma cárcel. es un error creer que el tatuaje se presenta sólo en gente socialmente marginada ya que se da en personas de todas clases sociales incluso en la alta sociedad. en 1899 este médico realiza un estudio sobre los Tatuajes en criminales y militares.

EN él.1 Representación de la pirámide Gaussiana obtenida a través de la diferencia de Gaussianos. La diferencia de Gaussianos es obtenida como la diferencia del difuminado Gaussiano de una imagen con dos diferentes escalas. 2. 3) Asignación de orientación.y) a una escala 𝜎. De esta forma. Para esto. el algoritmo SIFT utiliza diferencias de Gaussianos que es una aproximación del LoG.1 Figura 2. bajo estas condiciones se deben utilizar diferentes tamaños de ventana. 2) Localización de los puntos de interés. el Laplaciano del Gaussiano(LoG) es encontrado en la imagen con distintos valores de la escala 𝜎. Este proceso es realizado a diferentes octavas de la imagen en una pirámide Gaussiana. no se puede utilizar la misma ventana para detectar los puntos de interés con diferentes escalas. siendo estas 𝜎 y 𝑘𝜎 .2. con la intensión de que este descriptor debiera ser usado para relacionar los correspondientes puntos de interés en diferentes imágenes. Pero puesto que el Log resulta ser un poco costoso computacionalmente hablando. La transformada SIFT se basa en cuatro principales pasos: 1) Detección extrema de espacio-escala.escala Dada una imagen.1 Detección extrema de espacio. el descriptor SIFT comprometió un método para detectar los puntos de interés de una imagen a escala de grises en donde las estadísticas de las direcciones locales del gradiente de las intensidades de la imagen fueron acumuladas para dar una descripción resumida de las estructuras locales de la imagen en un vecindario local alrededor de cada punto de interés. En resumen la variable 𝜎 actúa como un parámetro de escalamiento. el filtrado escala-espacio es usado.𝜎) que significa que hay un potencial punto de interés en (x. se puede encontrar el máximo local a través de la escala y espacio que proporciona una lista de valores (x. 4) Creación del descriptor.y. 15 .Originalmente. como se puede observar en la figura 2.

tienen que ser refinados para conseguir resultados más precisos. así que los bordes también necesitan ser removidos. un pixel en una imagen puede ser comparado con sus ocho vecinos de la misma forma que con nueve puntos pertenecientes a la siguiente escala y nueve pixeles en escalas previas. Si es un local extremo. llamado límite de borde. Para esto. La diferencia de Gaussianos tiene una mayor respuesta a los bordes. es rechazado.Una vez que la diferencia de Gaussianos ha sido obtenida.2. las imágenes son buscadas por un extremo local sobre escala y espacio. es un punto de interés potencial. este valor es igual a 10 en el algoritmo. y la magnitud del gradiente y su 16 . Así que de esta forma se eliminan puntos con bajo contraste y puntos borde y lo que permanece es un fuerte punto de interés.2. Un vecindario es tomado alrededor del punto de interés dependiendo de la escala. se usó una matriz Hessiana de dimensión 2x2 para computarizar las principales curvaturas. Figura 2. Para esto se usaron las expansiones de las series de Taylor de escala-espacio para conseguir una precisa localización de extremos. Si el radio es mayor al límite. significando que ese punto es mejor representado en esa escala. un concepto similar al detector de esquina de Harris es usado.2 Representación de la comparación de un pixel en una imagen con sus vecinos a diferentes escalas. Por ejemplo. Con este fin.2.2 Localización de los puntos de interés Una vez que las localizaciones de los puntos de interés fueron obtenidos. y si la intensidad en ese extremo es menor que el valor límite (0.3 Asignación de orientación Ahora una orientación es asignada a cada punto de interés para lograr una invariancia a las rotaciones de la imagen. como se puede observar en la figura 2. el punto de interés es descartado.03 según el algoritmo). 2. 2.

y luego es dividido en 16 sub- bloques de tamaño 4x4. 𝐺𝑥 (𝑦. etc. La apariencia y aspecto local de un objeto puede ser descrita por la distribución local de las intensidades locales de los gradientes o las direcciones de los bordes. Un histograma de orientación con 36 contenedores cubriendo 360 grados es creado. los colores deben de ser normalizados. se toman varias medidas para lograr robustez en contra de los cambios de iluminación. 𝑥 + 1) − 𝑌(𝑦. EL descriptor HOG ha sido ampliamente utilizado para detectar objetos tales como rostros y cuerpos humanos. 𝑥) = 𝑌(𝑦 + 1. 𝑥) es el gradiente horizontal. pero diferentes direcciones. 2. 𝑥 − 1). Un vecindario de 16x16 alrededor del punto de interés es tomado. 𝑥) − 𝑌(𝑦 − 1.3 Descriptor de características HOG El descriptor HOG (Histogram of Oriented Gradients) es un descriptor de características extensamente empleado para caracterizar objetos a través de sus formas. De esta manera se crean puntos de interés con la misma localización y escala.4 Creación del descriptor En este paso es creado un descriptor de los puntos de interés. Para cada pixel dentro de una celda los gradientes verticales y horizontales son obtenidos. 2.1 Metodología del descriptor HOG El primer paso en el detector HOG es dividir la imagen fuente en bloques. Esto contribuye al relacionado de las imágenes. El método más simple para hacer esto es usar un operador Sobel vertical y horizontal de una dimensión: 𝐺𝑥 (𝑦. 2. Usualmente los bloques se traslapan el uno al otro. La búsqueda de objetos está basada en una técnica de detección aplicada para las pequeñas imágenes definidas por la ventana detectora deslizante que sondea región por región de la imagen original de entrada y sus versiones escaladas. y 𝐺𝑦 (𝑦. En adición a esto. un histograma de orientación de 8 bits es creado.1) Donde Y(y. El mayor pico en el histograma es tomado y todos los picos arriba del 80 % de él son considerados para calcular la orientación. 𝑥) es el gradiente vertical. Cada bloque es dividido en regiones pequeñas llamadas celdas.3. 𝑥) = 𝑌(𝑦. 𝑥) (2.x) es la intensidad del pixel en las coordenadas x y y. La magnitud y fase del gradiente está determinado como: 17 . Así que un total de 128 bits se encuentran disponibles para este uso. Para cada sub-bloque. rotación.2.dirección son calculadas en esa región. Para incrementar la eficiencia de la búsqueda de objetos. 𝐺𝑦 (𝑦. así que la misma celda puede estar en varios bloques.

Este descriptor consiste en todos los histogramas de celda para cada bloque en la ventana detectora. 𝑥)2 + 𝐺𝑦 (𝑦. 𝑥)2 . 𝑦) = 𝑎𝑟𝑐𝑡𝑎𝑛 𝐺 (2.3) |𝑣|1 +𝛿 √|𝑣|22 +𝛿 2 Un descriptor es después asignado a cada ventana detectora. Las normas utilizadas son las siguientes: 𝑣 𝑣 𝐿1 = .2) 𝑥 (𝑥. mientras en el resto se muestra una deficiencia al coincidir con menos del 10% de las pruebas como se aprecia en la tabla 2. 𝜃(𝑥.𝑦) Puesto que las imágenes pueden tener diferentes contrastes. 𝑦) = √𝐺𝑥 (𝑦. 𝐿2 = (2. 2. 𝐺𝑦 (𝑥. en la tabla se puede observar que en casi todas las instancias los resultados de las pruebas de reconocimiento se logró una eficiencia de más del 95%. 18 .𝑦) 𝐺(𝑥.1.4 Algoritmos de reconocimiento. La normalización es hecha en el vector del histograma v dentro de un bloque. la normalización del contraste se convierte en un proceso útil. El descriptor de la ventana detectora es usada como información para el reconocimiento de objetos. A través de los años se han implementado diversos algoritmos de reconocimiento de personas mediante imágenes de rasgos físicos.

Autor.2003 30 360 3000 Hausdorff y 3-5% puntos PCA 19 . Medioni.1 Reporte de efectividad de la utilización de diferentes métodos de reconocimiento facial en 3D.1989 5 18 No Distancia 100% disponible mínima Lee.1997 24 240 75x150 PCA.1992 26 26 No Vector más 100% disponible cercano Nagamine.2003 60 420 2200 puntos Vector más 78% cercano.2000 6 24 No Firma de 100% disponible puntos Hesher.2003 100 700 No ICP 98% disponible Moreno. 1990 6 6 256x150 Correlación Ninguno Gordon. en 3D.2000 24 240 75x150 Distancia de 100% Hausdorff Chua. rendimiento.HMM 100% Tamaka. Personas Imágenes Tamaño Algoritmo de Reporte de en el en el de la relacionado.1992 16 160 256x240 Vector más 100% cercano Achermann. Pan.2003 35 70 320x320 Vector más 94% cercano. año. de datos de datos. Cartoux.1998 37 37 256x256 Correlación 100% Achermann.2003 37 222 242x347 PCA 97% Lee. conjunto conjunto imagen.Tabla 2.

el NIST también se plantea varias interrogantes durante el desarrollo de su tecnología. el problema surge cuando la Fundación para la Exhibición de la Fotografía notifica que estos experimentos explotan a los reclusos. prestando poca atención a su vida privada y a las implicaciones que esto puede conllevar. como antes se mencionaba por los mensajes que los reclusos quieren dar a la sociedad al tatuarse los cuales muchas veces son ocultos ya que estos pueden revelar información vital sobre quiénes somos. organizaciones como el FBI experimentaron con tatuajes de reclusos y los datos recolectados fueron entregados a terceros sin tomar en cuenta la privacidad de éstos. Esto es el por qué la policía busca arduamente esta información ya que es de aquí donde puede encontrar la clave para descifrar el simbolismo de los tatuajes. Sin embargo. como por ejemplo si pertenecía a la misma pandilla o si habían estado relacionados en algún crimen de manera colectiva. 20 . Los planes del FBI para el reconocimiento con este software van más allá de aquello para lo que estos algoritmos fueron diseñados realmente lo cual es sólo identificar a sujetos implicados en crímenes a base de sus tatuajes. La cuestión aquí es ¿Por qué una organización como el FBI realiza tal acción? Esto es. Al mismo tiempo.5 Algoritmos de reconocimiento de tatuajes. creencias religiosas. nuestras pasiones. imágenes anexadas con caras de los reclusos y fechas de nacimiento.000 imágenes de personas tatuadas y estos contenían información personal adicional como nombres. orígenes de nuestros actos e incluso nuestras relaciones sociales. ideologías. a su misma vez puede generar problemáticas. ya que esto puede tomar mucho tiempo en salir a luz.2. en este caso utilizando algoritmos informáticos en vez de analizar psicológicamente al sujeto en cuestión. En el 2016 los científicos del gobierno estaban trabajando junto al FBI para desarrollar esta tecnología de reconocimiento de tatuajes para que así la policía pueda utilizarla para obtener tanta información como se pueda de personas implicadas en crímenes a través de sus tatuajes. sobre todo en la vida privada de los involucrados ya que la información mencionada anteriormente la cual fue entregada a terceros contenía más de 15. en el proceso de desarrollo de este software. cosa que un algoritmo automatizado puede realizar en un menor tiempo y de manera más efectiva. A pesar de que un software de reconocimiento de tatuajes puede aportar soluciones en el ámbito de reconocimiento. ya que. El Instituto Nacional de Estándares y Tecnología o NIST realizó experimentos que se centraban en la mejora de la tecnología al momento de mapear las conexiones entre las personas con tatuajes.

6 Tatt-C El Desafío de la Tecnología del Reconocimiento del Tatuaje o Tatt-C por sus siglas en inglés fue diseñado para impulsar a la comunidad académica y comercial en el ámbito de la investigación avanzada y el desarrollo de tecnología con métodos automáticos de identificación basados en imágenes de tatuajes. la tabla 2. ya que no podemos cometer el error del NIST al tomar imágenes que puedan afectar las garantías individuales y derechos de los sospechosos. y marcan un punto de referencia en la visión por computadora aplicado a diferentes áreas. pilar de la tecnología biométrica. abierta y a nivel mundial. a pesar de estar en un país en el cual se sabe que estas leyes no se respetan del todo nunca hay que cuestionar la inteligencia del acusado ya que este puede tener una defensa sólida en cuanto al manejo de su información personal.La primer gran incursión del reconocimiento de tatuajes a nivel de software fue llamada " El tatuaje tecnología de reconocimiento Desafío" o abreviando en inglés Tatt-C.6. la convocatoria se lanzó el 23 de septiembre de 2014 de manera libre. Estos programas promueven el desarrollo de tecnologías.2 muestra los participantes que subieron 21 . Podemos tomar este apartado como advertencia para nuestro sistema de reconocimiento en desarrollo. ayudan a ampliar el estado del arte en su ámbito. el LFW para el reconocimiento de cara sin restricciones y el NIST i-vector Machine Learning Challenge para el aprendizaje de máquina en el reconocimiento de voz. las siguientes tablas muestran la información de estas fases. estos datos se distribuyeron a 19 organizaciones y 5 instituciones de investigación. Este programa se dividió en dos fases en la que los participantes podían subir sus resultados al NIST. Existen otros programas promocionados por el NIST similar a Tatt-C. como son el MBGC para el reconocimiento de cara e iris.1 Metodología Tatt-C fue presentado como una prueba " a libro abierto" donde a los participantes se les fue proporcionada la base de datos para así poner a prueba con su hardware esta base de datos y así proveer con los resultados de sus algoritmos al NIST. 2. este sistema compila una "base de datos abierta" que consta de 15. seis universidades y ocho empresas privadas. resaltando MorphoTrak. En este programa fueron reclutados varios participantes de empresas y universidades para presentar sus algoritmos de reconocimiento de imágenes y ver así cuales obtenían los mejores resultados.000 imágenes. 2. Este conjunto de datos fue diseñado para empezar a generar un estándar en cuanto al reconocimiento de tatuajes.

3 muestra cuales son las áreas para las cuales estos algoritmos fueron diseñados. Sistemas de FraunhoferIOSB Si No Tecnología y Exposición de Imagen Corporación MITRE MITRE   No No Morpho/MorphoTrak MorphoTrak   Si Si Energías Alternativas   Francesas y Comisión de Purdue No No Energía Atómica Tabla 2. Participante Identificación Región Medios Similitud Detección de Tatuaje de Mixtos de de Tatuaje Interés tatuajes Energías Alternativas    Francesas y Comisión de Energía Atómica Consulta de Alcance      Técnico Instituto de Optrónicas   Fraunhofer.3 Áreas de interés de los algoritmos participantes. La tabla 2.2 Participantes del programa Tatt-C Participante Nombre Corto Presentaciones Datos de (en inglés) Entrenamiento Externo Fase 1 Fase 2 Fase 1 Fase 2 Energías Alternativas  Francesas y Comisión de CEA Si Energía Atómica Consulta de Alcance Técnico Compass  No Instituto de Optrónicas   Fraunhofer. Sistemas de Tecnología y Exposición de Imagen Corporación MITRE      Morpho/MorphoTrak    Energías Alternativas   Francesas y Comisión de Energía Atómica 22 . Tabla 2.los resultados de sus algoritmos para una o más áreas de interés.

medios Construcción de Identificación de Identificación de Obtención de Afiliación de Ejemplo de Utilidad Base de datos y Personas Personas Información Pandilla Mantenimiento Búsqueda Uno a Búsqueda Uno a Búsqueda Uno a Búsqueda Uno a Prueba Clasificación Muchos Muchos Muchos Muchos Tatuajes. Tipos de imágenes Tatuajes Tatuajes Tatuajes Tatuajes. Caras.2.1 muestran un resumen de cómo fue utilizado el conjunto de datos y ejemplos de imágenes para cada una de las categorías de Tatt-C respectivamente: Tabla 2. La tabla 2. de un tatuaje entre sí de mismo sujeto en de diferentes más grande diferentes sujetos. Algunas de estas categorías del conjunto de datos contenían las versiones originales y recortadas de las imágenes además de una galería imágenes de fondo usadas para ayudar en alguno de los experimentos en caso de ser necesario por alguno de los algoritmos. este conjunto está clasificado en cinco categorías que se diseñaron basándose en escenarios simulados de operativos policiales. Bosquejos. Gráficos de computadora 1349 en Número de Pruebas 157 297 181 851 tatuajes. Grafitis.1000 en no tatuajes Número de mates 215 157 272 1361 Tamaño promedio de la galería de 43 y 4375 31 y 4363 55 272 imágenes(Numero de Carpetas e Imágenes) Número de imágenes 4332(Usadas en experimentos con galerías más grandes) de Fondo 23 . diferentes tiempos.4 Resumen del conjunto de datos de Tatt-C Caso de Uso Identificación de Región de Medios Mixtos Similitud de Detección de Tatuaje Interés tatuajes Tatuaje Hallar la Hallar la Hallar la Hallar la coincidencia en coincidencia entre coincidencia en coincidencia entre diferentes tatuajes similares Detectar si una una región de tatuajes similares Descripción instancias del o relacionados imagen contiene un interés pequeña o relacionados mismo tatuaje y del entre sí a través tatuaje.4 y la figura 2.2 Conjunto de datos El conjunto de datos de Tatt-C consiste en un total de 16716 imágenes recolectadas en operativos de la ley.6.

IR.gov/nistpubs/ir/2015/NIST. Recuperado el 3 de julio del 2017 del URL: http://nvlpubs. la vigilancia en video de cámaras de seguridad podría ser capaz de grabar un tatuaje expuesto en el cuello o brazos del sospechoso. los resultados se muestran en la figura 2.3 Resultados del programa Tatt-C En esta sección se muestran los resultados del desempeño de los algoritmos puestos a prueba en las diferentes categorías. estas se realizaron sobre el mismo tatuaje para cada categoría. por ejemplo. Identificación de tatuaje Para este caso.1 Ejemplos representativos de las imágenes utilizadas en cada una de las categorías de Tatt-C. 24 .6. (e) Identificación de Tatuaje (d) Región de Interés (c) Medios Mixtos (b) Similitud de Tatuajes (a) Detección de Tatuajes Figura 2.2 y en la tabla 2. Para cada imagen de prueba.pdf 2. en el caso de un crimen en el que el sospechoso usa guantes. respectivamente. el uso del algoritmo es el de apoyo de identificación de un individuo. pudiesen haber más de una imagen que concuerde correctamente en la base de datos. La prueba para este caso consiste en dar al algoritmo diferentes imágenes del mismo tatuaje del mismo sujeto recolectadas en diferentes ocasiones. máscara y guantes.nist.5.8078.

529 0.968 0. Número de pruebas: 157.994 0. (b) Gráfica de Relación Cumulativa Característica (a) Gráfica Interpolada de la Recuperación de Precisión Promedio Figura 2.8078.962 0.968 0.000 Purdue Fase 1 0.994 MorphoTrak Fase 2 0.898 0.140 0.IR.994 Una vez que los algoritmos presentaron su rendimiento ante las pruebas de identificación de tatuajes.975 MITRE Fase 2 0.962 0. no hay mucha mejora en el rendimiento más allá del rango de 100. lo cual puede atribuirse a la ley de rendimientos decrecientes para esta categoría.pdf Tabla 2.975 Compass Fase 2 0.994 0.962 0. Región de interés En este caso se analiza el desempeño de los algoritmos cuando se les presenta una subregión de una imagen de un tatuaje.898 0. se hizo la siguiente observación: • Para muchos de los algoritmos.nist.650 FraunhoferIOSB Fase 1 0.089 0.987 0. Tamaño promedio de la galería: 4375.994 0. Tamaño promedio de la galería: 4375.2 Resultados para la categoría de la identificación de tatuajes. Algoritmo Presentación Rango 1 Rango 10 Rango 100 Rango 300 Precisión Precisión Precisión Precisión CEA_1 Fase 1 0.994 Purdue Fase 2 0.994 0.994 1.924 CEA_2 Fase 1 0.854 0.987 0. pone a prueba la habilidad de encontrar puntos de interés que concuerden de esta subregión con una imagen 25 .968 0.000 1.981 0.968 0. Recuperado el 3 de julio del 2017 del URL: http://nvlpubs.854 N/A N/A FraunhoferIOSB Fase 2 0.943 0.962 0.5 Estadísticas acumulativas para la categoría de identificación de tatuaje.gov/nistpubs/ir/2015/NIST.586 0.975 MorphoTrak Fase 1 0.987 0.879 0. Número de pruebas: 157.904 0.

más grande del mismo tatuaje, por ejemplo, en el caso en que la cara de un
sospechoso no puede identificarse, pero logra captarse una porción de un tatuaje
que está expuesta sobre el brazo u otra parte del cuerpo. Los datos de prueba
para los algoritmos en esta clasificación están compuestos de secciones de
tatuajes que pertenecen a una imagen del mismo tatuaje de mayor tamaño estas
dos imágenes siendo del mismo sospechoso en diferente tiempo, cabe destacar
que en esta base de datos compuesta por imágenes de subregiones de tatuajes e
imágenes de mayor tamaño del mismo tatuaje existe solo una coincidencia
correcta entre estas. Al igual que la categoría anterior se presentaron la figura 2.3
y en la tabla 2.6 las cuales describen los resultados del rendimiento para cada
algoritmo en esta categoría:

(a) Gráfica de Relación Cumulativa (d) Gráfica Interpolada de la Recuperación de
Característica Precisión Promedio

Figura 2.3 Resultados para la categoría de región de interés. Número de pruebas: 297, Tamaño
promedio de la galería: 4363. Recuperado el 3 de julio del 2017 del URL:
http://nvlpubs.nist.gov/nistpubs/ir/2015/NIST.IR.8078.pdf

Tabla 2.6 Estadísticas acumulativas para la categoría de región de interés. Número de pruebas:
157, Tamaño promedio de la galería: 4375.

Algoritmo Presentación Rango 1 Rango 10 Rango 100 Rango 300
Precisión Precisión Precisión Precisión
CEA_1 Fase 1 0.731 0.737 0.771 0.811
CEA_2 Fase 1 0.781 0.785 0.818 0.845
Compass Fase 2 0.175 0.250 0.325 0.475
MITRE Fase 2 0.771 0.902 0.956 0.970
MorphoTrak Fase 1 0.936 0.949 0.960 0.966
MorphoTrak Fase 2 0.946 0.970 0.976 0.980
Purdue Fase 2 0.916 0.943 0.953 0.970

26

Similitud de Tatuajes
En esta categoría, a los algoritmos se les asigna la tarea de encontrar la
coincidencia entre tatuajes parecidos o relacionados entre sí. La aplicación de uso
de esta categoría cae en los casos de identificación de criminales que pertenecen
a una misma pandilla, ya que, al identificar el tatuaje de un sujeto, esto puede
guiar a que coincida con la similitud de otro tatuaje y así relacionar a varios sujetos
y su pandilla. Los datos de prueba para esta categoría consisten en grupos de
imágenes de tatuajes que son bastante parecidos entre sí pero que pertenecen a
diferentes sujetos, para facilitar el rendimiento de los algoritmos las imágenes
fueron recortadas alrededor de contenido primario del tatuaje. Al igual que la
categoría de medios mixtos, pocos algoritmos fueron diseñados para este tipo de
tarea, los resultados se muestran en la figura 2.4 y en la tabla 2.7.

(a) Gráfica de Relación Cumulativa Característica (b) Gráfica Interpolada de la Recuperación de
Precisión Promedio

Figura 2.4 Resultados para la categoría de similitud de tatuajes. Número de pruebas: 851, Tamaño
promedio de la galería: 272. Recuperado el 3 de julio del 2017 del URL:
http://nvlpubs.nist.gov/nistpubs/ir/2015/NIST.IR.8078.pdf

27

Tabla 2.7 Estadísticas acumulativas para la categoría de similitud de tatuajes. Número de pruebas:
851, Tamaño promedio de la galería: 272.

Algoritmo Presentación Rango 1 Rango 10 Rango 100 Rango 300
Precisión Precisión Precisión Precisión
Compass Fase 2 0.005 0.074 0.147 0.199
MITRE Fase 2 0.035 0.149 0.239 0.309

Detección de tatuaje
Esta última categoría pone a prueba el rendimiento de los algoritmos al momento
de detectar si una imagen contiene un tatuaje o no. La aplicación de esta
categoría está en la construcción y mantenimiento de la base de datos, como por
ejemplo en la clasificación de nuevas imágenes que entran a la base de datos, ya
que no todas contienen un tatuaje, muchas de ellas son fotos del rostro de los
sujetos. Los resultados para esta categoría se muestran en la figura 2.5 y en la
tabla 2.8.

Figura 2.5 Distribución del puntaje de confidencialidad para la categoría de detección de tatuaje.
Número de imágenes de tatuajes analizadas: 1349, Número de imágenes de no-tatuajes
analizadas:1000. Recuperado el 3 de julio del 2017 del URL:
http://nvlpubs.nist.gov/nistpubs/ir/2015/NIST.IR.8078.pdf

Tabla 2.8 Estadísticas de la precisión de detección

Algoritmo Presentación Precisión sobre Precisión sobre Precisión
imágenes no- imágenes de Promedio
tatuaje tatuajes
CEA_1 Fase 1 0.988 0.932 0.956
Compass Fase 2 0.386 0.798 0.622
MITRE Fase 1 0.750 0.734 0.741
MITRE Fase 2 0.948 0.924 0.934
MorphoTrak Fase 1 0.950 0.972 0.936

28

Los resultados de la primera y segunda fase aún son privados. La segunda fase de esta iniciativo se dio a conocer el público el 19 de abril de 2017 teniendo como fecha de cierre el 14 de junio del mismo año. varios puntos a evaluar fueron vistos en el programa de Tatt-C pero esta vez Tatt-E se enfocará principalmente en las siguientes categorías:  Identificación de tatuaje  Región de interés  Detección/Localización de Tatuajes  Bosquejos Después. ya que.7 Tatt-E La Evaluación de Tecnologías del Reconocimiento del Tatuaje o Tatt-E por sus siglas en inglés es una iniciativa que da seguimiento al programa Tatt-C del NIST la cual fue lanzada para evaluar y medir la capacidad de diferentes sistemas para desempeñarse en el reconocimiento automático basado en la imagen del tatuaje.2. teniendo como fecha límite el 1º de marzo del 2017 día en el cual termina la primera fase de la convocatoria.1 Progreso del programa Tatt-E Esta iniciativa comenzó el 10 de marzo de 2016 lanzando el anuncio del programa que daba a conocer cuál es el alcance que deben tener los algoritmos participantes. el 26 de septiembre de 2016 los participantes enviaron sus borradores de su interfaz de programación de aplicación al NIST para que el público especialista pudiera darle revisión y así después el 10 de diciembre de 2016 los participantes seleccionados dieran a conocer su interfaz definitiva. 29 . Podemos ver que esta iniciativa es bastante actual y podemos mencionar que ha dado buenos resultados. en base a la cantidad de algoritmos y sus buenos resultados de rendimientos. En este punto debemos estar muy atentos ya que puede darse a conocer características de algún algoritmo del cual podamos aprender para implementarlo en el nuestro. organizaciones poseedoras de bases de datos que puedan ser útiles para el NIST y para todas aquellas personas que tengan ideas de cómo mejorar la tecnología ya existente o como impulsar a más personas para entrar en la iniciativa.7. Esta iniciativa comenzó en marzo de 2016 lanzando la convocatoria a todos aquellos desarrolladores de algoritmos de reconocimiento de tatuajes. el NIST planea abrir una tercera fase del programa. 2. estos se darán a conocer tiempo después del cierre de la 3ª fase del programa. su fecha de apertura aún es desconocida al público. A los participantes se les dio un periodo de tiempo para afinar los últimos detalles de sus sistemas.

30 . .El sistema utilizó el espacio RGB (red.8.pdf Las imágenes procesadas también eran analizadas mediante características propias de las mismas.De esta se obtienen características de rotación. Figura 2.8 TATTO-ID Como se puede observar. estás eran tres características fundamentales:  Color. esto se logra utilizando operaciones de cierre y apertura para encontrar el umbral en donde los bordes se encuentran.edu/Publications/SoftBiometrics/JainLeeJinTattoo07. Este sistema fue implementado con una base de datos de imágenes de tatuajes para dar el enfoque específicamente a la identificación de sospechosos y víctimas de algún crimen.2.6 presentada a continuación. esto se puede ver en los métodos antes mencionados en este capítulo. Tatto- ID es un sistema de consultas de imágenes mediante ejemplo (por sus siglas en inglés CBIR) encargada de encontrar la similitud entre la imagen de consulta y todas la imágenes almacenadas dentro de la base de datos con el fin de devolver al usuario todas las relaciones encontradas entre la imagen de consulta y las imágenes pertenecientes a la base de datos. así como características de la escala de grises de la misma. escala y traslación de la imagen. blue) para obtener dos descriptores de colores.cse. esto lo logra segmentando los bordes en los cuales el tatuaje se encuentra dentro de la imagen.  Forma. . 2.msu. Por otro lado. 2.6 Muestra de las imágenes originales y las imágenes segmentadas por el sistema. en el año 2007 la Universidad del Estado de Michigan desarrolló el sistema de recuperación de imágenes de tattoo automático para la identificación de sospechosos y víctimas a la cual llamaron “Tattoo-ID”. Green. el desarrollo de sistemas y métodos de estudio para reconocer los tatuajes ha tenido evolución en cada nueva implementación. Este procesamiento se puede observar en la figura 2.2 Procesamiento de las imágenes En este sistema las imágenes son procesadas a través de sus regiones de interés.1 Descripción del sistema Tatto-ID es un sistema de pareo automático para recuperar imágenes de tatuajes a través de consultas de fotografías de otras imágenes de tatuajes.Recuperado el 3 de julio del 2017 del URL: http://biometrics.8. es decir.

. textura) ha sido almacenada en vectores de información. Todas estas características son capturadas en forma de vectores para su posterior procesamiento. iluminación. de esta manera. (d) relación de aspecto. el resultado total de la similaridad es igual a la suma de las similaridades obtenidas en cada atributo/característica en las dos imágenes. (b)borrón. (a) (b) (c) (d) (e) (f) (g) Figura 2. Esto con el fin de simular capturas de imágenes de víctimas o sospechosos en escenas de crimen. (e) color.8. etc.3 Relacionado de las imágenes Puesto que cada característica (color. En el primero de ellos se realizó un experimento utilizando imágenes de alta calidad tomadas por oficiales de la policía mientras registraban a los sospechosos de prisión. tales como aplicar borrones. Si no se encuentra similaridad entre los dos histogramas entonces el resultado es igual a cero. 2.4 Resultados experimentales Para poder evaluar los resultados de las recuperaciones que el sistema Tatto-ID obtenía. forma. 2.𝐻2 = ∑𝐵𝑖 min(𝐻1 (𝑖). 𝐻 2 (𝑖)) (1) En donde 𝐻1 (𝑖) 𝑦 𝐻 2 (𝑖) son los histogramas de las imágenes. (g) rotación. (f) ruido aditivo. ruido aditivo.7 Transformaciones aplicadas a una imagen de tatuaje: (a)original.Esta característica verifica la coherencia de dirección del borde del vector con el fin de recortar la textura del tatuaje. Para esto se obtienen dos histogramas (uno de cada imagen) y se comparan mediante la ecuación: 𝑆𝐻 1 . Recuperado el 3 de julio del 2017 del URL: http://biometrics. (c) iluminación. estas transformaciones se pueden ver en el ejemplo de la figura 2. Así que. este método analiza las texturas de las imágenes reproduciendo la superficie de un objeto dentro de una imagen lo más realista que se pueda a través de los vectores obtenidos que caracterizan al mismo.7.cse.pdf 31 . En el segundo experimento se utilizaron las mismas imágenes haciéndoles diferentes transformaciones. se separaron las pruebas en tres experimentos diferentes.  Textura.8. y B es el número de elementos del vector.msu.edu/Publications/SoftBiometrics/JainLeeJinTattoo07. rotación. estos vectores son procesados mediante el método de intersección de histogramas.

edu/Publications/SoftBiometrics/JainLeeJinTattoo07. (6) relación de aspecto. 68. Figura 2.cse.En el tercer experimento se repitieron los primeros dos experimentos agregando esta vez etiquetas semánticas asociadas con las consultas y la base de datos con el fin de determinar si los resultados de las recuperaciones de las imágenes mejoraban.9 Imagen de tatuaje de pez tomada en siete condiciones diferentes.edu/Publications/SoftBiometrics/JainLeeJinTattoo07.2%. como se puede observar en la figura 2. aquellas que fueron sometidas a cambios de iluminación y aplicación de borrones fueron las que mayor dificultad tuvieron para ser segmentadas de su fondo. Las pruebas se realizaban para ver si se devolvía una de las imágenes agregadas utilizando una de estas siete como consulta Como resultado se obtuvo que en rango 1 se encontró una imagen similar en cinco casos.cse.157 imágenes. (a) (b) (c) (d) (e) (f) (g) Figura 2.2% al 64. (4) color.9.8 Resultados gráficos del experimento 1(cada barra corresponde a un tipo de transformación: (1) borrón. y desde que hay una sola verdadera imagen similar 32 . estas siete imágenes fueron agregadas a la base de datos de 2.msu. Experimento 1 del sistema De todas las imágenes. (5) rotación. Recuperado el 3 de julio del 2017 del URL: http://biometrics.8.7%. mientras que en rango 20 se encontró similitud en tres casos. Recuperado el 3 de julio del 2017 del URL: http://biometrics.pdf En adición a las transformaciones de los tatuajes.msu. Estos resultados pueden observarse en la figura 2. (7) general. (3) ruido aditivo. la precisión promedio en el rango 20 fue mejorada del 51. (2) iluminación.pdf Experimento 2 del sistema Puesto que en este experimento se utilizaron imágenes de consulta con ruido debido a las transformaciones. también se experimentó con una imagen de un tatuaje de pez capturada de siete maneras diferentes.7% y 69.

a cada una de las imágenes consulta con transformaciones se utilizó la curva de relación acumulativa (CMC) como evaluación para este experimento. el sistema puede aceptar opcionalmente etiquetas semánticas en las imágenes que el usuario puede ingresar como consulta. Por conclusión se puede decir que las etiquetas al ser parte de la consulta en las imágenes mejoran el rendimiento del sistema otorgando mejores resultados. Recuperado el 3 de julio del 2017 del URL: http://biometrics. y el puntaje de relación acumulativa en el rango 20 del experimento dos mejoró de un 79.10 se pueden observar los resultados de estas experimentaciones: (a) (b) Figura 2. en la figura 2.(ii)rotación. Al hacer comparaciones entre los experimentos uno y dos tras haber utilizado etiquetas. Dichos resultados experimentales se pueden observar en la figura 2.pdf Experimento 3 del sistema Como se había mencionado antes.edu/Publications/SoftBiometrics/JainLeeJinTattoo07. utilizando entonces estas etiquetas se pudo reducir el número de imágenes resultantes que pueden corresponder con la búsqueda para así mejorar el rendimiento de recuperación.10 Curva de relación acumulativa del experimento 2: (a)general.4% a un 94.11 Curva de relación acumulativa del experimento 3: (i)agregando etiquetas 33 .8%.cse.2% a un 90. y creció al 80% cuando se examinaban las 20 imágenes más similares recuperadas.11: Figura 2. A continuación. se llegó a la conclusión de que para el experimento uno la precisión promedio en el rango 20 logró mejorarse de un 51.(iv)iluminación.msu.5%.(iii)color y borrones. La oportunidad de recuperar la imagen correcta en la base de datos fue del 60% aproximadamente cuando se observaba simplemente a una imagen recuperada. (b)curvas para cada transformación(i)ruido y relación de aspecto.

pero no son tan eficientes con ruido del tipo combinado. Desarrollado por Mario Aldape. periodo de reentrada. lo cual permiten su fácil implementación en cualquier desarrollo de una aplicación como lo son los sistemas que emiten recomendaciones los cuales son útiles en aquellos casos en los que el trabajador no tenga un dominio sobre el catálogo de productos que existen en su área. 34 . ingrediente activo.cse.edu/Publications/SoftBiometrics/JainLeeJinTattoo07.pdf 2. Durante la implementación de este trabajo se fue haciendo uso de las memorias asociativas Alfa-Beta tipo min. el cual es omitido por el código de Johnson-Mobius Los desarrolladores del trabajo mencionado en este apartado llegaron a la conclusión que gracias al uso de las Memorias Asociativas se puede recuperar completamente un conjunto fundamental. Para el proyecto mencionado en este apartado se utilizó una base de datos que contenía las características principales de 40 herbicidas. utilizaron las memorias asociativas alfa-beta autoasociativas con el propósito de presentar las memorias alfa-beta como una posibilidad para obtener y analizar diferentes parámetros y así seleccionar un herbicida y resolver problemas en la agronomía. José Antonio Estrada y Joel Omar Juárez en el Centro de Innovación y Desarrollo Tecnológico en Cómputo (CIDETEC) en el Instituto Politécnico Nacional. incompatibilidad. debido a que estas memorias clasifican patrones de entrada con ruido aditivo o sustractivo. Recuperado el 3 de julio del 2017 del URL: http://biometrics. contraindicaciones y primeros auxilios. estas características son toxicidad. semánticas(ii)sin etiquetas semánticas.9 Memorias asociativas en la agricultura: un caso práctico Para el presente trabajo se ha decidido trabajar con las memorias asociativas debido a las características para reconocimiento de imágenes como son: un rápido y eficiente método de clasificación y su tolerancia al ruido por lo que las hace el método ideal para desarrollar el algoritmo propuesto.msu. por lo que trabajos como el que se menciona en este apartado son gran referencia de aprendizaje para el uso de las memorias asociativas en nuestro algoritmo a desarrollar. método de acción. estas memorias fueron combinadas con el código de Johnson-Mobius.

35 . su relación con la recuperación de patrones. CAPÍTULO 3 Marco Teórico En el presente capítulo se mencionará de manera técnica y teórica a las memorias asociativas. además de las utilerías computacionales a utilizar para desarrollar el algoritmo de identificación de personas mediante sus tatuajes.

según el artículo 266 del mismo. justificando la necesidad de la medida y expresando la persona o personas en quienes haya de practicarse. siempre que no implique riesgos para la salud y la dignidad de la persona.1 Memorias asociativas Una de las grandes repercusiones que ha tenido el procesamiento digital de las imágenes es la creación de las memorias asociativas.Meter aquí el diagrama a bloques 3.. extracciones de sangre u otros análogos. la Policía o. antes de ser sometida a procedimiento es necesario hacerle saber a la persona en cuestión sobre los derechos que le asisten. Éste es un proceso creado recientemente en el año 1961 por el científico Karl Steinbuch quien fue el primero 36 .” 3. el tipo y extensión de muestra o imagen a obtener.” “Artículo 270. por cualquier medio. el Ministerio Público por sí o a solicitud de la Policía podrá solicitar al Órgano jurisdiccional. sí a una persona se le ejerce un acto de molestia. exámenes corporales de carácter biológico. vello o cabello. así como que se le permita obtener imágenes internas o externas de alguna parte del cuerpo. en el Código Nacional de Procedimientos Penales.Revisión corporal: Durante la investigación. Se deberá informar previamente a la persona el motivo de la aportación y del derecho que tiene a negarsea proporcionar dichas muestras.-Toma de muestras cuando la persona requerida se niegue a proporcionarlas: Si la persona a la que se le hubiere solicitado la aportación voluntaria de las muestras referidas en el artículo anterior se negara a hacerlo. puesto que. Estos derechos se ven reflejados en los artículos 269 y 270 que se describen a continuación textualmente. podrá solicitar a cualquier persona la aportación voluntaria de muestras de fluido corporal. que al mismo tiempo describen implicaciones de obligaciones por parte de la persona procesada: “Artículo 269. en su caso el Ministerio Público.1 Artículos 269 y 270 del Código Nacional de Procedimientos Penales Actualmente los derechos humanos están ejerciendo cierto impacto en el uso de este software. la inmediata autorización de la práctica de dicho acto de investigación.

siendo estos patrones vectores binarios. dicha matriz es generada a partir de un conjunto de asociaciones conocidas de antemano y es llamada como “conjunto fundamental de asociaciones”. La naturaleza del conjunto fundamental proporciona un importante criterio para clasificar las memorias asociativas (siendo µ un índice que indica el número de asociación formada por patrones dentro del conjunto fundamental.𝑗 (siendo i. A su vez. la asociación será denotada por (𝑿𝒌 . para un número entero positivo k. Este sistema es una memoria heteroasociativa que recibe patrones de entrada y entrega otro patrón de salida asociado a dicha entrada. la memoria asociativa M es representada mediante una matriz cuyos elementos son escritos como 𝑚𝑖.j subíndices que indican la posición del elemento en la matriz). n las 37 .1. generando una agrupación entre ellos. Debido a efectos de correspondencia cada asociación será enumerada utilizando un superíndice para indicar el número de asociación que forma cada patrón de entrada con su correspondiente patrón de salida. 𝒀𝒌 ). de esta manera se entiende que la asociación uno esta denotada por (𝑿𝟏 . Visto de manera esquemática.1 Esquema general de una memoria asociativa. Por otro lado. En donde los patrones de entrada se representan con x y los patrones de salida con Y. cada patrón de entrada x forma una asociación con su respectivo patrón de salida Y. Y).1 Fundamentos Teóricos Una memoria es un elemento capaz de recuperar patrones completos a partir de patrones de entrada.1: M X Y Figura 3. 𝒀𝟏 ) .en realizar investigaciones para crear el primer sistema matemático que se comporta como memoria asociativa llamado Lernmatrix. Siendo estos vectores columna. 3. la manera de escribir dichas asociaciones es mediante la notación ordenada (X. en donde p es un número entero positivo y representa la cardinalidad de este conjunto. entonces. Del mismo modo. una memoria asociativa puede verse en la figura 3. Es de esta manera que el proceso de recuperación de dichos patrones se convierte en el objetivo principal de las memorias asociativas.

... A fines de describir matemáticamente estas fases de las memorias asociativas. la memoria será heteroasociativa.. . .1) La j-ésima componente de un vector columna se indicará con la misma letra del vector.. p}. es posible expresar las dos fases de una memoria asociativa: 1. se utilizarán de manera arbitraria los conjuntos A y B. m} según corresponda). 2. donde x  An y y  Am   {1. n} o j {1. Fase de Recuperación (Operación de la memoria asociativa)..y2). Encontrar los operadores adecuados y una manera de generar una matriz M que almacene las p asociaciones del conjunto fundamental {(x1. (x2. Es importante destacar que dentro de los problemas de las memorias asociativas se consideran dos fases principales en éstas: la fase de aprendizaje que es la fase en donde se construye la memoria asociativa a partir de las p asociaciones en el conjunto fundamental. 2.. la memoria será autoasociativa.. y m las dimensiones de los vectores columna de los patrones de salida):  Una memoria es Autoasociativa si se cumple que x = y   {1. colocando a j como subíndice (j {1. .. y la fase de recuperación. 2.  Una memoria Heteroasociativa es aquella en donde   {1. es decir: x  An y y  Am   {1. Cada vector columna de entrada tendrá n componentes cuyos valores pertenecen al conjunto A. . p} (3. ... (xp. Si   {1.. 2. p}. La j-ésima componente del vector columna x se representa por x j . . Con los conceptos básicos ya descritos y con la notación anterior... Nótese que puede haber memorias heteroasociativas con n = m. por lo que uno de los requisitos que se debe de cumplir es que n = m.. p} para el que se cumple que x  y. . 2.. Fase de Aprendizaje (Generación de la memoria asociativa). en donde los elementos de los patrones columna de entrada y salida pertenecerán al conjunto A.. que es en donde la memoria asociativa opera sobre los patrones de entrada para obtener los correspondientes patrones de salida.y1).. 2..dimensiones de los vectores columna de los patrones de entrada... si m = n y x = y   {1.. 2. 2. y los elementos de los patrones columna de entrada pertenecerán al conjunto B. y cada vector columna de salida tendrá m componentes cuyos valores perteneces al conjunto A de igual manera. 2. p}... . cuando se opera la memoria M con el patrón 38 .yp)}.. Hallar los operadores adecuados y las condiciones suficientes para obtener el patrón fundamental de salida y.. .. p} tal que x  y.

en el año de 1972. Teuvo Kohonen. es una matriz [cij]mxn cuya ij-ésima componente cij es: 39 . ya que estos operadores está altamente ligados con las operaciones de la morfología matemática dilatación y erosión. Buneman y Longuet-Higgins (científicos escoceces) crearon el Correlograph. respectivamente. y máximos o mínimos de sumas para la fase de recuperación. Esto dio lugar a que en el año de 1982 y los que siguieron el científico John J. denotado por C = D  H. Estos sucesos fueron precedidos por diversos hechos que marcaron la evolución de estos sistemas. Este rotundo éxito de Hopfield duró dieciséis años hasta que en 1998 se desarrollaron las memorias asociativas morfológicas. Se definen dos nuevos productos matriciales: El producto máximo entre D y H. lo anterior para todos los elementos del conjunto fundamental y para ambos modos: autoasociativo y heteroasociativo. Correlation Matrix Memories. herramientas en las cuáles se sustenta este proyecto y se hablará de ella a continuación. desarrollados por James A.2 Tipos de memorias asociativas Tras el desarrollo del sistema lernmatrix. Associatron. Self-Organizing Nets of Threshold Elements. Hopfield publicara un artículo presentando una extensión de su modelo original marcando así la era moderna de las memorias asociativas. ejemplos de ellos son los sistemas Interactive Memory.  Las memorias max simbolizadas por M. Anderson. Kaoru Nakano y Sun-Ichi Amari. numerosos científicos han dedicado el tiempo para desarrollar nuevos sistemas hasta que. en el año 1969 Willshaw. fundamental de entrada x.1. Existen entonces dos tipos de memorias asociativas morfológicas:  Las memorias min simbolizadas por W. a diferencia de las memorias asociativas clásicas (que utilizan operaciones convencionales entre vectores y matrices para la fase de aprendizaje y suma de productos para la recuperación de patrones) son aquellas que utilizan operaciones morfológicas de máximos o mínimos de sumas para la fase de aprendizaje. Memorias asociativas morfológicas Las memorias asociativas morfológicas. dispositivo óptico capaz de comportarse como memoria asociativa. 3.

. donde el negado transpuesto del patrón de entrada x se define como:  (x  ) t   x1 . p W =⋀𝜇=1[𝑦 𝜇 ∇(−𝑥 𝜇 )𝑡 ] (3.. Para cada una de las p asociaciones (x. x 2 . Se aplica el operador máximo  a las p matrices para obtener la memoria M.6) Memorias asociativas morfológicas min. 2.... donde el negado transpuesto del patrón de entrada x se define como:  (x  ) t   x1 . x 2 . Fase de Aprendizaje 1. Fase de Aprendizaje 1. es una matriz [cij]mxn cuya ij- ésima componente cij es: cij   d ik  hkj  r (3.5)  1 Fase de Recuperación Esta fase consiste en realizar el producto mínimo  de la memoria M con el patrón de entrada x. donde   {1. y) se usa el producto mínimo para crear la matriz y  (-x)t de dimensiones m x n.. p}..3) k 1 Memorias asociativas morfológicas max. cij   d ik  hkj  r (3.. Se aplica el operador mínimo V a las p matrices para obtener la memoria W. para obtener un vector columna y de dimensión m: y = M  x (3.2) k 1 El producto mínimo de D y H denotado por C = D  H. . y) se usa el producto mínimo para crear la matriz y  (-x)t de dimensiones m x n.   p M   y  (  x  ) t (3. Para cada una de las p asociaciones (x...4) 2..8) 40 . x n  (3. x n  (3.7) 2.

y de manera similar con Lxy(X. como esquinas. gotas y empalmes. las vecindades de cada punto de interés son representados por un vector característico.2 Transformada SURF (Speeded-Up Robust Features) Una de las tareas para encontrar correspondencias entre dos imágenes de la misma escena u objeto es parte de muchas aplicaciones de visión por computadora. las Gaussianos son óptimos para el análisis escala-espacio. 2. Finalmente. la matriz Hessiana H(X. para obtener un vector columna y de dimensión m: 𝑦 = 𝑾 ∇ 𝑥𝜔 (3.. La meta de este trabajo puede dividirse en tres pasos. y menor número de dimensiones son entonces deseables.10) Lxy(X. Dado un punto X = (x. sin embargo. “puntos de interés” son seleccionados en distintivas locaciones de la imagen. .Fase de Recuperación Esta fase consiste en realizar el producto máximo ∇ de la memoria W con el patrón de entrada x.. 𝜎) = [ ] (3. independientemente de su tamaño. por ejemplo. σ) Lxy(X. σ) Donde Lxx(X.𝜎) en X a una escala 𝜎 es definida de la siguiente manera: Lxx(X. Por otro lado.1 Detector “Fast-Hessian” El sistema detector está basado en el determinante de la matriz Hessiana para obtener la ubicación de un punto de la imagen y escala.y) en una imagen I. p}.2. 41 . esto parece haber sido algo sobrevalorado en este aspecto debido a sus requerimientos. σ) 𝐻(𝑋. Primero. Después. 3. y pueden ser evaluadas muy rápidamente utilizando imágenes íntegras. σ). σ) es la convolución del segundo orden derivativo Gaussiano 𝜕2 𝑔(𝜎) con la imagen I en un punto X. los vectores descriptores son emparejados entre diferentes imágenes en donde la dimensión del descriptor tiene un impacto directo en el tiempo que esto toma. si encuentra los mismos puntos de interés bajo diferentes condiciones de inspección.9) 3. La propiedad con más valor de un detector de puntos de interés es su repetibilidad. es por esto que se realiza una mejor aproximación con filtros de caja. σ) Lyy(X. donde   {1. Éstos aproximan las derivadas Gaussianas de segundo orden. σ) y 𝜕𝑥 2 Lyy(X..

12) Debido al uso de filtros de caja e imágenes integrales.9𝐷𝑥𝑦 )2 (3. los filtros de caja con dimensión 9x9 son aproximaciones de las derivadas Gaussianas de segundo orden con σ = 1. La figura 3. Figura 3.2. El espacio escalar es analizado escalando ascendentemente el tamaño del filtro antes que reducir iterativamente el tamaño de la imagen. Esto proporciona: det(𝐻𝑎𝑝𝑟𝑜𝑥 ) = 𝐷𝑥𝑥 𝐷𝑦𝑦 − (0. el tamaño del filtro es incrementado al doble y simultáneamente. por cada nueva octava. sino que en su lugar se pueden aplicar tales filtros de cualquier tamaño a exactamente la misma velocidad directamente en la imagen original. El máximo determinante de la matriz Hessiana es entonces interpolada en escala y espacio de imagen.2. 42 .912 (3. Dxy. no se tiene que aplicar iterativamente el mismo filtro a la salida de una capa previamente filtrada. Las regiones en gris son iguales a cero. Dyy. Estas aproximaciones son denotadas como Dxx.2)|𝐹 |𝐷𝑥𝑦 (9)|𝐹 En donde |𝑋|𝐹 es la norma de Frobenius.2 Aproximaciones de la derivada Gaussiana de segundo orden utilizando filtros de caja. Por lo tanto.3 muestra un ejemplo de los puntos de interés detectados usando el detector Fast-Hessian. Los pesos aplicados a las regiones rectangulares se mantienen simples por eficiencia computacional.2)|𝐹 |𝐷𝑥𝑥 (9)|𝐹 =0. los intervalos de muestreo para la extracción de puntos de interés pueden ser doblados también.11) |𝐿𝑥𝑥 (1. pero se necesitan balancear los pesos relativos en la expresión para el determinante Hessiano con la ecuación: |𝐿𝑥𝑦 (1.Como se puede observar en la figura 3.

se construye una región cuadrada alineada a la orientación seleccionada.5s) centradas en el punto de interés.2 Descriptor SURF El primer paso del descriptor SURF propuesto consiste en fijar una orientación reproducible basada en la información de una región circular alrededor del punto de interés. y esto en un vecindario circular de radio 6s alrededor del punto de interés. se le llama 𝑑𝑥 a la respuesta Haar-wavelet en la 43 . Ésta mantiene información espacial importante dentro de ella. Después.2. aquí se identifica una orientación reproducible para los puntos de interés. la región es separada regularmente en subregiones cuadrada más pequeñas de 4x4. Por razones de simplicidad. primero se calculan las respuestas Haar-wavelet en una dirección x y y. donde s es la escala en donde fue detectado el punto de interés.3 Puntos de interés detectados en un campo de flores. 3. Para lograr esto. Asignación de orientación Con el fin de ser invariantes a la rotación. el primer paso consiste en construir una región cuadrada centrada en el punto de interés. La orientación dominante es estimada calculando la suma de todas las respuestas dentro de una ventana de orientación deslizante cubriendo un 𝜋 ángulo de 3 . Una vez que las respuestas wavelet son calculadas y ponderadas con el Gaussiano (σ=2. Figura 3. El vector más largo presta su orientación al punto de interés. Componentes del descriptor Para la extracción del descriptor. y orientada a lo largo de la orientación seleccionada en la sección anterior. Con ese propósito. Las respuestas horizontales y verticales dentro de la ventana son sumadas. las respuestas son representadas como vectores en un espacio con la fuerza de la respuesta horizontal a lo largo de la abscisa y la fuerza de la respuesta vertical a lo largo de la ordenada. Las dos respuestas sumadas proporcionan un nuevo vector. y extraer el descriptor SURF de él.

Android y Windows Phone. Unity y puede ser instalada en Windows.3 EMGU CV Emgu es una versión alterna para . (b) región en presencia de frecuencias en la dirección x. (c)región con intensidad gradualmente incrementando en la dirección x. ∑ |𝑑𝑦 |). IronPhyton. cada subregión tiene un vector descriptor v de cuatro dimensiones para su estructura de intensidad 𝑣 = (∑ 𝑑𝑥 .dirección horizontal y 𝑑𝑦 a la respuesta Haar-wavelet en la dirección vertical. ∑ |𝑑𝑥 | . el diagrama de clases se muestra a continuación en la figura 3. con el fin de extraer información de la polaridad de los cambios de intensidad. emgu contiene una estructura de clases que permite invocar las funciones de OpenCV de una manera muy eficaz. las respuestas 𝑑𝑥 𝑦 𝑑𝑦 primero son ponderadas con el Gaussiano (σ=3. ∑ 𝑑𝑦 .3s) centrada en el punto de interés. iOS. Mac OS. Esto resulta en un vector descriptor de longitud 64 para todas las subregiones de 4x4. Esta versión puede ser compilada por Visual Studio. Por lo tanto. Por otro lado. |𝑑𝑥 | 𝑦 |𝑑𝑦 |. La figura 3. (a) (b) (c) Figura 3. etc. Luego. (a) caso de una región homogénea.NET de la librería OpenCV de procesamiento de imágenes creada por Intel esta permite a las funciones proporcionadas por OpenCV ser implementadas mediante lenguajes de programación compatibles con la tecnología . Linux. Visual C++.4 Intensidad de las entradas del descriptor de subregiones. también se extrae la suma de los valores absolutos de las respuestas. 3. Para incrementar la robustez hacia deformaciones geométricas y errores de localización.4 muestra las propiedades del descriptor para tres diferentes imágenes de patrones de intensidad dentro de una subregión.5: 44 .NET como lo son C#. Visual Basic. Xamarin Studio.

Figura 3. Recuperado el 03 de diciembre del 2017.emgu. del URL: http://www.com/wiki/index.php/Main_Page 45 .5 Diagrama de clases de EMGUCV.

TIF. DIB. para el caso de la detección de tatuajes se utilizaron varias clases y métodos que serán descritos a continuación:  Clase CvInvoke: Contiene el método Imread el cual es fundamental para el algoritmo ya que se encarga de cargar una imagen en la ruta especificada y regresa un apuntador de la imagen seleccionada. entre otros.1 Clases de EmguCV Gracias a que EmguCV maneja muchas clases que invoca métodos de OpenCV el análisis de las imágenes es más eficaz y sencillo. esto lo logra mediante el método DetectAndCompute.2 Características para la plataforma Windows. Ya que se usará la plataforma Windows con el apoyo del lenguaje de programación C#.1 46 .  Clase SURF: Es la clase más importante para el desarrollo del algoritmo ya que extrae las características robustas de alta velocidad de una imagen. 3. JPE. JPG.  Clase Features2DToolbox: Permite crear un ambiente gráfico para manejar las imágenes analizadas en el proceso y contiene el método DrawKeyPoints el cual permite dibujar los puntos de interés obtenidos en de la imagen mediante la clase SURF. PNG.3. es importante saber qué características ofrece la librería EMGUCV en sus diferentes versiones. Múltiples formatos de archivo de imagen son aceptados por el método de esta clase como por ejemplo BMP.  Clase VectorOfKeypoint: Una adaptación de la clase Keypoint de C++.3. las características se muestran en la tabla 3. permite crear un vector unidimensional el cual almacena los puntos de interés y sus características obtenidos mediante el objeto de la clase SURF y el método DetectAndCompute.  Clase MAT: Es el equivalente a la función cv::Mat de OpenCV y permite crear una matriz para almacenar los datos de los pixeles de una imagen. TIFF.3. JPEG.

Windows Phone.UI X X Licencia Licencia Tipo de Licencia Pública Licencia Comercial Comercial General 3. Tabla 3. x64 i386.1 Características de EMGUCV Emgu CV Emgu CV para Windows Emgu CV para Nombre (Código (Optimizado para venta Unity Abierto) comercial) Visual Studio Visual Studio Visual Studio Unity 3D Pro Herramientas de 2012 y 2012 y 2013 y v5.CV. una de las que más destaca es el uso multiplataforma que tiene al estar escrito completamente en lenguaje C#.5 y versiones Desarrollo versiones versiones versiones siguientes siguientes siguientes siguientes UWP / Windows Plataforma Windows Windows Windows 8. x64 compatibles x64 (Standalone) Compatibilidad con Unidad de X X procesamiento Grafico Compatibilidad con X OpenCL Compatibilidad con reconocimiento óptico de caracteres Tesseract Probado con Compilador Intel C++ X X X e Intel Threading Building Blocks Administrador de Excepciones Visualizador de X X Depuración Emgu.3. las cuales incluyen iOS. Android. x64 i386. El beneficio de esto es que puede ser compilado en modo de Desarrollo Mono y con esto poder ser ejecutado en cualquier plataforma que sea compatible con este modo de desarrollo.3 Ventajas de Emgu CV Antes de empezar a trabajar con las librerías proporcionadas por Emgu CV se debe tener el conocimiento de sus ventajas. Mac OS X 47 .1 Desktop Store app Standalone i386 (Editor & Arquitecturas de CPU Standalone). i386.

NET lo cual es de gran utilidad para este proyecto ya que utilizaremos el lenguaje de programación C#. en cuando al lenguaje de programación orientado a objetos. aunque solo pueda ser desde una clase primaria puede implementarse en cualquier número de interfaces gráficas. También implementa un editor de código que permite crear interfaces gráficas de usuario de manera sencilla y elegante llamado Visual C#. Otras ventajas que incluye Emgu son:  Una Clase Image para el manejo de Colores Genéricos y Profundidad de Imagen. herencia y polimorfismo. haciéndolo más didáctico al usuario. Entre los lenguajes que pueden trabajar con Emgu CV destacan C#. de este modo podemos tener encabezados que pueden ser importados a través de múltiples compiladores.4.2 Arquitectura de la plataforma . C# puede trabajar conceptos de encapsulación. un componente integrado en Windows el cual incluye un sistema de ejecución llamado Ejecución 48 . Por otro lado. C++ o Java. Todas las variables. 3. enumeraciones. aplicaciones de bases de datos y muchas más. 3.NET Framework Para el presente trabajó se decidió trabajar con el lenguaje C# debido a su seguridad de tipos y que es un lenguaje orientado a objetos.1 Lenguaje C# Este lenguaje tiene una sintaxis que es fácil de aprender. métodos e incluso el método Main provienen de una encapsulación dentro de una clase facilitando así la herencia que.  Poder escoger entre usar los métodos incluidos en la clase Image o invocar directamente funciones incluidas en OpenCV  Operaciones Genéricas con Pixeles 3. sobre todo para aquellas personas que estén familiarizadas con los lenguajes de programación C.4 Lenguaje C# y .y Linux. además que da una gran facilidad para crear aplicaciones de cliente de Windows.NET Framework Los programas creados en C# se ejecutan en .4. aplicaciones cliente- servidor. Otra ventaja de Emgu CV es su compatibilidad con múltiples lenguajes de programación y que otorga códigos de ejemplo para el uso de las librerías. IronPhyton y Visual Basic. C# reduce las complejidades encontradas en estos otros lenguajes como sus tipos de valor que pueden aceptar valores nulos.NET Framework. acceso directo a memoria y un sensor inteligente para apoyar al usuario con la sintaxis de código en tiempo real.

Figura 3.de lenguaje común o CLR por sus siglas en inglés.6 muestra la arquitectura de funcionamiento de . Recuperado el 03 de diciembre del 2017.microsoft.dll.NET Framework. este archivo ensamblado se carga en el CLR. la figura 3.exe o .6 Arquitectura del funcionamiento de . el cual es un estándar internacional para la creación de entornos de ejecución. normalmente con extensión de archivo .com/es-es/dotnet/csharp/getting-started/introduction-to-the- csharp-language-and-the-net-framework 49 . el cual verifica requisitos de seguridad y si estos se cumplen realiza la compilación Just in Time o justo a tiempo para poder convertir las instrucciones del lenguaje intermedio en instrucciones de máquina.NET Framework. del URL: https://docs. El código fuente escrito en C# se compila en un lenguaje llamado Lenguaje Intermedio que se encarga de crear relación entre las instrucciones en lenguaje C# y el estándar del CLR para después almacenar en disco un archivo ejecutable denominado ensamblado. Cuando el programa de C# es ejecutado. Para poder entenderlo mejor.

50 . CAPÍTULO 4 Desarrollo y construcción En este capítulo se describirá paso a paso el desarrollo del algoritmo que permitirá dar solución al problema planteado. Se incluirán el trabajo de estructuración y resultados de pruebas que sustenten su funcionamiento.

1 Prueba de funcionamiento de EmguCV La dependencia de EmguCV contiene ejemplos para compilar y así comprobar la correcta instalación de las librerías y métodos.1 Figura 4. Para nuestro caso.2282. La instalación se logró de manera correcta y los resultados se muestran en la figura 4. decidimos compilar el ejemplo SURFFeature el cual no solo nos permitió comprobar el funcionamiento de las librerías de EmguCV sino también nos permitió observar a la transformada SURF en ejecución y cuáles serían los resultados esperados para nuestro propio algoritmo. 4.1 Instalación de EmguCV El primer paso que se realizó para poder empezar la estructuración en código del algoritmo fue obtener las dependencias de EmguCV a través de su página oficial.1.dll los cuales son: 51 .2. Visual Studio 2017 no contiene las referencias que llamen a las funciones que se requieren para el análisis de las imágenes.1.exe para después probar la correcta instalación.4.2682 la cual es compatible con nuestra versión de visual studio que es la 2017. Una vez descargada esta dependencia se instala a través del archivo ejecutable de instalación libemgucv- windesktop-3.1 Ejemplo SURFFeatures compilado correctamente. Para poder configurar correctamente estas funciones se requieren 4 archivos en formatos .0. Antes de poder empezar a estructurar el código del algoritmo.0. se descargó la paquetería emgucv-windesktop 3. 4. se tuvo que configurar Visual Studio 2017 para que pudiera acceder a todas las librerías y métodos previamente instaladas ya que a diferencia de los ejemplos proporcionados por la dependencia de EmguCV.2 Configuración de EmguCV en Visual Studio 2017.

deben agregarse al proyecto como nuevos elementos y después activar la opción de copiarlos en el directorio actual de la solución del proyecto.dll que usualmente se agregan como referencias al programa actual. Cortar la imagen para que cubra el ancho de la página.dll  msvcr120. La figura 4.2 muestra la configuración de dichos archivos.2 Configuración de archivos de EmguCV.dll  msvcp120.dll  opencv_ffmpeg310.dll Estos 4 archivos a diferencia de los . 52 . Figura 4.  cvextern.

guarda en él una cantidad de elementos dada por la siguiente ecuación: 𝐶𝑎𝑛𝑡𝑖𝑑𝑎𝑑 𝑑𝑒 𝑒𝑙𝑒𝑚𝑒𝑛𝑡𝑜𝑠 = 512 ∗ 𝐶𝑎𝑛𝑡. esto se realizó gracias a la clase SURF y al método DetectAndCompute perteneciente a la misma clase.3. El vector bytes. Para llevar a cabo esta tarea. y si el valor es más grande. se procedió a obtener los puntos de interés de las imágenes contenidas en el banco de imágenes de tatuajes. Para este caso. Figura 4. el método detectará una mayor cantidad de puntos de interés en la imagen procesada. La figura 4.3 Obtención de los puntos de interés. Una vez declarada la instancia hacia el objeto. es de estos descriptores de donde se tomará el atributo bytes para poder generar los patrones de entrada hacia el siguiente paso del algoritmo.1 Almacenamiento de los puntos de interés. 4. detectará una cantidad menor de puntos de interés en la misma imagen. el valor propuesto es igual a 400 y es presentado como argumento del constructor del objeto perteneciente a la clase SURF. bytes es un vector que contiene valores de 0 a 255 en cada una de sus localidades.3 Vector descriptor con los atributos de los puntos de interés obtenidos.4.1) Probando cada imagen del banco se comprobó que los puntos de interés dibujados se encuentran en su mayoría sobre el área del tatuaje. 𝑃𝑢𝑛𝑡𝑜𝑠 𝑑𝑒 𝑖𝑛𝑡𝑒𝑟é𝑠 𝑑𝑒𝑡𝑒𝑐𝑡𝑎𝑑𝑜𝑠 (4. Una vez que Visual Studio fue configurado. se propuso un valor entero para detectar una cierta cantidad de puntos de interés. entre más pequeño es este valor. es decir. dicho valor es inversamente proporcional a la cantidad de puntos de interés que la función DetectAndCompute es capaz de detectar.3 muestra los resultados obtenidos en el atributo bytes de una imagen de ejemplo. el método DetectAndCompute determina los puntos de interés en la imagen y guarda descriptores de éstos en un vector generado por la clase VectorOfKeyPoints. estos puntos se dibujaron mediante el método DrawKeyPoints perteneciente a la clase 53 .

Los patrones de entrada y salida son generados a partir de dos diferentes criterios que se describen a continuación. 4. También. Este patrón de 50 elementos obtenido será entonces uno de los 100 patrones de entrada respectivos que será utilizado para generar tanto la memoria asociativa máxima como la mínima.4 muestra los resultados. de esta manera se estará trabajando con los primeros 50 puntos de interés diferentes en todas las imágenes y serán tomadas como el patrón representativo de cada imagen procesada. los pasos 4. estos aparecían en la misma posición respecto a la original. La figura 4.4 Generación de los patrones de entrada y salida para cada imagen procesada. además. (b) imagen original rotada 90 grados hacia la derecha. se toma únicamente el primer valor de cada 512 elementos del atributo bytes.Features2DToolbox. (a) (b) Figura 4.1 Generación de los patrones de entrada Puesto que bytes guarda 512 elementos para cada punto de interés detectado.4 Puntos de interés dibujados sobre el tatuaje. y puesto que los patrones de entrada necesarios para presentarle a la memoria asociativa necesitan tener cincuenta elementos.4 se repetirán tantas veces como imágenes existan en el banco de imágenes para generar así todos los patrones de entrada necesarios para construir las memorias asociativas (tanto la máxima como la mínima).4. (a): imagen original. se tratará con cien imágenes. para este caso. 54 .3 y 4. 4. se realizaron pruebas volteando las imágenes y comprobando nuevamente que no solo los puntos de interés se dibujaron mayormente sobre el área del tatuaje. Ahora.

almacenados en un vector bidimensional de tamaño 100x100 expresado en la siguiente ecuación: 500 ⋯ 0 𝑌=[ ⋮ 500 ⋮ ] (4. el criterio para formar cada patrón de salida fue el siguiente: cada patrón de salida tiene cien elementos (debido al número de imágenes utilizadas). para este caso. uno para cada patrón de entrada. es decir.5 Generación de las memorias asociativas (Máxima y Mínima) Una vez que se han generado exitosamente los patrones de entrada y de salida que conforman a las cien asociaciones. para el segundo patrón de salida el valor 500 se encuentra en el segundo elemento de dicho patrón.Por último. M y P son iguales a 100 y N es igual a 50. se generaron cien patrones de salida. se tienen cien patrones de salida con cien elementos cada uno. se procedió a realizar las operaciones que conforman a las ecuaciones (3. El índice de la posición en la que se encuentra el valor 500 es igual al número de asociación para dicha salida.7) y (3.2 Generación de los patrones de salida Puesto que se está trabajando con un banco de cien imágenes. Por lo tanto. en donde uno de ellos tiene un valor establecido de manera arbitraria de 500 y los otros noventa y nueve elementos tienen un valor igual a cero. la cantidad de asociaciones totales es igual a cien.2) 0 ⋯ 500 Donde Y representa a todos los patrones de salida generados para el banco de imágenes. por lo tanto. todos los patrones de entrada son almacenados en un vector bidimensional de tamaño NxM.8) para realizar la fase de aprendizaje de la memoria asociativa mínima utilizando para ello al vector tridimensional mencionado en este paso. 4. A través de la teoría establecida en el capítulo 3. y de manera sucesiva se continúa de la misma forma para los cien patrones de salida. se procedió a generar las memorias asociativas máxima y mínima a través de un vector tridimensional de tamaño MxNxP. donde M y P es igual al número de asociaciones y N es igual al número de elementos que conforman cada patrón de entrada. 55 .4. y las ecuaciones (3.5) para realizar la fase de aprendizaje a la memoria asociativa máxima. para el primer patrón de salida el valor 500 se encuentra en el primer elemento de dicho patrón. donde M es la cantidad de asociaciones (para este caso existen 100 asociaciones) y N el número de elementos tomados del atributo bytes (para este caso se tomaron 50 valores). 4.4) y (3.

Mínima Patrones de salida [M. el cual es el número con más valor dentro de todos estos elementos. salida y las memorias asociativas.N.6 Fase de recuperación del algoritmo Una vez teniendo establecidas y almacenadas a las dos memorias asociativas.Máxima [M.1] (MxM) Figura 4.5 Representación de las dimensiones de los vectores utilizados para la generación de las memorias asociativas. la matriz tridimensional creada fue utilizada para guardar los resultados finales de la fase de recuperación de ambas memorias.Para almacenar exitosamente a las memorias asociativas.N. Patrones de entrada (NxM) Vector tridimensional (MxNxP): Mem. se considera una recuperación exitosa y se recupera la imagen correspondiente a la asociación procesada.Asoc. 4. para este caso m=100.0] Mem. El vector recuperado de cien elementos contiene en ellos un único valor igual a 500. La siguiente figura muestra un diagrama representativo de los vectores que conforman a los patrones de entrada. 56 . y la tercera dimensión (P) es utilizada para referirnos a la memoria asociativa en la que nos encontremos. si el índice es igual al número de asociación.Asoc. n=50 y P=100. en donde las primeras dos dimensiones del vector (MxN) son utilizadas para guardar los elementos que conforman a las memorias. se procedió a realizar la fase de recuperación de las 100 imágenes para comprobar cuantas recuperaciones exitosas fueron capaces de lograr cada una de las memorias. Los criterios utilizados para considerar a una recuperación como exitosa son: a) Para la memoria asociativa máxima. P=0 hace referencia a la memoria asociativa máxima y P=1 hace referencia a la memoria asociativa mínima. El índice en donde se encuentra el 500 debe ser igual al número de asociación que se está procesando en ese momento.

esta función indica la inexistencia de una asociación correspondiente a la imagen del tatuaje ingresado. Impresión de datos generada en un contenedor List Box dentro del programa del algoritmo. El índice en donde se encuentra el número positivo debe ser igual al número de asociación que se está procesando en ese momento. para retornar la imagen de su correspondiente asociación del rostro de la persona a la que le pertenece el tatuaje. se agregó una función para realizar nuevamente la fase de recuperación del algoritmo. se considera una recuperación exitosa y se recupera la imagen correspondiente a la asociación procesada. Esta fase de recuperación es realizada para cada una de las imágenes pertenecientes al banco de imágenes y con base en los criterios descritos en este paso se cuenta el número de asociaciones exitosas que logró realizar cada memoria asociativa.b) Para la memoria asociativa mínima. A continuación. se muestran los resultados obtenidos por ambas memorias asociativas: Figura 4.6 Número de asociaciones exitosas que realizó cada memoria. el cual es el número con más valor dentro de todos estos elementos. si el índice es igual al número de asociación. pero esta vez tomando como entrada una sola imagen de tatuaje proporcionada por el usuario. 57 . Finalmente. El vector recuperado de cien elementos contiene en ellos un único valor positivo. Si la imagen proporcionada por el usuario no pertenece al banco de imágenes.

4. Realiza la captura de los puntos de interés de cada imagen y genera los patrones de entrada y salida respectivos al banco de imágenes dados por los pasos 4.4. Realiza la generación de las memorias asociativas Máxima y Mínima utilizando los patrones de entradas y salidas entregados por el botón anterior y realiza el conteo de las asociaciones exitosas que cada memoria logró recuperar mediante la fase de recuperación dados por los pasos 4. Si existe una asociación respectiva a la imagen de entrada.5 y 4.4..7 muestra el formulario creado para ejecutar el algoritmo. c) “Abrir imagen para generar reconocimiento”.2 respectivamente. Los botones creados en el formulario realizan funciones de acuerdo a los pasos descritos en este capítulo: a) “Generar Patrones de entrada y salida”.3.6 respectivamente. Permite abrir un archivo de imagen y evaluar si existe una asociación respectiva a la imagen ingresada. De lo contrario se 58 . El archivo de imagen de entrada es impreso en el contenedor picturebox ubicado en la parte inferior media del formulario.1 y 4. b) “Realizar fase de aprendizaje y recuperación”.7 Estructura de la interfaz gráfica La figura 4. se imprime la imagen del rostro de su respectiva asociación en el contenedor picturebox ubicado en la parte inferior derecha del formulario.Formulario utilizado para ejecutar el algoritmo de reconocimiento. Figura 4.4.7.

59 . e) “Imprimir Yrec_min””. permite visualizar los patrones de salida recuperados por la memoria asociativa mínima. muestra un mensaje indicando la inexistencia de la asociación solicitada. d) “Imprimir Yrec_max”. De la misma forma. este botón permite visualizar los cien patrones de salida recuperados por la memoria asociativa máxima para las cien imágenes pertenecientes al banco de imágenes. Como anexo al algoritmo. dichas recuperaciones son impresas en el contenedor list box ubicado a la derecha de los botones.

RESULTADOS Y CONCLUSIONES En este capítulo se presentarán las conclusiones del presente trabajo y se incluirán las recomendaciones. CAPÍTULO 5 PRUEBAS. aplicaciones y experiencias vividas durante el desarrollo del mismo. 60 .

1 Pruebas 5. se enfocan principalmente al banco de imágenes. 5. esto se realizó recortando las imágenes de manera manual una por una tratando de obtener la mayor cantidad de tatuaje sobre la imagen y guardando la imagen en un formato que tenga la menor cantidad de compresión para no perder detalles de la misma. ya que podría buscarse un banco de imágenes cuya etapa de captura sea realizada con equipo que obtenga las imágenes con una mayor calidad. se procedió a obtener puntos de interés de cada imagen de manera individual y dibujándolos sobre las mismas. estos atributos se encontraban en el vector descriptor y se guardaron los valores del atributo bytes el cual contiene las intensidades de los pixeles que se encuentran en la vecindad dentro del punto de interés. Una vez que los puntos de interés fueron obtenidos. 61 . menor compresión. esto permitió entender cómo funciona la transformada SURF.5.2 Recomendaciones Las recomendaciones que se sugieren para el uso a futuro del presente proyecto. se buscaron los atributos necesarios para poder comenzar la implementación de las memorias asociativas. una mejor segmentación del área del tatuaje. Una vez que el banco de datos se encontraba optimizada. comprender su implementación en código conociendo los argumentos que requiere para realizar la detección de puntos de interés. mejores condiciones de iluminación. se pudo observar que el banco de imágenes debía ser optimizado para facilitar la tarea de procesamiento de imágenes del algoritmo. Finalmente se generaron asociaciones mediante las memorias asociativas morfológicas las cuales permitirán tener almacenadas en memoria patrones asociados a las imágenes procesadas y poder recuperar de manera efectiva el patrón que se requiera mediante imágenes de prueba. etc.1 Conclusiones Al comienzo del desarrollo del trabajo.

dll los cuales no se configuran como cualquier referencia para el lenguaje C#.3 Conocimientos adquiridos Gracias al desarrollo de este algoritmo se pudo obtener un mayor entendimiento acerca de las memorias asociativas. no solo se pudo entender los conceptos a nivel de programación. entonces. se utilizó el vector descriptor junto a su atributo bytes para poder obtener datos que servirían como patrones de entrada a la memoria asociativa. la transformada SURF y el uso de la dependencia de programación EmguCV.4 Experiencias Durante el desarrollo del presente trabajó se presentaron varias dificultades. primeramente. Una segunda problemática fue seleccionar los atributos correctos para presentar a la memoria asociativa. pero estos eran inaccesibles debido a la estructura de la clase. el concepto matemático de las memorias asociativas y la transformada SURF fueron asimilados a un nivel suficiente como para poder pasar de un lenguaje matemático a un lenguaje de programación obteniendo los resultados deseados. la cual al principio fue confusa debido a la configuración específica de cada uno de sus archivos . la configuración de la dependencia de EmguCV. 5. 5. ya que en un principio se quería acceder a los atributos del vector de puntos de interés. Gracias a estos conocimientos. también.Por el lado del algoritmo puede implementarse otro método para la detección de tatuajes buscando un método alternativo a la transformada SURF o a las memorias asociativas para la detección e identificación de tatuajes. 62 .

se procedió a ponerlo a prueba con cada una de las 100 imágenes. Figura 5. las recuperaciones exitosas son representadas con un “1” y las fallidas con “0”. los resultados del algoritmo funcionando con 3 imágenes diferentes presentadas se muestran en la figura 5. Tabla 5.5 Resultados Una vez terminado el diseño del algoritmo. Imagen Recuperación Recuperación Imagen Recuperación Recuperación Memoria MAX Memoria MIN Memoria MAX Memoria MIN 1 1 0 51 1 0 2 1 0 52 1 0 3 1 0 53 1 1 4 1 0 54 1 0 5 1 0 55 1 0 6 1 1 56 1 0 7 1 1 57 1 0 8 1 1 58 1 0 9 1 0 59 1 0 10 1 1 60 1 0 11 1 1 61 1 0 12 1 1 62 1 0 13 1 0 63 1 0 14 1 0 64 1 1 15 1 0 65 1 1 16 1 1 66 1 0 17 1 0 67 1 0 18 1 1 68 1 1 19 1 0 69 1 1 20 1 1 70 1 0 21 1 0 71 1 0 63 .1 Resultados de identificación del algoritmo con 3 tatuajes diferentes.1 Resultados de recuperación para las memorias asociativas.5.1.

22 1 0 72 1 0 23 1 1 73 1 0 24 1 0 74 1 0 25 1 1 75 1 0 26 1 0 76 1 0 27 1 1 77 1 0 28 1 0 78 1 0 29 1 0 79 1 1 30 1 1 80 1 0 31 1 0 81 1 1 32 1 0 82 1 1 33 1 0 83 1 1 34 1 0 84 1 0 35 1 0 85 1 0 36 1 1 86 1 1 37 1 1 87 1 1 38 1 1 88 1 1 39 1 0 89 1 1 40 1 0 90 1 0 41 1 1 91 1 0 42 1 0 92 1 0 43 1 0 93 1 0 44 1 1 94 1 1 45 1 1 95 1 0 46 1 0 96 1 0 47 1 1 97 1 1 48 1 1 98 1 0 49 1 0 99 1 0 50 1 0 100 1 0 Total de 100 36 recuperaciones 64 .

REFERENCIAS 65 .

pdf [5] Hermosillo. Tattoo Recognition Technology Challenge. Recuperado el 3 de julio del 2017 del URL: http://biometrics. (2016). George. Recuperado el 10 de julio del 2017 del URL http://revistas. (2002). Ricardo. José Orlando. Tattoo-ID: Automatic Tattoo Image Retrieval for Suspect & Victim Identification. Memorias asociativas y redes neuronales morfológicas para la recuperación de patrones.nist.IR. (2012). et al. Gabriela.unirioja. [2] Graña Romay.pdf [4] Niño Sandoval. Mei. (1982).pdf [9] Jain. Grother.pdf [7] Ngan. (2006).msu. Manuel.co/ojs_viceinves/index. Uso de redes neuronales artificiales en predicción de morfología mandibular a través de variables craneomaxilares en una vista posteroanterior. Indexación de imágenes hiperespectrales aplicando redes neuronales morfológicas.kr/Courses/g-ai09-2/hopfield82. Recuperado el 3 de julio del 2017 del URL http://www.8078. (Tesis de doctorado). Correlation Matrix Memories. Anil K. Instituto Politécnico Nacional.php/RCTA/article/view/415/ 416 [3] Yáñez Márquez.edu. Patrick.pdf 66 . Recuperado el 5 de diciembre del 2017 del URL https://dialnet.revistas.gov/nistpubs/ir/2015/NIST.org.es/articulo/6055844. Recuperado el 3 de julio del 2017 del URL http://nvlpubs.ac. John. Memorias asociativas basadas en relaciones de orden y operaciones binarias. et al.mx/pdf/cys/v6n4/v6n4a7. Neural networks and physical systems with emergent collective computational abilities.pdf [8] Hopfield. (2016). Cornelio. Recuperado el 20 de mayo del 2017 del URL http://www.edu/Publications/SoftBiometrics/JainLeeJinTattoo07.php/eab/article/download/42774/38855 [6] Kohoen. et al (2007). (2011). (1972).unam. Recuperado el 10 de julio del 2017 del URL https://bi.mx/index. Clasificación de tatuajes como método de identificación forense.scielo. Recuperado el 20 de mayo del 2017 del URL www. México. Quinn. Teuvo.org/documents/Mizraji/Kohonen%201972.latp2016.snu.cse. Maldonado Bautista.unipamplona.Fuentes Documentales [1] Barrón Fernández.

ruta DE LA IMAGEN A ABRIR using System.Imread(nombreIm int cantPuntosInteres = 50.] Yrec_max = new double[100. using System. //En este caso. j < 100]. 100]. { using Emgu. 255). Mat(). //Yrec_max y Yrec_min son los vectores 'Y' de recuperación.Util. consecurtivo de uno en uno using Emgu.] Yrec_min = new double[100. i++) //En este caso using Emgu. surf. Bgr color = new Bgr(0.Read).p] -> La mat_asoc UMat uimageninicial = será un conjunto de p matrices por m imageninicial. el vector 1(p=0) de recuperación tanto máxima como mínima ////////////////////////////////////// deberá ser comparada con el primer Aqui se asignan los valores a los vector 'Y' de asociación original patrones de introducida por el usuario.Concat(contImagenes.ANEXO II Código El siguiente código es parte de las cabeceras El siguiente segmento de código corresponde utilizadas para el programa. int contImagenes = 1.Drawing. razón: se van a guardar 'p'(p debido DescriptoresImagenFinal.CV. PuntosClaveImagenFinal = new //Son 100 elementos debido a que hay VectorOfKeyPoint(). “Generar patrones de entrada y salida”.100].Data. double[. 100 imágenes.UI. using Emgu. 50.CV.DetectAndCompute(uimageninicial.CvEnum. nivel global utilizadas por todas las funciones Mat del programa.Features2D.Collections. 100]. false).CV. i < cantAsociaciones. for (int i = 0. SURF(hessianThresh). agen. y son bidimensionales por la sig null. string nombreImagen. ////// double[.CV. using Emgu.CV. a las funciones que ejecutará el botón using System. de X. y 100 es la cantidad de VectorOfKeyPoint().ToUMat(AccessType. al número de asociaciones) vectores de tamaño 'm'. m es establecida UMat por las filas de Y y n por las filas DescriptoresImagenFinal = new UMat(). 0. using Emgu. utilizadas para detectar los puntos de interés using Emgu. using System. y son 100 asociaciones SURF surf = new double[.] X = new double[50.Tasks. es decir entrada/////////////////////////////// Y1 de asociación.XFeatures2D. float hessianThresh = 400. int cantAsociaciones = 100. j++) 67 .Windows.LoadImageType.Forms.n.png").Generic. filas y n columnas. cantPuntosInteres.CV. "cantAsociaciones=100" using Emgu. abrir cada imagen en el orden using System.Text.PuntosClaveImagenInicial. ".Threading. //[m.ComponentModel.Structure.] Y = new double[100. using System. asociaciones que existirán VectorOfKeyPoint double[. //Contador de imagenes nos ayudará a using System. imageninicial=CvInvoke.CV.] Mat_asoc = new double[100. //Aqui using System. //Todas double[] vectorPuntosInteres = new estas referencias a EMGU son double[50]. Mat imagenfinal = new double[. for (int j = 0.CV.AnyColor)..Cuda. se guarda la cadena de texto con la using System.Linq. 100]. la cantidad de VectorOfKeyPoint elementos por cada patrón de entrada PuntosClaveImagenInicial = new es de 50. nombreImagen = Las siguientes son variables declaradas a string.

i < m. hay que for (int j = 0. ri.Items. respaldo ri] > val_max) val_max = Mat_asoc[ii. } i++) ri = 0. { //Cuando termina de comparar los for (int j = 0. j++) necesario igualar a r=0 para poder { reasignar a 'val_max' al siguiente elemento de la primera matriz para Mat_asoc[i. n = 50. else Y[j. i] = 500. cantidad de elementos de cada patrón ////////////////////////////////////// de entrada y p el numero e ///// Paso 2.Bytes[j * 512]. { ji.Items.Fase //Comparará los mismos elementos de de las diferentes matrices de asociación. r < p. ri < recuperación”.Add("Fase variable que indica el número de de aprendizaje espere. ///La matriz Yr mas los elementos j de la primera matriz(Matriz de máximos) será matriz Xr. if (Mat_asoc[ii.Conseguir los valores asociaciones máximos y mínimos de cada elemento de } las matrices de asociación. comenzar la comparaciòn de nuevo pero r] = Y[i. matriz en el que nos encontramos. ri]..Add("Listo. for (int i = 0. ii++) { lBsalida./////////////// val_max = val_min = ////////////////////////////////////// Mat_asoc[0."). ji. ji. p. i] = } DescriptoresImagenFinal. j++) hace entre los mismos elementos de las { diferentes matrices de asociación if (j == i) Y[j. aprendizaje/////////////////////////// es por esto que la variable que se //////////////////////// incremente es 'r'. i] = 0. j. //J=n . int p = 100. } for (ii = 0. m = 100. guarda en la primer matriz de la } actual memoria asociativa que es la 68 . es < n. r] . un elemento después. ji. ri].j de mi matriz de Mat_asoc[ii.. ji. for (ji = 0. //El elemento i. j primeros elementos de las matrices. asociación r= al elemento i de la 0] = val_max. necesitan declarar afuera de los FOR. ji. ii < m. int ii. 0]. ri++) double val_max.Items. ya que es la lBsalida. formadas. j < tomar en cuenta que la comparación se cantAsociaciones. //Puesto que es necesario utilizar a } los índices fuera de su contexto se contImagenes++. para poder partir a /////// comparar hacia las demás. Aqui se asignan los valores a los //Inicializamos a val_max y val_min patrones de con el primer valor de la primer salida//////////////////////////////// matriz a comparar. { //Estas serán las variables de if (Mat_asoc[ii. r++) ri] < val_min) val_min = Mat_asoc[ii. ////////////////////////Paso 1. { } X[j."). for (int r = 0. i=p donde: n es la lBsalida. 0. r]... ji < n. val_min.X[j.Add("Listo"). El siguiente segmento de código corresponde ji++) a las funciones que ejecutará el botón { “Realizar fase de aprendizaje y for (ri = 0.

comparación del siguiente elemento. j Mat_asoc[ii. 0]. r < p. 0. } Mat_asoc[ii.actual matriz en donde se ha estado variables significa indice solamente y trabajando. for (int r = 0. //Aquí simplemente asignamos el valor val_min = máximo obtenido al elemento Mat_asoc[ii + 1. j++) } { //Re-inicializamos a val_max y val_min Mat_asoc[i.1. ri = 0.este proceso se repetirá val_min. { val_min = for (int j = 0. a la matriz de máximos(mat_maximos) es i++) necesario reasignar todo a cero { excepto 'i'. recordar que en este momento el //Aquí simplemente asignamos el valor elemento 0 de la mat_asoc(es decir. r=0. } entonces asignaremos el elemento [0. ji + 1. i < m. hasta que se termine con todas las //la primera vez se obtiene el filas. val_max = i++) Mat_asoc[ii. es decir.1) if (ii < m . j=0. //Efectivamente se obtendrá el valor //Cuando termina de comparar la minimo primera fila (dada por j) y asignarla for (int i = 0.1) máxima del paso anterior) { for (int i = 0. con el fin de vector recuperacion max. la máximo obtenido al elemento primer matriz de la memoria asociativa correspondiente de la matriz de sobre la cual se ha trabajado tiene en números máximos. Hay que trabajando. es mera referencia. r]. ji. ji. ri]. j. su contenido a la memoria asociativa if (ji < n . ri]. ji + 1. correspondiente de la matriz de } números máximos. 0]. ///La { segunda matriz(Matriz de mínimos) será guarda en la segunda matriz de la //este for es para actual memoria asociativa que es la hacer la suma con los elementos de las actual matriz en donde se ha estado matrices X originales. j. ji. val_max para que comience la j. 69 .. de la 'i') val_min = Mat_asoc[0. if (i < m . ri]. ri].1) val_min = Mat_asoc[i + 1. { //Esto es para evitar a índices de la val_max = matriz inacccesibles. 0] < val_min) val_min = Mat_asoc[i.. 0] + X[j. j++) fila en la que nos encontramos para { asignar el primer elemento de la if (Mat_asoc[i. i < m. } como la primera vez i=0. j en filas y es necesario tener aun la < n. r] = máximos. } 0.0] de la matriz de asociación a //aqui se obtiene el la variable val_max. rebase el tamaño especificado //NOTA: la segunda 'i' en las accediendo a una localidad basura. notese que poder empezar el proceso de nuevo pero apenas hemos salido del primer for(el un elemento después a nivel columna. para poder iniciar la nueva 0] = Mat_asoc[i. comparación de una nueva fila } completas y asignarla a la matriz de Yrec_max[i. siguiente fila en la primera matriz a j. < n. ya que el avance ahora es for (int j = 0. Obteniendo por fin la matriz de elemento 1 de la primera matriz de máximos. recuperación utiilzando mat_maximos ji = 0. 0]. r++) 1] = val_min. que se Mat_asoc[ii + 1.

r]. j. j } < n. j++) ///////////////////////////////////Aqu { i se hace el conteo de cuantas Mat_asoc[i. { 0. //aqui se obtiene el int contRecMin = 0.1) for (int j = 0. i++) i]==500) contRecMax++. j //Este for es para: < n. 1] . 1]. 0. accediendo a una localidad basura. 1] + X[j. j++) //Esto es para evitar a indices de la { matriz inacccesibles. } } } } //este for es para restar de nuevo los valores de la //Este for será par primera asociación X para no afectar a obtener los vectores de recuperación nuestra memoria asociativa y que pueda mínima. j < //Efectivamente se obtendrá el valor 100. i < m. j. i < m. rebase el tamaño especificado 0] = Mat_asoc[i.Items. 1]. j++) 70 . j < n. apenas hemos salido del segundo for(el for (int i = 0. j++) ///j->m minimo { for (int i = 0. que se Mat_asoc[i. j. notese que double contAux = 0. vector recuperacion min. j. 1] > val_max) val_max restar de nuevo los valores de la = Mat_asoc[i. for (int j = 0. j val_max = Mat_asoc[i + 1. j. es decir los vectores seguir trabajando con sus valores 'Y'(recuperados) utilizando la matriz originales de mínimos. originales //la primera vez se obtiene el for (int i = 0. 1]. es decir. r] = seguir trabajando con sus valores val_max. j. asociaciones exitosas logró cada 1] = Mat_asoc[i. 0] . } { if //este for es para (Mat_asoc[i. { } for (int j = 0. elemento 1 de la primera matriz de i++) recuperación utilizando mat_maximos { if (i < m . int contRecMax = 0. } i++) } { for (int j = 0. j. i < m.X[j. r].// for (int i = 0. r < p. r]. memoria asociativa(max y } min)///////////////////////// } lBsalida. j++) Todo lo que tiene la matriz de minimos { se lo pasamos a la de respaldo cada Mat_asoc[i. primera asociación X para no afectar a } nuestra memoria asociativa y que pueda Yrec_min[i. de la 'i') i++) ///i->p=num_ascociaciones val_max = Mat_asoc[0.X[j. if(Yrec_max[j.Add("listo"). i < m. for (int r = 0. i < 100. que incrementa 'r' que es el numero de 1] = Mat_asoc[i. < n. matriz en el que nos encontramos } for (int i = 0. i++) r++) { { for (int j = 0. j.

i < 100.ShowDialog() == VectorOfKeyPoint DialogResult. //Estas serán las variables imageninicial. el vector 1(p=0) de recuperacion i]. //Yrec_maxAUX y Yrec_minAux son los vectores 'Y' de recuperación. de respaldo int p = 100. lBsalida. tanto maxima como mínima deberá ser for (int j = 0. es decir Y1 de asociación.Read).OK) //Si se abrió una PuntosClaveImagenFinal = new imagen de manera correcta se guarda la VectorOfKeyPoint().FileName. { UMat double val_max.ToUMat(AccessType. Bgr(0. pBCargar. if (Yrec_min[j.Add(contRecMax + " Yrec_minAux = new double[100]. bidimensionales por la sig razón: se i++) ///i->p=num_ascociaciones van a guardar 'p'(p debido al numero { de asociaciones) vectores de tamaño contAux = Yrec_min[0. Yrec_maxAux = new double[100].Items.AnyColor). asociaciones"). 71 .Imread(nombreIm imagen para generar reconocimiento” agen.Items. UMat int DescriptoresImagenFinal = new UMat().min se logró con números nombreImagen = positivos solamente openFileDialog1.LoadImageType.Add("La con la ruta DE LA IMAGEN A ABRIR memoria asociativa MIN recuperó "). 255). float El siguiente segmento de código corresponde hessianThresh = 400. double[] lBsalida. new Mat(). i] double[] > contAux) contAux=Yrec_min[j. OpenFileDialog openFileDialog1 = new Mat imagenfinal = OpenFileDialog(). ////Si la cantidad de elementos que tiene al terminar de analizar la asociación.Items. y son for (int i = 0. j < comparada con el primer vector 'Y' de 100. try VectorOfKeyPoint { PuntosClaveImagenInicial = new if VectorOfKeyPoint(). lBsalida. indiceRecuperacion=-1.i]. 0. m = 100. 'm'. a las funciones que ejecutará el botón “Abrir Matimageninicial=CvInvoke. nos estamos metiendo con el índice de entonces obtuvo de manera efectiva una asociaciones P asociación porque las asociaciones recuperadas correctamente por la string memoria asoc. cada patrón de salida.Add("La double[] memoria asociativa MAX recuperó "). Bgr color = new double contRecAux. } //Aqui se guarda la cadena de texto lBsalida. j++) ///j->m asociación original introducida por el { usuario. que es contRecMin++.FromFile(nombreImagen). imagen leida por el sistema. en este caso no y si contAux es un número positivo. vectorPuntosInteres = new double[50].Image = Image. } //Donde el 100 que tienen como if (contAux > 0) argumento es por la variable m.Add(contRecMin + " //Se muestra en el picture box la asociaciones"). string nombreImagenRecuperada. uimageninicial = val_min. (openFileDialog1.Items. n = 50. cadena tde texto con la ruta de la SURF surf = new imagen elegida por el usuario SURF(hessianThresh).

j < n. que se lBsalida. { DescriptoresImagenFinal. j. Hay que 0. 0]. j < n.Add("-- ----------------------------------"). i < m. la for (int j primer matriz de la memoria asociativa = 0. vectorPuntosInteres[j]. 0. 0] + ------------------"). nótese que apenas hemos salido del if (Yrec_maxAux[i] > contRecAux) { primer for(el de la 'i') contRecAux = val_min = Yrec_maxAux[i]. } lBsalida. 0.Items. } for(int } i=0.DetectAndCompute(uimageninicial. PuntosClaveImagenInicial. //Esto es para evitar a indices de la matriz inacccesibles.Items. j < n. DescriptoresImagenFinal. //El i+1 es porque los nombres de los //Efectivamente se obtendrá el valor archivos que se abrirán empiezan en 1 mínimo y terminan en 100 for (int i = } 0. j. } } //A partir de //este for es aqui se realiza la fase de para restar de nuevo los valores de la recuperación solamente con el patrón primera asociación X para no afectar a de entrada detectado por la nuestra memoria asociativa y que pueda transformada SURF seguir trabajando con sus valores //este for es originales para hacer la suma con los elementos for (int i = de las matrices X originales. 0] < val_min) val_min = Mat_asoc[i.i++) { //aqui se obtiene el vector recuperación max. es decir. i++) recordar que en este momento el { elemento 0 de la mat_asoc(es decir. j++) { Mat_asoc[i. lBsalida. 0] = lBsalida. 0] maxima del paso anterior) = Mat_asoc[i. i < //la primera vez se obtiene el cantPuntosInteres. contRecAux = 0.Items.Clear(). for (int i = 0.Bytes[i*512].indiceRecuperacion=i.Items.Add(vectorPuntosInteres rebase el tamaño especificado [i]). 0] - for (int i = vectorPuntosInteres[j]. Yrec_maxAux[i] = val_min. = 0. 0]. accediendo a una localidad basura. j. false). 0.Add("------------------ Mat_asoc[i. j. 0].Items.i<cantAsociaciones. for (int j surf. if (Mat_asoc[i. j. i++) } { } for (int j = 0. i < m. i++) { 72 . i < m. lBsalida.1) val_min = Mat_asoc[i + 1. i++) elemento 1 de la primera matriz de { recuperación utilizando mat_maximos if (i < m vectorPuntosInteres[i] = . } Mat_asoc[0.Add(Yrec_maxAux[i]). j. j++) null. j++) sobre la cual se ha trabajado tiene en { sdu contenido a la memoria asociativa Mat_asoc[i.

Items. ".Show("El archivo seleccionado no es un tipo de imagen válido").Add(Yrec_max[j. } El siguiente segmento de código corresponde a las funciones que ejecutará el botón “Imprimir Yrec_max”.Add("Yrec_min:").lBsalida.Show("No se pudo encontrar una asociación para la imagen de entrada"). j < 100.FromFile(nombreImagenRecuperada) . if (indiceRecuperacion >= 0 && contRecAux == 500) { nombreImagenRecuperada = string.Items.Add("-----------"). i++) 73 . i < 100. pBAsociacion.Items.Add(indiceRecuperacion) . lBsalida.Items.PNG"). } El siguiente segmento de código corresponde a las funciones que ejecutará el botón “Imprimir Yrec_min”. i < 100. } lBsalida.Image = Image. for (int i = 0. i++) { for (int j = 0. for (int i = 0. lBsalida. (indiceRecuperacion + 1). i]).Items. } else MessageBox. lBsalida.Items. j++) { lBsalida. lBsalida. } } catch (Exception ex) { MessageBox.Clear().Clear().Concat("A".Items.Add("Yrec_max:").