2010-09-24 23 views
11

Duplicar posible:
Image comparison algorithmdetectar imágenes similares

Así que, básicamente, tengo que escribir un programa que comprueba si 2 imágenes son los mismos o no. Tenga en cuenta las siguientes 2 imágenes:

http://i221.photobucket.com/albums/dd298/ramdeen32/starry_night.jpg

http://i221.photobucket.com/albums/dd298/ramdeen32/starry_night2.jpg

bien ambos son las mismas imágenes, pero ¿cómo puedo comprobar para ver si estas imágenes son las mismas. Solo estoy limitado a las funciones de los medios. Todo lo que puedo pensar ahora es la escala de altura de ancho y comparar el RGB para cada píxel, pero ¿no sería diferente el color?

Estoy completamente perdido en este caso, cualquier ayuda es apreciada.

* Nota esto tiene que ser en Python y usar el (mediateca)

+1

Ver [ Algoritmo de comparación de imágenes ] (http://stackoverflow.com/questions/1819124/image-comparison-algorithm). –

Respuesta

4

Guau, esa es una pregunta enorme, y una que tiene una gran cantidad de soluciones posibles. Me temo que no soy un experto en pitones, pero pensé que tu pregunta era interesante, por lo que quise proponer un método que implementaría si se me planteara este problema.

Obviamente, las dos imágenes que se publican son realmente muy diferentes - por lo que tendrá que considerar 'lo diferente es la misma', especialmente cuando se trabaja con imágenes y teniendo en cuenta los diferentes formatos de imagen y compresión, etc.

todos modos , para una solución que permita una determinada diferencia en los valores de color (pero no para que los píxeles estén en lugares incorrectos), haría algo como lo siguiente;

  1. Elija dos imágenes.

  2. Cambie la escala de la imagen más grande a la misma altura y anchura exactas que la primera (incluso distorsionando la imagen si es necesario).

  3. Posiblemente escala de grises las imágenes para hacer que los siguientes pasos sean más simples, sin perder mucho en el camino de la efectividad. En realidad, posiblemente la detección de detección de bordes aquí también podría funcionar.

  4. Pase por cada píxel en ambas imágenes y almacene la diferencia en cada uno de los canales RGB, o solo la diferencia en la intensidad de la escala de grises. Usted terminaría con una matriz del tamaño de la imagen que notará la diferencia entre las intensidades de los píxeles en las dos imágenes.

  5. Ahora, no sé los valores exactos, pero probablemente encontraría que si itera sobre la matriz puede ver si la diferencia entre cada píxel en las dos imágenes es la misma (o casi la misma)) a través de todos los píxeles. Tal vez iterar sobre la matriz una vez para encontrar la diferencia promedio entre las intensidades de píxeles en las dos imágenes, luego iterar sobre la imagen de nuevo para ver si el 90% de las diferencias caen dentro de un cierto umbral (5% de diferencia?).

Solo una idea. Por supuesto, puede haber algunas funciones agradables de las que no soy consciente para facilitar esto, ¡pero no aguantaría la respiración!

+0

¡Esto es bueno! Sin embargo, no entiendo lo que quiere decir con "intensidad de escala de grises". Para hacer que la imagen en escala de grises no tengas que normalizar cada píxel, como tomar el promedio de R + G + B y luego restablecer el RGB a la media? – 1337holiday

+0

La escala de grises no es el promedio de RGB, sino el promedio ponderado, con R = 0.299, G = 0.587, B = 0.114. (Esto se debe a que nuestros ojos son más sensibles al verde que al rojo o azul, y menos sensibles al azul.) – kindall

+0

Hmm aún no está claro al respecto, ¿puede mostrar un cálculo muy básico para un píxel? – 1337holiday

1

ImageMagick tiene enlaces Python y una función de comparación. Debería hacer la mayor parte del trabajo por usted, pero nunca lo he usado en Python.

0

Creo que el paso 2 de la respuesta de John Wordsworths puede ser uno de los más difíciles: aquí se trata de una copia estirada de la imagen, ¿pero también permite imágenes giradas, recortadas o deformadas de otras maneras? Si es así, necesitará un algoritmo de coincidencia de características, como el utilizado en Hugin u otro software de creación de panorámicas. Esto encontrará funciones coincidentes, distorsione para que quepa y luego podrá hacer las otras etapas de comparación. Lo ideal es que quieras reconocer la pintura de Van Gogh a partir de fotos, ¡incluso fotos en tazas! Es fácil para un humano hacer esto, para una computadora necesita matemáticas bastante más complejas.

Cuestiones relacionadas