2012-04-14 20 views
8

¿Hay posibilidad de comparar dos imágenes con diferentes resoluciones?Comparación de imágenes con diferentes resoluciones

Me refiero aquí a algún enfoque algorítmico/de programación. Por ejemplo, ahora calculo el código hash del conjunto de bytes de la imagen y comparo estos valores del código hash. Eso es un gran trabajo, pero falla en el caso de diferentes resoluciones, es decir, las imágenes son idénticas por ojo pero diferente en el contenido de bytes.

Por ejemplo, véase mi imagen se adhiere:
enter image description hereenter image description here

uno de Tiene 72 ppp pero otra 96 ppi. Me gustaría tener TRUE valor mientras comparo en igualdad pero ahora obtengo FALSE. Ayuda por favor para encontrar la solución correcta aquí.

+0

¿Tal vez crear copias de baja resolución de ambas imágenes (digamos 128 * 128, quizás 32 * 32), y compararlas en su lugar? YMMV – wildplasser

+1

Esta respuesta muestra algunos métodos interesantes http://stackoverflow.com/a/844113/441354 – AntonS

Respuesta

5

dos métodos muy sencillos de hash de percepción es posible darle una oportunidad antes de aventurarse en un territorio más complicada se basan en la Transformada discreta del coseno y lo local versus media glocal de una imagen:

  1. Convertir imagen a escala de grises

    1.1 (EDIT) Hacer su imagen media cero

  2. aplastará la imagen a su tamaño miniatura, por ejemplo [32x32]
  3. Ejecutar las dos dimensiones transformada discreta del coseno
  4. Mantenga la parte superior izquierda [8 x 8], la mayoría de los componentes de baja frecuencia significativos
  5. binarización en el bloque, basado en el signo de los componentes
  6. el resultado es un hash de 64 bits

y una variante sobre este tema sería

imagen Convertir
  1. a escala de grises
  2. Opcionalmente cambiar el tamaño a un tamaño predefinido.
  3. partición de la imagen en un número fijo de bloques
  4. Determinar la media global
  5. Determinar la media local por bloque
  6. Para el hash, escribir un 1 o un 0 por bloque, en espera de si el local de la media fue mayor o menor que la media global.

Además, eche un vistazo a phash.

+0

¿Cuál es el nombre oficial del método para su primer acercamiento? ¿Hay implementaciones gratuitas en algún lenguaje de programación? –

+0

@Michael Z, solo los conozco como "hashing perceptual" lo siento. phash es de código abierto, pero existen restricciones para el uso comercial. Lo mejor es hablar con ellos. Buena suerte. – Maurits

+1

Bueno, gracias. Pero tuve algunos problemas con tu algo (he usado el primero). La falta está en * 5.Binarizar el bloque, basado en el signo de los componentes * no ha aclarado este proceso. He realizado una binarización basada en el valor inferior/superior de cero (0), pero la solución correcta es considerar el valor medio de los colores pero no el cero. Este artículo me sirve mucho: https://www.memonic.com/user/aengus/folder/coding/id/1qVeq –

3

Para imágenes sintéticas con algunos colores distintos, comenzaría con la coincidencia de histograma.

Básicamente sume el número de píxeles de cada color en cada imagen y divida por el número total de píxeles. Entonces tienes un vector flotante simple como huella digital. Puede ignorar el blanco si quiere imágenes con más o menos borde para contar como una coincidencia

No va a detectar la misma imagen con las rebanadas reacomodadas, o el texto se movió hacia abajo pero no creo esa es la preocupación en este caso

Cuestiones relacionadas