Este estaba molestando durante el fin de semana: ¿Qué es una buena forma de resolver los ¿Dónde está Waldo? [‘Wally’ fuera de América del Norte] puzzles, usando Mathematica (procesamiento de imágenes y otras funciones)?

Aquí es lo que tengo hasta ahora, una función que reduce la complejidad visual un poco de atenuación
algunos de los no-color rojo:

whereIsWaldo[url_] := Module[{waldo, waldo2, waldoMask},
    waldo = Import[url];
    waldo2 = Image[ImageData[
        waldo] /. {{r_, g_, b_} /;
          Not[r > .7 && g < .3 && b < .3] :> {0, 0,
          0}, {r_, g_, b_} /; (r > .7 && g < .3 && b < .3) :> {1, 1,
          1}}];
    waldoMask = Closing[waldo2, 4];
    ImageCompose[waldo, {waldoMask, .5}]
]

Y un ejemplo de una dirección URL donde esta ‘obras’:

whereIsWaldo["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/DepartmentStore.jpg"]

(Waldo es por la caja registradora):

¿Cómo puedo encontrar a Wally con Mathematica?

  • arriba a la izquierda, una mesa con un montón de zapatos, una caja registradora y Waldo cerca de la esquina de la mesa.
  • El mathematica propuesta fue cerrada por varias razones, sin embargo son lo que nos permite ver si podemos poner en marcha mediante la creación de un nuevo. Nos gustaría su ayuda, si usted quiere.
  • Echa un vistazo a este Meta post: meta.stackexchange.com/questions/116401/…
  • Como un estudiante de Doctorado en la visión por ordenador estoy tan tentado a dar a este un tiro… pero debo resistir. Para lo que vale me gustaría ir para el Histograma de Gradientes Orientados + de ventana deslizante SVM, como en este muy influyente trabajo (advertencia: pdf).
  • «¿Dónde está Wally.» >.<
  • Podemos cambiar la pregunta para apoyar a otros idiomas? Pensé en hacerlo con Matlab
  • Si sólo había cosas más importantes que hacer con nuestro tiempo… 🙂
  • En su pregunta, usted podría encontrar a Wally mirando a la selección que tiene la mayoría de los de blanco. :/
  • Sólo para tu INFORMACIÓN Waldo no se pueden ver en la imagen debido a la compresión y a baja resolución.
  • Consulte smbc-comics.com/?id=3222 (en la Mañana del sábado los Cereales para el Desayuno webcomic). En esa franja, donde está Waldo/Wally rompecabezas se resuelve por «software de reconocimiento facial».

