Preprocesamiento
Aislamiento de los folículos
Teniendo en cuenta que nustro algoritmo se basa en el patrón de los folículos del gato para identificar al individuo, nos pareció importante poder aislar dicha zona, donde la estructura relevante sea el patrón y no se vea contaminada por otra información que pueda ser perjudicial al algoritmo, como pueden ser los patrones del pelo, por ejemplo.
Buscando hacerlo de forma automática, decidimos hacer uso de un detector de características faciales de gatos ya creado, basado en machine learning. El mismo toma como entrada una foto de un gato y retorna las coordenadas de algunos puntos clave de la cara del mismo, en particular, las caracteristícas que son de nuestro interés como la posición del hocico, los ojos, la barbilla y los laterales de las orejas, así como una imagen resaltando estos puntos relevantes. En la figura 1 presentamos un ejemplo del detector aplicado sobre un gato de nuestra base:
En muchas imágenes de nuestra base de datos, los puntos clave del gato no eran visibles, lo que impedía el correcto funcionamiento del detector de puntos clave. Por lo tanto, nuestra base de datos se redujo a aquellas imágenes en las que el gato estaba de frente a la cámara y su cabeza era completamente visible.
Una vez logramos obtener estos puntos significativos de la imagen, pudimos determinar una forma de estandarizar el recorte automático de la zona de interés, sabiendo que la msima se encontrará siempre en la misma posición relativa a los ojos, orejas y hocico en todos los gatos. En nuestro caso decidimos hacer el recorte los bigotes derechos e izquierdos de forma separada, de manera que posteriormente pudieran ser procesados de forma independiente y usados como una doble validación a la hora de la clasificación como "bigotes del mismo individuo" o "bigotes de individuos distintos".
Usando esta información, creamos una función de recorte automático, la cual tiene como entrada la foto de un gato y retorna una imagen del recorte de los bigotes del lado derecho y otra análoga, de los bigotes del lado izquierdo. En la siguiente figura presentamos un ejemplo de la entrada y salida para uno de los gatos de nuestra base:
Al observar los recortes obtenidos, notamos que en casos como el de Diva hay información adicional alrededor de los folículos. Al realizar pruebas de umbralización, vimos que esta información adicional afectaba significativamente la nitidez de las estructuras que nos interesan. A su vez, por las dimensiones particulares de cada gato, estas imágenes no tienen un tamaño estandarizado, lo que notamos posteriormente que dificultaría el matcheo. Teniendo esto en cuenta decidimos hacer una homografía previa para transformar todas las imágenes de bigotes derechos e izquierdos a un mismo tamaño y a una posición en la cual la estructura de interés estuviera ubicada en una zona conocida para luego poder hacer un segundo recorte, esta vez mas específico, donde hubiera menos información extra.
Una vez hecho este segundo recorte menos permisivo obtenemos las siguientes imágenes de los bigotes
Luego de realizar esta homografía, nuestras imágenes están en condiciones de pasar a la etapa de umbralización, en la cual buscamos aislar los píxeles del patrón de puntos del resto de la imágen.