¿Cuál es una manera rápida de ordenar un conjunto de imágenes que por su similitud a cada uno de los otros.

Por el momento tengo un sistema que hace análisis del histograma entre las dos imágenes, pero esta es una operación muy costosa y parece demasiado excesivo.

De manera óptima estoy buscando un algoritmo que le da a cada imagen un resultado (por ejemplo, un entero de puntuación, tales como el RGB Promedio) y que sólo puede ordenar por puntuación. Idénticas Calificaciones o puntuaciones uno al lado del otro son posibles duplicados.

0299393
0599483
0499994 <- possible dupe
0499999 <- possible dupe
1002039
4995994
6004994 

RGB Promedio por imagen de mierda, hay algo similar?

  • Una pregunta clave, la reflexión sobre lo que has escrito y sobre algunas de las respuestas a la pregunta relacionada con la que Naaff señalado, puede que desee para definir más claramente lo que la «similitud» de los medios. Sería una imagen que es idéntico, pero cinco píxeles de desplazamiento, ser «similares»? Visualmente, sí…pero a un algoritmo…probablemente no, a menos que usted haya pensado en ello, y representó para él. Puedes dar más detalles? Sería el duplicados ser exactos, o simplemente para «cerrar»? Están mirando exploraciones donde podrían diferir por un ligero medida del ángulo? Cómo se trata de la intensidad? Hay un montón de variables de aquí…
  • Cómo hacer «duplicados», se diferencian? por ejemplo, Serían imágenes de la misma ubicación con diferentes pose / turno? Parece que quiere algo que es O(nlog(n)) con el número de imágenes. ¿Alguien sabe si esto es posible? Parece que puede ser..
  • Desconocido: Si usted no está satisfecho con cualquiera de los actuales respuestas, podría usted darnos un poco más de orientación? Hemos hecho nuestro mejor esfuerzo para responder a su pregunta, pero sin ningún tipo de retroalimentación que es poco probable llegar a algo mejor.
  • Este es actualmente uno de los grandes problemas sin resolver en Ciencias de la computación. Buena suerte amigo.
InformationsquelleAutor The Unknown | 2009-06-23

