Encuentra a Wally con Mathematica…pero sólo a veces

Hace algo menos de un mes, en este post de Genbeta Dev nos mostraban una pregunta que se había hecho en Stack Overflow donde se comentaba, agarraos a la silla, si sería posible encontrar a Wally con el programa Mathematica.

¿Cómo? ¿Usar Mathematica para encontrar a Wally (Waldo en inglés) en una de sus famosísimas láminas? Cierto es que Mathematica tiene una potencia bestial como software matemático, pero de ahí a poder usarlo para encontrar a Wally…

Pues sí, se puede, aunque no siempre. Vamos a explicar un poco la información que nos ofrecen en Stack Overflow.

Para comenzar, vamos a usar esta imagen, una de las típicas del famoso juego de buscar a Wally:

Antes de seguir, os animo a que le dediquéis un rato a intentar encontrar a Wally a la vieja usanza.

¿Lo habéis encontrado? Bueno, no importa, vamos a ver y comentar el código que se propone en Stack Overflow para encontrar a Wally (se necesita Mathematica 8):

  • Primero se carga la imagen y se filtran todos los colores que no sean rojos:

    waldo = Import["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/
    Scenes/DepartmentStore.jpg"];
    red = Fold[ImageSubtract, #[[1]], Rest[#]] &@ColorSeparate[waldo];

  • Después se calcula la correlación entre esa imagen y un patrón simple en blanco y negro para encontrar las transiciones de color rojo y blanco en la camiseta (las rayas, vamos):

    corr = ImageCorrelate[red,
    Image@Join[ConstantArray[1, {2, 4}], ConstantArray[0, {2, 4}]],
    NormalizedSquaredEuclideanDistance];

  • Ahora se seleccionan los píxeles con una correlación suficientemente alta y se dibuja un círculo blanco a su alrededor:

    pos = Dilation[ColorNegate[Binarize[corr, .12]], DiskMatrix[30]];

    Hay que tener un poco de cuidado con el nivel que aparece en Binarize, ya que si es demasiado alto aparecen muchos falsos positivos.

  • Al final se combina el resultado con la imagen inicial:

    found = ImageMultiply[waldo, ImageAdd[ColorConvert[pos, "GrayLevel"], .5]]

Y con todo esto nos aparece el señor Wally:

Parece increíble, ¿verdad?

Pero no es oro todo lo que reluce. El código anterior dista mucho de ser infalible. Con la misma imagen que hemos tratado hay que hilar muy fino con algunos detalles, principalmente con el valor que va en Binarize, como dijimos antes (por ejemplo, con un valor de .16 ya nos aparecen dos falsos Wally). Pero lo peor viene cuando cambiamos de imagen. Si usamos ésta:

con .12, no nos aparece nada. Si vamos subiendo poco a poco ese nivel obtenemos que con .19 sale algo, pero no es Wally, con lo que el código no nos serviría en este caso. Podéis probar con otras imágenes y veréis que la cosa es más complicada de lo que parece. Por tanto, tendremos que seguir buscando a Wally con nuestros ojos y mucha paciencia, como toda la vida…


Como habréis observado, la descripción de cada paso del código que os he puesto no es mía, sino que básicamente la he traducido de Stack Overflow. Por desgracia mis conocimientos de Mathematica no llegan a comprender en su totalidad el código, por lo que ahora mismo no sé si modificando algún otro detalle del mismo podríamos mejorarlo lo suficiente para adaptarlo a cualquier imagen posible. Por ello os pido a quienes controléis Mathematica que nos contéis qué mejoras se os ocurren para que podamos ir probando.


Actualización: Más información sobre el tema en estos dos posts de keshav[saharia_].com:

Share

Autor: ^DiAmOnD^

Miguel Ángel Morales Medina. Licenciado en Matemáticas y autor del blog Gaussianos. Puedes seguirme en Twitter o indicar que te gusta mi página de Facebook.

1 comentario

  1. Jajaja los que nos faltaba Mathematica es más omnipotente aún de lo que sabía 🙂

    Publica una respuesta

Trackbacks/Pingbacks

  1. Bitacoras.com - Información Bitacoras.com... Valora en Bitacoras.com: No hay resumen disponible para esta anotación...
  2. ¿Se puede encontrar a Wally con Mathematica? | Codigo Geek - [...] blog matemático Gaussianos hizo una buena reseña sobre ese thread con explicaciones sobre el asunto. El código propuesto es…
  3. Buscando a Wally usando Mathematica | CyberHades - [...] empieza en StackOverflow, y luego en el blog matemáticos Gaussianos aparece el siguiente código como una posible solución (el…

Puedes utilizar código LaTeX para insertar fórmulas en los comentarios. Sólo tienes que escribir
[latex]código-latex-que-quieras-insertar[/latex]
o
$latex código-latex-que-quieras-insertar$.

Si tienes alguna duda sobre cómo escribir algún símbolo puede ayudarte la Wikipedia.

Y si los símbolos < y > te dan problemas al escribir en LaTeX te recomiendo que uses los códigos html & lt; y & gt; (sin los espacios) respectivamente.

Envía un comentario

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

Uso de cookies

Este sitio web utiliza cookies para que tengas la mejor experiencia de usuario. Si continúas navegando estás dando tu consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies. Más información sobre las cookies <aquí..

ACEPTAR