Recomendaría considerar alejarse de simplemente usar un histograma RGB.
Se puede obtener un mejor resumen de su imagen si toma una 2d Haar wavelet de la imagen (es mucho más fácil de lo que parece, es solo un promedio y algunas raíces cuadradas para ponderar sus coeficientes) y solo retenga los k coeficientes ponderados más grandes en la ondícula como un vector disperso, normalícelo y guárdelo para reducir su tamaño. Debería reescalar R G y B usando pesos perceptivos de antemano al menos o recomendaría cambiar a YIQ (o YCoCg, para evitar el ruido de cuantificación) para que pueda muestrear la información de crominancia con importancia reducida.
Ahora puede utilizar el producto escalar de dos de estos vectores normalizados dispersos como medida de similitud. Los pares de imágenes con los productos de puntos más grandes serán muy similares en estructura. Esto tiene el beneficio de ser ligeramente resistente al cambio de tamaño, cambio de matiz y marca de agua, y ser realmente fácil de implementar y compacto.
Puede sacrificar el almacenamiento y la precisión aumentando o disminuyendo k.
Ordenar por un solo puntaje numérico va a ser intratable para este tipo de problema de clasificación. Si lo piensas, requeriría que las imágenes solo puedan 'cambiar' a lo largo de un eje, pero no es así. Es por eso que necesita un vector de características. En el caso de Haar wavelet es aproximadamente donde ocurren las discontinuidades más agudas en la imagen. Puede calcular una distancia entre imágenes por parejas, pero como todo lo que tiene es una medida de distancia, un ordenamiento lineal no tiene forma de expresar un "triángulo" de 3 imágenes que están todas igualmente distantes. (es decir, piense en una imagen que sea totalmente verde, una imagen que sea roja y una imagen en azul).
Eso significa que cualquier solución real a su problema necesitará O (n^2) operaciones en el cantidad de imágenes que tienes Mientras que si hubiera sido posible linealizar la medida, podría requerir solo O (n log n), u O (n) si la medida era adecuada para, por ejemplo, una ordenación de radix. Dicho esto, no es necesario gastar O (n^2) ya que en la práctica no es necesario examinar todo el conjunto, solo necesita encontrar las cosas que están más cerca que un umbral. Por lo tanto, al aplicar una de varias técnicas para particionar su espacio vectorial disperso, puede obtener asíntotas mucho más rápidas para el problema 'encontrándome k de las imágenes que son más similares que un umbral determinado' que ingenuamente comparando cada imagen con cada imagen, dándole es probable que necesites ... si no precisamente lo que pediste.
En cualquier caso, utilicé esto hace unos años para tener un buen efecto personal al intentar minimizar el número de texturas diferentes que estaba almacenando, pero también ha habido mucho ruido de investigación en este espacio que muestra su eficacia (y en este caso, comparándolo con una forma más sofisticada de la clasificación histograma):
http://www.cs.princeton.edu/cass/papers/spam_ceas07.pdf
Si necesita una mayor precisión en la detección, el minhash y algoritmos TF-IDF se pueden utilizar con la wavelet Haar (o el histograma) para tratar las ediciones más robustas:
http://cmp.felk.cvut.cz/~chum/papers/chum_bmvc08.pdf
Finalmente, Stanford tiene una búsqueda de imágenes basada en una variante más exótica de este tipo de enfoque, basada en extraer más características de las ondículas para encontrar secciones de imágenes giradas o escaladas, etc., pero eso probablemente va mucho más allá la cantidad de trabajo que te gustaría hacer
http://wang14.ist.psu.edu/cgi-bin/zwang/regionsearch_show.cgi
Una pregunta clave, pensando en lo que ha escrito y en algunas de las respuestas a la pregunta relacionada que Naaff señaló, es posible que desee definir más claramente lo que significa "similitud". ¿Sería "similar" una imagen que es idéntica, pero con cinco píxeles de desplazamiento? Visualmente sí ... pero a un algoritmo ... probablemente no, a menos que lo hayas pensado, y lo hayas explicado. ¿Puedes proporcionar más detalles? ¿Los duplicados serían exactos, o simplemente "cercanos"? ¿Está buscando escaneos donde podrían diferir en una ligera medida de ángulo? ¿Qué tal la intensidad? Hay un * lote * de variables aquí ... – Beska
¿En qué se diferencian los "duplicados"? p.ej. ¿Serían imágenes de la misma ubicación con diferentes pose/shift? Parece que quieres algo que sea O (nlog (n)) con el número de imágenes. ¿Alguien sabe si esto es posible? Parece que puede ser ... –
@Lo Desconocido: Si no está satisfecho con alguna de las respuestas actuales, ¿podría darnos más orientación? Hemos hecho nuestro mejor esfuerzo para responder a su pregunta, pero sin ningún comentario, es poco probable que encontremos algo mejor. – Naaff