Pregunta

he desarrollado un sencillo y rápido algoritmo en PHP para comparar imágenes de similitud.

Su rápido (~ 40 por segundo para imágenes de 800x600) a hash y un algoritmo de búsqueda unoptimised pueden ir a través de 3.000 imágenes en 22 minutos la comparación de cada uno contra los otros (3 / seg).

La descripción básica es que se consigue una imagen, reescalar a 8x8 y luego convertir esos píxeles para el VHS. El tono, saturación y valor se trunca a 4 bits y se convierte en una cadena grande hexagonal.

La comparación de imágenes básicamente camina a lo largo de dos cuerdas, y luego agrega las diferencias que encuentra. Si el número total está por debajo de 64, entonces es la misma imagen de. Diferentes imágenes son por lo general alrededor de 600 - 800. Por debajo de 20 y extremadamente similares

.

¿Hay alguna mejora en este modelo que pueda usar? No he mirado la relevancia de los diferentes componentes (matiz, saturación y valor) son para la comparación. El matiz es probablemente muy importante, pero los demás?

Para acelerar las búsquedas que probablemente podría dividir los 4 bits de cada parte por la mitad, y poner los bits más significativos primero por lo que si no pasan la verificación, la necesidad duerma LSB para ser controlados en todos. No sé una manera eficiente para colocar pedazos como que aún así les permiten buscar y comparar fácilmente.

He estado usando un conjunto de datos de 3.000 fotografías (en su mayoría únicas) y no he estado allí ningún falso positivo. Su completamente inmune a Cambia el tamaño y bastante resistente a los cambios de brillo y contraste.

¿Fue útil?

Solución

Lo que se quiere es su uso:

  1. Extracción de características
  2. Hashing
  3. hash localmente conscientes floración.

  1. La mayoría de la gente usa SIFT cuenta, aunque he tenido mejores experiencias con los no invariante en escala. Básicamente se utiliza un detector de bordes para encontrar puntos de interés y luego centrar sus parcelas de imagen en torno a esos puntos. De esta manera también se puede detectar sub-imágenes.

  2. Lo que ha implementado es un método de hash. Hay toneladas para tratar de, pero el suyo debería funcionar bien:)

  3. El paso crucial para hacer que sea rápido es para discutir sus hashes. A convertir sus valores en representación unaria y luego tomar un subconjunto aleatorio de los bits como el nuevo hash. Hacer eso con 20-50 muestras aleatorias y se obtiene 20-50 tablas hash. Si alguna de las funciones coincide con 2 o más de esos 50 tablas hash, la función va a ser muy similar a uno que ya almacenados. Esto le permite convertir el abs (x-y)

Espero que ayuda, si desea probar mi búsqueda de similitud imagen de desarrollo propio, mándenme un correo electrónico a Hajo en spratpix

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top