12 Comentarios

  1. 68

    Ha habido una gran cantidad de investigación en la búsqueda de imágenes y medidas de similitud. No es un problema fácil. En general, una sola int no será suficiente para determinar si las imágenes son muy similares. Usted tendrá una alta tasa de falsos positivos.

    Sin embargo, ya ha habido una gran cantidad de investigación que realiza, usted puede echar un vistazo a algunos de la misma. Por ejemplo, este papel (PDF) da una imagen compacta de toma de huellas dactilares algoritmo que es adecuado para la búsqueda de imágenes duplicadas de forma rápida y sin almacenar tantos datos. Parece que este es el derecho enfoque si quieres algo robusto.

    Si usted está buscando algo más simple, pero sin duda más ad-hoc, de este MODO la pregunta tiene un par de ideas decentes.

    • que papel es a partir de 2004, no estoy seguro si esto es todavía la mejor respuesta?
  2. 49

    Yo recomendaría pensando en mudarse lejos de sólo el uso de un histograma RGB.

    Un digerir mejor de tu imagen puede ser obtenida si usted toma un 2d Haar wavelet de la imagen (es mucho más fácil de lo que parece, es sólo un montón de promedio y de algunas raíces cuadradas utilizadas para el peso de sus coeficientes) y simplemente mantener los k mayores coeficientes de ponderación en la wavelet como un vector disperso, normalizar, y guardar que para reducir su tamaño. Usted debe cambiar la escala de R, G y B con la percepción de los pesos de antemano, al menos, o me gustaría recomendar el cambio a YIQ (o YCoCg, para evitar que el ruido de cuantificación) de forma que muestra la información de crominancia con disminución de la importancia.

    Ahora puede utilizar el producto escalar de dos de estos escasa normalizado vectores como una medida de similitud. La imagen enlaza con la más grande de productos de puntos van a ser muy similares en su estructura. Esto tiene la ventaja de ser ligeramente resistente a los cambios de tamaño, cambio de tono y la de agua, y son muy fáciles de implementar y compacto.

    Puede compensar el almacenamiento y la precisión mediante el aumento o la disminución de k.

    Ordenar por un único valor numérico que va a ser intratable para este tipo de problema de clasificación. Si usted piensa acerca de ello, se requeriría de imágenes para sólo ser capaz de «cambiar» a lo largo de un eje, pero no es así. Esta es la razón por la que necesita un vector de características. En el Haar wavelet caso de que se trate aproximadamente, donde la mayor discontinuidad en la imagen de ocurrir. Usted puede calcular la distancia entre las imágenes de a pares, pero ya que todo lo que tenemos es una distancia métrica lineal de pedido no tiene manera de expresar un ‘triángulo’ de 3 imágenes que están todos a la misma distancia. (es decir, pensar en una imagen que es todo verde, una imagen que es todo rojo, y una imagen que es todo azul.)

    Que significa que cualquier solución real a su problema se necesita O(n^2) operaciones en el número de imágenes que tiene. Mientras que si hubiera sido posible linealizar la medida, usted podría requerir sólo de O(n log n) y o(n) si la medida era adecuada para, digamos, un radix sort. Dicho esto, usted no necesita gastar O(n^2), ya que en la práctica no es necesario tamizar a través de todo el conjunto, usted sólo tiene que encontrar las cosas eso es más cercano que un cierto umbral. Así, mediante la aplicación de una de varias técnicas para la partición de su escaso espacio vectorial puede obtener mucho más rápido asymptotics para el ‘hallazgo k me de las imágenes que son más similares de lo que un umbral determinado problema de que, ingenuamente, la comparación de cada imagen en contra de cada imagen, dándole lo que es probable que usted necesite… si no es precisamente lo que usted pidió.

    En cualquier caso, he utilizado este hace un par de años a buen efecto, personalmente, cuando se trata de minimizar el número de diferentes texturas estaba almacenar, pero también ha sido un gran trabajo de investigación de ruido en este espacio que muestra su eficacia (y en este caso comparando a una más sofisticada forma de histograma de clasificación):

    http://www.cs.princeton.edu/cass/papers/spam_ceas07.pdf

    Si usted necesita una mayor precisión en la detección, el minHash y tf-idf, se pueden usar algoritmos con la wavelet Haar (o el histograma) para ocuparse de las ediciones con más contundencia:

    http://cmp.felk.cvut.cz/~chum/papers/chum_bmvc08.pdf

    Finalmente, Stanford tiene una búsqueda de imágenes basada en más exóticos variante de este tipo de enfoque, basado en más de extracción de características a partir de las wavelets para encontrar rotar o escalar las secciones de imágenes, etc, pero que probablemente va más allá de la cantidad de trabajo que quieres hacer.

    http://wang14.ist.psu.edu/cgi-bin/zwang/regionsearch_show.cgi

    • Parece que te estás indirectamente describir kd-trees y el como para buscar el espacio para los posibles candidatos. Valdría la pena señalar esto.
    • Bien, la razón por la que no especifica las técnicas más allá de una vaga alusión es que los kd-trees funcionan bien cuando se tiene un número relativamente pequeño de dimensiones en el espacio. Aquí es muy probable que tengas ~128 o más dimensiones que están escasamente pobladas. Ya que son escasos en la mayoría de los valores a cero, por lo que va round-robin a través de las dimensiones de la partición en kd-estilo de la realidad es casi inútil. Por la misma razón árboles R romper, dejando más probable es que su mejor apuesta: X-árboles. Por desgracia, también están cerca del límite de su rendimiento cuando se enfrentan con muchas dimensiones.
    • «y simplemente mantener los k mayores coeficientes de ponderación en la wavelet como un vector disperso,» – retener por fila o por toda la wavelet?
    • «Usted debe cambiar la escala de R, G y B con la percepción de los pesos de antemano, al menos, o me gustaría recomendar el cambio a YIQ (o YCoCg, para evitar que el ruido de cuantificación) de forma que muestra la información de crominancia con disminución de la importancia.» – ¿y luego qué? Hacer wavelet para Y solo o hacerlo para todos los canales? Si para todos los canales – cómo medir la similitud de imágenes con múltiples canales? agregar productos de puntos de cada canal y se de cuenta de esto como medida de similitud o debería ser algunos ponderado de la suma?
  3. 15

    He implementado un algoritmo confiable para este llamado Rápido De Varias Resoluciones De La Imagen De La Consulta. Mi (antigua, sin mantenimiento) código para que se aquí.

    Lo Rápido de varias resoluciones de la Imagen de la Consulta que hace es dividir la imagen en 3 piezas basadas en el espacio de color YIQ (mejor para la correspondencia de las diferencias de RGB). A continuación, la imagen es esencialmente comprimido mediante un algoritmo wavelet hasta que sólo las características más importantes de cada espacio de color están disponibles. Estos puntos se almacenan en una estructura de datos. Consulta de imágenes pasan por el mismo proceso, y las características prominentes en la imagen de consulta son coincidentes con los de la base de datos almacenada. El más partidos, más probable es que las imágenes son similares.

    El algoritmo que se utiliza a menudo para «consulta de croquis» funcionalidad. El software sólo se permite entrar en la consulta de imágenes a través de la URL, así que no había ninguna interfaz de usuario. Sin embargo, me pareció funcionado excepcionalmente bien para la coincidencia de miniaturas para la versión grande de la imagen.

    Mucho más impresionante que mi software es retrievr que permite probar la FMIQ algoritmo usando imágenes de Flickr como la fuente. Muy cool! Inténtelo hacia fuera a través de croquis o el uso de una fuente de imagen, y usted puede ver lo bien que funciona.

    • Puede aún reconocer las imágenes rotadas?
    • Dudo de que iba a funcionar muy bien para que. Quizás quieras codificar las imágenes de cada rotación para maximizar pertinentes de los partidos.
    • El enlace a retrievr parece ser es que se archivan en cualquier lugar?
  4. 10

    Una imagen tiene muchas características, por lo menos a limitar a ti mismo para uno, como el promedio de brillo, se trata de un n-dimensional espacio del problema.

    Si yo le preguntara a usted para asignar un único número entero a las ciudades del mundo, así yo podría decir cuáles son los que están cerca, los resultados no serían grandes. Usted podría, por ejemplo, elegir la zona horaria como su único número entero y obtener buenos resultados con ciertas ciudades. Sin embargo, una ciudad cerca del polo norte y otro de la ciudad, cerca del polo sur, también puede ser en la misma zona horaria, incluso a pesar de que están en los extremos opuestos del planeta. Si se me permite utilizar dos números enteros, puede obtener muy buenos resultados con la latitud y la longitud. El problema es el mismo para la semejanza de la imagen.

    Todo lo que dijo, hay algoritmos que tratan de clúster de imágenes similares juntos, que es efectivamente lo que usted está pidiendo. Esto es lo que sucede cuando usted hace de detección de la cara con Picasa. Incluso antes de identificar cualquier caras, agrupaciones similares juntos, así que es fácil ir a través de un conjunto de rostros similares y dar mayor parte de ellos con el mismo nombre.

    También hay una técnica llamada Análisis de Componentes principales, que permite reducir el n-dimensional de los datos de cualquier menor número de dimensiones. Para una imagen con n características puede ser reducido a una función. Sin embargo, todavía no es el mejor enfoque para la comparación de imágenes.

    • Es un punto discutible, pero se PUEDE utilizar un único número entero que representa la combinación de cualquier número de características, si, por ejemplo, la característica x = 2 y y = 3 y la función z = 5 y cuentan con aa = 7, et cetera, entonces el poder en la que la principal base que se planteó en la factorizados forma de un único número entero sería el valor de la función para que la imagen específica. De nuevo, un punto discutible debido a que el tamaño de la número sería absurdo. A pesar de que el tamaño podría reducirse aún más… sólo estamos hablando de datos estructurados.
    • Verdadero. Pero el punto central es el de organizar los números de modo que las imágenes similares están muy juntos numéricamente. A pesar de lo que he dicho anteriormente, esto es posible. En resumen, usted podría solucionar el Viaje Vendedor problema para encontrar un mínimo (o cerca de-mínimo) camino a través de las imágenes en el espacio n-dimensional (n, donde n es el número de características que desea utilizar para comparar las imágenes). Pero que es caro.
  5. 8

    Hay una biblioteca de C de («libphash» – http://phash.org/) que el cálculo de una «percepción hash» de una imagen y permiten detectar imágenes similares mediante la comparación de los valores de hash (así que usted no tiene que comparar cada imagen directamente en contra de todos los demás de la imagen), pero por desgracia no parece ser muy preciso cuando lo probé.

  6. 5

    Usted tiene que decidir lo que es «similar». El contraste? Hue?

    Es una imagen «similar» a la misma imagen al revés?

    Apuesto a que usted puede encontrar un montón de «cerca de las llamadas» por la ruptura de las imágenes en 4×4 piezas y recibiendo un promedio de color para cada celda de la cuadrícula. Tendría dieciséis puntuaciones por imagen. Para juzgar la similitud, sólo tendría que hacer una suma de los cuadrados de las diferencias entre las imágenes.

    Yo no creo que una sola hash tiene sentido, a menos que sea en contra de un solo concepto como el tono, o el brillo o el contraste.

    Aquí su idea:

    0299393
    0599483
    0499994 <- possible dupe
    0499999 <- possible dupe
    1002039
    4995994
    6004994
    

    Primero de todo, voy a asumir que estos son los números decimales que se R*(2^16)+G*(2^8)+B, o algo así. Obviamente eso no es bueno porque el rojo es ponderado en forma desmesurada.

    Movimiento en el espacio HSV sería mejor. Usted podría difundir los bits de VHS a cabo en el hash, o simplemente podría establecerse H o S o V individualmente, o puede tener tres valores hash por imagen.


    Una cosa más. Si haces peso R, G, y B. el Peso más alto verde, luego rojo, luego azul para que coincida humanos de la sensibilidad visual.

  7. 5

    En la era de los servicios web usted podría tratar de http://tineye.com

    • El código detrás de tineye es que parece ser exactamente lo que el interrogador es después, pero no creo que como un servicio web es muy útil, ya que no hay (obvio) manera de dar las dos de la imagen y preguntar: «¿esta es la misma?» – la segunda imagen tendría que estar en una página web, y indexados por tineye
    • Tal vez la están proporcionando API para que los usuarios de negocio? Debe ser contactado acerca de eso.
    • Hay un comercial de la API que proporciona exactamente que services.tineye.com/MatchEngine.
  8. 1

    supuse que otros duplicar la búsqueda de imágenes de software realiza la FFT en las imágenes, y almacena los valores de las diferentes frecuencias como vectores:

    Image1 = (u1, u2, u3, ..., un)
    Image2 = (v1, v2, v3, ..., vn)
    

    y, a continuación, usted puede comparar dos imágenes para igualdad mediante el cálculo de la distancia entre los vectores de peso de dos imágenes:

    distance = Sqrt(
         (u1-v1)^2 +
         (u2-v2)^2 +
         (u2-v3)^2 +
         ...
         (un-vn)^2);
    
    • La mayoría de las imágenes naturales son muy similares el contenido de frecuencia, así que dudo que esta sería una muy buena medida.
  9. 1

    Una solución es realizar un RMS/RSS comparación de cada par de imágenes necesarias para realizar una especie de burbuja. En segundo lugar, se podría realizar una FFT en cada imagen y hacer algún eje de promedio para recuperar un entero único para cada imagen que usted podría utilizar como un índice para ordenar por. Usted puede considerar hacer lo que la comparación en un cambia de tamaño (25%, 10%) de la version original, dependiendo de cómo de pequeño es una diferencia que usted elija ignorar y cuánto speedup que usted requiere. Déjeme saber si estas soluciones son interesantes, y podemos discutir o me puede proporcionar un código de ejemplo.

    • FFT sólo proporciona información de color y no hay información sobre la posición. Cambio de tamaño ignora todas las características por debajo de un tamaño dado, independientemente de su impacto en la imagen resultante. Un gris de la imagen y un tablero de ajedrez puede ser idéntica en que medida. Una wavelet enfoque (Daubechies, Haar, etc.) tiene las ventajas de ofrecer tanto la posición y la información de color por el comercio fuera de la proporción de la posición de la información de color de cada punto de datos.
    • No, la FFT de una imagen que contiene toda la información espacial de la original. Se puede reconstruir el original de la FFT. homepages.inf.ed.ac.uk/rbf/HIPR2/fourier.htm Un histograma, sin embargo, que puede ser lo que estás pensando, no.
  10. 1

    La mayoría de los enfoques modernos para detectar Cerca de duplicar imagen de detección de uso de puntos de interés de la detección y descriptores que describen el área alrededor de dichos puntos. A menudo TAMIZAR se utiliza. A continuación, puede quatize descriptores y el uso de los clusters como visual de palabras de vocabulario.

    Así que si vemos en la razón común visual de palabras de dos imágenes de todas las palabras visuales de estas imágenes se puede estimar la similitud entre las imágenes. Hay un montón de artículos interesantes. Uno de ellos es Cerca de Duplicar Detección de Imagen: minHash y tf-idf Ponderación

Dejar respuesta

Please enter your comment!
Please enter your name here