5 Comentarios

  1. 1635

    He encontrado Waldo!

    ¿Cómo puedo encontrar a Wally con Mathematica?

    Cómo lo he hecho

    Primero, estoy de filtrado de todos los colores que no son el rojo

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

    Siguiente, estoy calculando la correlación de esta imagen con un sencillo en blanco y negro patrón para encontrar el rojo y el blanco de las transiciones en la camiseta.

    corr = ImageCorrelate[red, 
       [email protected][ConstantArray[1, {2, 4}], ConstantArray[0, {2, 4}]], 
       NormalizedSquaredEuclideanDistance];

    Yo uso Binarize para seleccionar los píxeles de la imagen con un nivel suficientemente alto de correlación y dibujar un círculo blanco alrededor de ellos para confirmarlas mediante Dilation

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

    Tuve que jugar un poco con el nivel. Si el nivel es demasiado alto, demasiados falsos positivos son recogidos a cabo.

    Finalmente estoy combinando este resultado con la imagen original para obtener el resultado por encima de

    found = ImageMultiply[waldo, ImageAdd[ColorConvert[pos, "GrayLevel"], .5]]
    • Ha considerado el uso de Waldo como la plantilla en lugar de rayas rojas y blancas? Ya que muchas veces, el rojo-blanco rayas son utilizados para confundir la búsqueda 🙂
    • Estoy seguro de que hay formas más sofisticadas para encontrar a él como el uso de su cabeza. Blanco y negro patrón fue el más sencillo de lo que podía pensar fuera y funcionó de inmediato, así que no trate a los otros.
    • Si no te importa, he publicado en el «Lo que está en su Mathematica herramienta de bolsa?», pregunta (stackoverflow.com/a/8480026/312124)
    • Mientras Heike la solución es grande, yo no estaría tan rápido para empaquetarlo en un WhereIsWaldo función, ya que no es una solución general. Heike ella misma ha señalado que los niveles que se juegan alrededor antes de que usted puede obtener un resultado positivo. A ver lo que quiero decir, probar su empaquetado función de como es en "http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/AtTheBeach.jpg" Es más difícil con este.
    • Maldita sea, tienes razón. Probablemente ayudaría a tomar en cuenta sus características generales.
    • Esta imagen es más complicado: Waldo. Sin embargo, creo, que tener algo que se puede destacar el potencial de Waldos es todavía útil (para algunos definición de ‘útil’.) (Esto me recuerda a algunas de las cosas iPhoto a veces se identifican como un rostro en nuestra colección de fotos…)
    • Me estremezco de imaginar esas cosas… 😉
    • Por favor, consulte esta Meta post: meta.stackexchange.com/questions/116401/…
    • Parece que no han entendido bien las reglas de ¿Dónde está Waldo. Este es claramente la trampa.
    • Y luego ver a su «algorítmica de problemas» infierno: trezoid.com/gubbins/WallyHell.jpg (El real es en realidad la parte inferior derecha en la imagen)
    • ¿cuál es la diferencia?
    • El hecho de que todos esos métodos esencialmente sólo un círculo la imagen entera, no encontrar nada útil…
    • ¿Qué tan rápido es Mathemathica para esto? En comparación con algo que iba a escribir en su propia desde cero.
    • Eso es bastante simple imagen porque yo sólo aviso a otras dos personas vestidas de blanco-rojo despojado de las camisetas. Impresionante, nada menos.
    • ¿Su jefe sabe lo que está haciendo ahora?
    • No tengo una licencia de Mathematica y 300 euros solo para jugar un poco con el kit de herramientas de procesamiento de imagen parece ser un poco caro.. tal vez voy a tratar más adelante el uso de opencv.
    • Me refiero a lo que es la diferencia de Waldo de los otros Waldos en esa imagen?
    • Mientras que este es un buen hack, simplemente no funciona. Se requiere un ajuste manual y sólo funciona en una sola imagen. No entiendo por qué esto es upvoted e incluso elegido como una respuesta. Se desalienta a cualquier otra persona de la que incluso tratando de responder con mejores métodos de trabajo.
    • Votada abajo porque esta no es una solución general.
    • Realmente inspirador, Pero el Único problema es que usted necesita para encontrar donde waldo es y, a continuación, ajustar los niveles de círculo !!!
    • Hm . . . que no Waldo. Waldo se viste como un vacío vendedor (usted tiene que mirar de cerca, pero eso es lo que es).
    • Como Waldo, a mí mismo, estoy de acuerdo con esta respuesta
    • Pensé que esto sería de interés: articles.nydailynews.com/2012-03-24/news/…
    • No la correlación de ser mejorado (y ser más genereal) si se hace uso de una imagen con rayas rojas y blancas, como un corte de waldos camisa o un recorte de una imagen típica de Waldo? Por desgracia, no sé Mathematica, así que no puedo probar esto
    • Maldita sea, pensé que había tiempo antes de que los equipos que nos ganaron en un examen ocular

  2. 143

    Mi conjetura en un «a prueba de balas manera de hacer esto» (creo que la CIA encontrar a Waldo en cualquier imagen de satélite en cualquier momento, no sólo en una sola imagen sin competir elementos, como rayas camisetas)… me gustaría entrenar a un Máquina de Boltzmann en muchas imágenes de Waldo – todas las variaciones de él sentado, de pie, ocluido, etc.; camisa, sombrero, cámara, y todas las obras. Usted no necesita un gran corpus de Waldos (tal vez 3-5 será suficiente), pero cuanto más, mejor.

    De esta forma se asigna nubes de probabilidades a los distintos elementos que ocurren en cualquiera que sea la disposición correcta y, a continuación, establecer (a través de la segmentación) lo que un promedio de tamaño de objeto es, fragmento de la imagen de origen en las células de los objetos que más se asemejan a personas individuales (teniendo en cuenta las posibles oclusiones y plantear los cambios), pero desde Waldo imágenes suelen incluir un MONTÓN de gente en la misma escala, esto debería ser una tarea muy fácil, luego alimentar a estos segmentos de la pre-entrenados de la máquina de Boltzmann. Se le dará la probabilidad de cada uno de Waldo. Tomar uno con la probabilidad más alta.

    Esta es la forma de OCR, código POSTAL lectores, y strokeless reconocimiento de escritura a mano el trabajo de hoy. Básicamente, usted sabe que la respuesta es no, usted sabe más o menos cómo debería ser, y todo lo demás puede tener elementos en común, pero es definitivamente «no», por lo que no se moleste con el «no»s, que acaba de ver la probabilidad de que «es» de entre todas las posibles «es que no has visto antes» (en los códigos postales por ejemplo, tren BM solo 1s, sólo 2s, sólo 3, etc., luego alimentar a cada uno de los dígitos para cada máquina, y elegir una que tenga más confianza). Esto funciona mucho mejor que una sola red neuronal de funciones de aprendizaje de todos los números.

    • No son simplemente las redes neuronales suficiente para que? Además, el artículo de la wikipedia afirma que Boltzmann máquinas no son prácticos.
    • Sin tratar no estoy seguro, pero si lo suficientemente grande y lo suficientemente complejas como una red neuronal debe ser suficiente para CUALQUIER cosa. Especialmente con recurrencies. Boltzmann máquinas de hacer MUY muy MUY bien, para el reconocimiento de una forma bastante simplista conjunto de datos con gran cantidad de ruido en un mar de datos a diferencia de sí mismo.
    • Los códigos postales son de lectura con máquinas de Boltzmann todo el tiempo, y la precisión de la entrega de correo ha ido por las nubes.
  3. 46

    Estoy de acuerdo con @GregoryKlopper que el derecho manera de resolver el problema general de encontrar a Waldo (o cualquier objeto de interés) en una arbitraria de la imagen sería entrenar a un supervisado de aprendizaje de la máquina clasificadora. El uso de muchos positivos y negativos de la etiqueta ejemplos, un algoritmo como La Máquina De Soporte Vectorial, Impulsó La Decisión De Muñón o Boltzmann de la Máquina podría ser entrenado para lograr alta precisión sobre este problema. Mathematica incluso incluye estos algoritmos en su Marco De Aprendizaje De La Máquina.

    Los dos retos en la formación de una Waldo clasificador sería:

    1. La determinación de la derecha de la imagen función de transformación. Aquí es donde @Heike la respuesta sería útil: un filtro rojo y un pelado patrón detector (por ejemplo, wavelet o DCT descomposición) sería una buena manera de convertir raw píxeles en un formato que el algoritmo de clasificación de aprender. Un bloque basado en la descomposición que evalúa todas las subsecciones de la imagen también sería necesario … pero esto es facilitado por el hecho de que Waldo es un) siempre de aproximadamente el mismo tamaño y b) siempre presente exactamente una vez en cada imagen.
    2. La obtención de suficientes ejemplos de formación. SVMs trabajar mejor con al menos 100 ejemplos de cada clase. Aplicaciones comerciales de aumentar (por ejemplo, la cara de enfoque en las cámaras digitales) son entrenados en millones de ejemplos positivos y negativos.

    Una rápida Búsqueda de imágenes de Google vueltas hasta algunos buenos datos — voy a ir a recoger algunos ejemplos de formación y codificación de este hasta ahora!!!

    Sin embargo, incluso un enfoque de aprendizaje automático (o la regla basada en el enfoque sugerido por @iND), tendrá que luchar por una imagen como la de Tierra de Waldos!

    • Una máquina de aprendizaje basado en visión por computador sistema que intenta resolver el «¿Dónde está Waldo» problema en el mundo real (es decir, la búsqueda de una persona en particular en multitud de fotos en Flickr, fue presentado en Visión por Computador y Reconocimiento de patrones conferencia del año pasado. Que un poco de trampa, aunque añadiendo un poco de 3D información de ubicación mediante el uso de varias fotos de la misma escena.
    • cs.washington.edu/homes/rahul/data/WheresWaldo.html
    • Upvote. Pensé wavelet demasiado cuando leí esto.
  4. 40

    No sé Mathematica . . . demasiado malo. Pero me gusta la respuesta anterior, por la mayor parte.

    Todavía hay una gran falla en confiar en las franjas solo para obtener la respuesta (yo personalmente no tengo un problema con uno ajuste manual). Hay un ejemplo (que aparece por Brett Campeón, aquí) presenta lo que demuestra que, a veces, romper la camisa de patrón. Así entonces se convierte en un patrón más complejo.

    Me gustaría tratar un enfoque de la forma de identificación y colores, junto con la espacial de las relaciones. Mucho como el reconocimiento facial, usted puede buscar patrones geométricos en determinadas proporciones de cada uno de los otros. La advertencia es que normalmente uno o más de esas formas es ocluida.

    Obtener un balance de blancos en la imagen, y de rojo, de un rojo equilibrio de la imagen. Creo que Waldo es siempre el mismo valor/matiz, pero la imagen puede ser de un análisis, o una mala copia. A continuación, se refieren siempre a una matriz de los colores que Waldo es: rojo, blanco, marrón oscuro, azul, melocotón, {zapato de color}.

    No es una camisa de patrón, y también los pantalones, las gafas, el pelo, la cara, los zapatos y el sombrero que definen Waldo. También, en relación a otras personas en la imagen, Waldo está en el lado flaco.

    Así, encontrar a la gente al azar para obtener la altura de las personas en esta foto. La medida de la estatura promedio de un montón de cosas al azar los puntos en la imagen (un esquema simple se producen muy pocas personas en particular). Si cada cosa no está dentro de algunos desviación estándar de cada uno de los otros, que son ignorados por ahora. Comparar el promedio de las alturas, a la altura de la imagen. Si la relación es demasiado grande (por ejemplo, 1:2, 1:4, o de manera similar cierre), a continuación, inténtelo de nuevo. Ejecutar 10(?) de veces para asegurarse de que las muestras son todos bastante juntos, excluyendo cualquier medio que está fuera de algunos desviación estándar. Posible en Mathematica?

    Esta es tu Waldo tamaño. Walso es flaco, así que usted está buscando algo de 5:1 o 6:1 (o lo que sea) ht:wd. Sin embargo, esto no es suficiente. Si Waldo está parcialmente oculta, la altura podría cambiar. Así, usted está buscando un bloque de color rojo-blanco que ~2:1. Pero tiene que ser más indicadores.

    1. Waldo tiene gafas. Buscar por dos círculos de 0.5:1 sobre el rojo-blanco.
    2. Pantalones azules. Cualquier cantidad de azul en el mismo ancho dentro de cualquier distancia entre el extremo de la roja-blanca y la distancia a sus pies. Tenga en cuenta que él usa en su camiseta corta, así que los pies no están demasiado cerca.
    3. El sombrero. Rojo-blanco a cualquier distancia de hasta dos veces la parte superior de su cabeza. Tenga en cuenta que debe tener el pelo oscuro de abajo, y probablemente gafas.
    4. Mangas largas. rojo-blanco en algún ángulo de la principal rojo-blanco.
    5. Cabello oscuro.
    6. Zapato de color. No sé el color.

    Que ninguna de esas podría aplicar. Estos son también negativos cheques contra las personas semejantes en el pic-por ejemplo, #2 niega que llevaba un rojo-blanco delantal (demasiado cerca de los zapatos), #5 elimina la luz de color del cabello. También, la forma es sólo uno de los indicadores para cada una de estas pruebas . . . color solo dentro de la distancia especificada puede dar buenos resultados.

    Esto va a reducir las áreas de proceso.

    De almacenamiento de estos resultados se producen un conjunto de áreas que debe han Waldo en ella. Excluir todas las otras áreas (por ejemplo, para cada área, seleccione un círculo dos veces tan grande como el promedio de tamaño de la persona) y, a continuación, ejecutar el proceso que @Heike establecidos con la eliminación de todos, pero de color rojo, y así sucesivamente.

    Alguna idea sobre cómo este código?


    Edición:

    Pensamientos sobre cómo el código de este . . . excluir todas las áreas, pero Waldo rojas, skeletonize las zonas rojas, y podar a un solo punto. Hacer lo mismo para Waldo cabello marrón, Waldo pantalón azul, Waldo zapato de color. Para Waldo color de la piel, excluir, a continuación, encontrar el esquema.

    Siguiente, excluye a los no-rojo, dilatar (mucho) de todas las áreas en rojo, a continuación, dejar solo el esqueleto y podar. En esta parte se dará una lista de posibles Waldo puntos centrales. Este será el marcador para comparar todos los demás Waldo secciones de color a.

    A partir de aquí, mediante el esqueleto zonas rojas (no la dilatación de las unidades), recuento de las líneas en cada área. Si no es el número correcto (cuatro, ¿verdad?), este es sin duda un área posible. Si no, supongo que solo se excluye (como Waldo centro . . . todavía puede ser su sombrero).

    A continuación, compruebe si hay una forma de la cara de arriba, un pelo de punto, pantalones de punto por debajo, zapato puntos por debajo, y así sucesivamente.

    Sin código sin embargo, todavía la lectura de los documentos.

    • Tal vez usted puede mostrar una prueba de concepto en cualquier sistema/idioma está familiarizado con. Esto también le dará una idea de que las dificultades pueden venir en.
    • Oh, sólo estoy disfrutando el desafío, tal y como está. Me da algo para hacer entre caminatas en la playa y vestirse para la cena.
    • Así. . . ¿por qué los downvotes? Cómo es esto diferente de los otros especulativo respuesta aquí? Esta es una sugerencia de que esta cuestión debe ser tomada más en serio? O simplemente que me parezca más grave en mi investigación? Es mi enfoque realmente mal?
    • Yo no downvote usted y yo no creo que downvotes son apropiados para los honestos intentos de respuesta (a menos que den información errónea). La razón más probable para los downvotes es que no parecen haber probado el (bastante complicado sonido) enfoque, y encontrar una buena solución probablemente tendría una buena cantidad de experimentación práctica y descartar muchas ideas. El otro especulativa respuesta sugiere un general (método como punto de partida) que ha sido utilizada en el pasado por problemas similares, y hay una buena cantidad de literatura sobre el mismo. Tratando de explicar lo que sucedió.
    • Gracias por la explicación. Supongo que no estoy centrada en la historia de las ideas.
    • su idea falla si waldo está haciendo el pino.
    • De verdad que no. . . «de arriba» es una dirección, por lo que la posición/distancia debe determinar la dirección en la que el resto se espera. Probablemente.

  5. 2

    Tengo una solución rápida para encontrar a Waldo uso de OpenCV.

    He utilizado el de la plantilla de la coincidencia de la función disponible en OpenCV para encontrar a Wally.

    Para ello una plantilla que se necesita. Así que me recortada Waldo de la imagen original y se utiliza como una plantilla.

    ¿Cómo puedo encontrar a Wally con Mathematica?

    Siguiente llamé a la cv2.matchTemplate() función junto con la normalizado coeficiente de correlación como el método utilizado. Volvió con una alta probabilidad en una sola región, como se muestra en blanco a continuación (en algún lugar en la parte superior izquierda de la región):

    ¿Cómo puedo encontrar a Wally con Mathematica?

    La posición de la máxima probable de la región se encuentran el uso de cv2.minMaxLoc() función, que luego utiliza para dibujar el rectángulo para resaltar Waldo:

    ¿Cómo puedo encontrar a Wally con Mathematica?

    • Tratando de abordar de MANERA más famoso de procesamiento de imagen de preguntas ? 😉 La solución es agradable y fácil, pero un/ sólo funciona para esta imagen específica y b/ necesidades de la imagen exacta de Waldo desea buscar de antemano, aunque creo que la pregunta era acerca de encontrar a Wally en cualquier «¿Dónde está Waldo imagen» como lo haría jugar el juego normal : sin saber lo que él ve como antes. Esta pregunta es un montón de diversión de todos modos
    • ha ¡exactamente !!! He trabajado sólo para esta imagen en particular. De trabajo para diferentes imágenes sería un reto, aunque !!

Dejar respuesta

Please enter your comment!
Please enter your name here