Un día me encontraba almorzando y comencé a jugar con la comida, cree algunos rostros, después me pregunte a mi mismo: ¿sería posible automatizar este proceso?. Así fue como nació la idea de Megabite que poco tiempo después se convirtió en realidad gracias a Aaron Randall.
¿Cómo funciona?
Una vez que es tomada una foto con la aplicación Megabite esta analiza la imagen para detectar y extraer los elementos de manera individual, después estos elementos son reorganizados para formar un rostro.
La aplicación realiza los siguientes pasos para llevar a cabo el resultado final “un rostro de comida”:
Preparación de imagen
El primer paso es que el usuario tome una foto con la aplicación, que luego se cambia el tamaño de 1.000 x 1.000 píxeles (este tamaño es perfecto para reducir la cantidad de tiempo para procesar la imagen, y mejorar la calidad de imagen) y, a continuación es recortada a un imagen circular:
Detección y filtrado de contornos
El siguiente paso es identificar los elementos individuales de la imagen circular, y determinar los contornos.
Para ello, la aplicación realiza lo siguiente:
- con la imagen recortada [1], la aplicación aplica el operador detector de bordes de Canny [2], y extrae las imágenes planas tricolor [3,4,5]
El detector de bordes de Canny utiliza un algoritmo multi-etapa para detectar una amplia gama de bordes en imágenes. Fue desarrollado por John F. Canny en 1986. Más información.
- con el Canny y las imágenes en plano de color, la función finding contours de OpenCV es utiliza para extraer contornos (y la información jerárquica) de cada imagen. En este ejemplo, un montón de contornos son detectados y resaltados en rojo [6].
La función finding contours de OpenCV se utiliza para extraer contornos de imágenes. Más información.
- siguiente, un primer paso de filtrado de contorno rechaza contornos no convexos (por ejemplo, contornos abiertos como una forma de ‘C’), y los contornos exteriores de una superficie sensible (demasiado grande / pequeño) [7]
- Finalmente, el filtro de contorno elimina duplicados (contornos similares basado en el tamaño y la ubicación), y los contornos hijos (contornos contenidos dentro de un contorno más grande), que por ejemplo, quita los contornos de yema de huevo del interior del contorno blanco del huevo [8] .
Extracción de contornos
Para cada uno de los 6 contornos detectados, la aplicación corta el contorno de la imagen de origen, y reduce cada uno a su rectángulo delimitador mínimo. Lo hace mediante el uso de cálculos de rotación. Se logra el resultado que vemos a continuación en el gif.
El MBR de una geometría es la geometría delimitadora formada por las coordenadas (X,Y) mínimas y máximas.
Una vez que este proceso ha finalizado para los 6 contornos, tenemos las siguientes imágenes con su rectángulo delimitador mínimo:
Colocar las imágenes extraídas en moldes
Aquí es donde sucede la magia. La aplicación tiene un conjunto predefinido de plantillas – un grupo de polígonos simples – que pueden ser utilizado como base para la organización de las imágenes extraídas. En esta aplicación demo, se definió 3 plantillas de destino, que van de 3 a 6 polígonos :
El paso siguiente que realiza la aplicación es:
- selecciona el molde basado en el número de imágenes extraídas – en este ejemplo, se extrajeron 6, así que se selecciona la plantilla con 6 polígonos.
- las imágenes extraídas y plantillas de polígonos se clasifican en orden de tamaño, mayor a menor, para después ser emparejados.