Un mosaico es una imagen compuesta tradicionalmente por pequeñas piezas de algunos materiales, como piedra o cristal. Un fotomosaico es una imagen digital como la que se muestra en la siguiente figura (ver ilustración inicial de este artículo), la cual está hecha de pequeñas imágenes digitales pegadas por algún programa. Los fotomosaicos se le acreditan a Robert Silvers, quien desarrolló una técnica cuando estudiaba en el MIT. Silvers más tarde fundó RunAway.

Este reto busca que los programadores interesados escriban un programa que pueda hacer fotomosaicos considerando algunas características interesantes: ¿Qué tan grande puede ser un fotomosaico antes de que se pierdan los detalles de la imagen original? ¿Cuántas fotos deben tenerse para crear el fotomosaico? ¿Cuántas repeticiones se pueden tener antes de que el fotomosaico se vuelva monótono?

El algoritmo fundamental de los fotomosaicos puede entonces verse así:

  1. Defínase la imagen fuente.
  2. Cuadricule la imagen.
  3. Encuentre la imagen más cercana en color a cada región
  4. Sustituya esa región por la imagen hallada.
  5. Haga este proceso para toda la imagen

Para poder realizar el reto, se han planteado las siguientes bases:

  1. Hay que usar una biblioteca de imágenes específica (5544 fotos de 32 bits de resolución), las cuales pueden descargarse del siguiente sitio o bien de este otro. La imagen a fotomosaiquear, valga la expresión, es la de Ilse, la cual pueden copiar precisamente de este artículo directamente.
  2. El programa debe poder generar un fotomosaico contemplando parámetros que pueden variar como tamaño del fotomosaico, es decir, de qué tamaño son cada una de las pequeñas fotos que arman el fotomosaico final o el tamaño final del fotomosaico. Por ejemplo, se puede dividir la imagen en regiones de 10×10 pixeles y querer que cada foto sea de 30×30 pixeles, haciendo 9 veces más grande el resultado de salida.
  3. El resultado, el fotomosaico de Ilse, debe ser de 9 veces el tamaño la imagen original y debe ser enviado en formato jpg.

¿El premio? Un iPod Touch, el cual ha sido donado por La Fundación Morsa para apoyar la programación libre y de código abierto en asociación con unocero.com, una taza con el logotipo de la Morsa y Microsoft, a la mejor solución. Si el ganador vive en el DF, se le entregará directamente el premio. Si vive en provincia, se le mandará hasta su domicilio.

Microsoft está apoyando esta iniciativa de la Programación Lúdica y hay un nuevo modelo de tazas creadas para tal efecto.

El reto es solamente para quienes residan en la República Mexicana y se termina, desde el momento de la publicación de este artículo, 30 días naturales después de esta fecha.

Evidentemente, quien gane será anunciado en unocero y hasta tendrá sus quince minutos de fama. Sus programas me los pueden mandar a morsa@la-morsa.com y pueden escribirse en cualquier lenguaje. No tienen que mandar la colección de fotos, pues ya la tengo. Es importante señalar que hay que mandar el código fuente, el ejecutable (si procede) y el archivo de resultados pedido. Debe además indicar las instrucciones para poder ejecutar su código.

Igualmente, se pide una explicación breve de la estrategia usada. Código documentado tiene más posibilidades de ser considerado el ganador. El fotomosaico ganador, desde luego, será el que mejor se vea, el que tenga menos imágenes repetidas, que se vea menos monótono, que haga blending de manera que sea sutil, etcétera. El código que se envíe debe poderse hacer todo directamente desde el propio programa o explicar si se requieren más de un programa para realizar la función que dé el reslultado esperado.

Yo evaluaré los fotomosaicos resultantes y la decisión es inapelable. Véase el video para darse una idea de lo que hay que hacer.

Imagen a procesar

 

Cabe señalar que este concurso busca simplemente alentar el trabajo de la programación y mostrar que puede ser lúdica. Es un concurso de buena fe. Si hay, por ejemplo, dos o más respuestas satisfactorias, ganará quien la haya mandado primero. El ganador cede su código fuente a la comunidad. Es decir, se promueve el código abierto.