¿Se puede encontrar a Wally con Mathematica?

Mathematica es un software científico, creado por la empresa WolframAlpha, utilizado en su mayor parte por matemáticos, ingenieros, y otras personas del área de las ciencias exactas.

El programa tiene su propio lenguaje de programación, que sirve para plantear problemas y programar posibles soluciones para el mismo. A partir de esto, en Stack Overflow se comenzó una pregunta sobre si era posible programar un código en Mathematica para encontrar a Wally (¿no conocés a Wally?) en una de sus famosas imágenes.

El blog matemático Gaussianos hizo una buena reseña sobre ese thread con explicaciones sobre el asunto. El código propuesto es el siguiente (se necesita Mathematica 8):

1
2
3
4
5
6
7
8
9
10
11
waldo = Import["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/
Scenes/DepartmentStore.jpg"];
red = Fold[ImageSubtract, #[[1]], Rest[#]] &@ColorSeparate[waldo];
 
corr = ImageCorrelate[red,
Image@Join[ConstantArray[1, {2, 4}], ConstantArray[0, {2, 4}]],
NormalizedSquaredEuclideanDistance];
 
pos = Dilation[ColorNegate[Binarize[corr, .12]], DiskMatrix[30]];
 
found = ImageMultiply[waldo, ImageAdd[ColorConvert[pos, "GrayLevel"], .5]]

La explicación del algoritmo utilizado es sencilla. Primero se carga la imagena utilizar y se filtran todos los colores que no sean el rojo (por la camiseta de Wally). Luego se calcula la correlación entre esa imagen y un patrón en blanco y negro, para identificar las rayas de la camiseta. Luego se seleccionan los píxeles con la correlación más alta y se dibuja un círculo alrededor, y finalmente se combinan ambas imágenes.

Utilizando esto como imagen original,

el resultado conseguido sería el siguiente:

El código parece funcionar perfecto, pero no hay que emocionarse porque con otras imágenes puede fallar. Sin embargo, sirve para ver el poder que tiene este software y que en pocas líneas de código se pueden hacer cosas interesantes como éstas!

Latest Comments

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.