Tuesday, November 18, 2014

Programación lúdica: El Dibujante Electrónico 1.0


La computadora es una herramienta versátil. Podemos hacer cálculos extremadamente complejos, jugar videojuegos, pintar como un gran artista o bien, procesar textos, entre tantas otras cosas que se pueden hacer con ste genial invento. De hecho, probablemente la computadora ha atraído a cada vez más personas gracias a que las cosas se ven en modo gráfico y los programadores se han empeñado en mostrarnos la analogía gráfica sobre la consola de texto, el modo terminal, indicándonos de alguna manera que una imagen vale más que mil palabras.


Partiendo de esta idea, hay en el mercado una buena cantidad de programas para dibujar. Ellos tienen una serie de heramientas que permiten cambiar colores, grosores de las plumas con las que pintamos, amén de manipular gráficamente las imágenes para hacer operaciones increíbles en términos de dibujo como cortar regiones, pegarlas donde se nos antoja, etcétera. Pensando en esto alguna vez pensé que sería un buen ejercicio escribir mi propio programa de "Paint", pero la verdad me daba mucha flojera rehacer lo que se ha hecho un sinfín de veces. Así que un día, viendo un pequeño robot que dibuja lo que ve en una fotografía, se me ocurrió hacer lo mismo, nada más que obviamente obviando el hardware. Nada de microcontrolador Arduino, cables y programa en Processing. No, pensé que podía simular lo que el robot que dibuja hace en papel yo haciéndolo en la pantalla de video. Y es así como nació "el dibujante electrónico".

La idea básicamente es hacerse de una foto, preferiblemente el rostro de alguien, aunque no es necesaria esta condición. El programa toma la imagen, hace una serie de procesos sobre ella y entonces decide pintarla. El resultado final se parece en general a la fotografía dada. Desde luego, hay imágenes más ad hoc para funcionar con este programa que otras, sin embargo, aquí lo que cuenta es la idea en sí.


El programa, algunos pueden creer, usa algunas técnicas de inteligencia artificial para reconocer el rostro y entonces hallar las características más relevantes del mismo, pero esto es demasiado complejo para hacerlo en un programa de esta naturaleza. Aquí lo que se hace el programa es usar una rutina para hallar los bordes (llamada canny edge detector), la cual nos da una imagen blanco y negra, en donde los puntos blancos son precisamente los bordes. El siguiente paso es invertir esa imagen para que quede positiva, es decir, puntos negros sobre fondo blanco. Finalmente se usa el filtro dilatación (filtro mínimo), para engrosar un poco los bordes. Con todo esto, el programa toma la imagen procesada y pinta sobre las regiones con puntos negros. Para ello se usa un pincel a manera de spray, pero con muy poca dispersión.

El resultado final es satisfactorio, pero hay cosas que pueden mejorarse. Una de ellas es que el programa pueda usar una webcam y capturar la imagen deseada, para así procesarla de inmediato. Esto daría un efecto como de "más inteligencia", aunque finalmente está procesando una imagen, una foto. Otra mejora es hacer que pinte más como un robot, es decir, que haga los trazos como si pasara sobre el papel, en este caso la región donde está pintando la imagen. Eso daría un efecto más realista.

A quien le interese este programa, escríbame a morsa@la-morsa.com y se lo mandaré por correo electrónico.

No comments: