Biblioteca Java para comparar la similitud de la imagen

Pasé bastante tiempo investigando para una biblioteca que me permite comparar imágenes entre sí en Java.

Realmente no encontré nada útil, tal vez mi habilidad GoogleSearch no es lo suficientemente alta, así que pensé en preguntarles si podrían indicarme dónde podría encontrar algo como esto.

Básicamente, lo que quiero hacer es comparar dos imágenes entre sí y obtener un valor de cuánto son similares. Como un porcentaje más o menos.

Espero que tengan algo que pueda usar, no sabría cómo escribir algo así yo mismo …

PD: No necesariamente tiene que estar en Java, ese es el entorno en el que se ejecutará mi aplicación.

    Podrías echar un vistazo a dos respuestas sobre SO en sí: esta es sobre la comparación de imágenes en sí misma, ofreciendo enlaces a cosas en C ++ (si leo correctamente) mientras que esta ofrece enlaces a enfoques más amplios, uno de ellos en C.

    Sugeriría comenzar con el segundo enlace ya que hay enlaces en esa discusión que llevarán al código de implementación de algunas técnicas relevantes que usted podría ser capaz de “traducir” a Java usted mismo.

    Eso es lo mejor que pueden hacer mis habilidades de google, aunque Java, lo siento. ¡Espero que sea un buen punto de partida!

    EDITAR: Aquí hay alguien con tu problema que escribió su propia clase de comparación en Java . Aunque no leí el código fuente. Expresamente declara que tampoco pudo encontrar bibliotecas de Java para ese propósito, por eso lo escribió él mismo.

    Ah, y esta pregunta sobre SO probablemente tenga los mejores enlaces sobre esto, todo con respecto a las bibliotecas de Java de procesamiento de imágenes. Con suerte, hay uno entre ellos que puede comparar imágenes por similitud.

    Ok, última edición: El Java Image Processing Cookbook muestra una implementación Java de un algoritmo básico para determinar la diferencia entre dos imágenes. También tiene un correo electrónico para contactar al tipo que lo escribió, así como a una serie de referencias. Sin embargo, no hay biblioteca

    EDIT después de leer su comentario a su pregunta: a menos que ya haya comprobado todos los enlaces anteriores, ya que lo que desea parece estar comprobando si dos imágenes son iguales, le sugiero que comience con el Java Image Processing Cookbook (ya que tiene un implementación de un algoritmo en Java para verificar imágenes iguales) y el último enlace a una pregunta SO. Además, compruebe PerceptualImageDiff y el código fuente de ese proyecto (C ++); suena muy ingenioso, aparentemente se supone que verifica si dos imágenes se ven iguales al sistema visual humano .

    Justo fuera de mi cabeza, OpenCV es una gran biblioteca de procesamiento de imágenes, pero podría ser exagerado si solo quieres comparar imágenes. Si ese es el caso, iría con ImageJ .

    Alguien ya preguntó cómo hacer esto usando OpenCV aquí .

    Utilizaría C ++ para esto, pero si debe usar Java, aquí hay un proyecto que creó Java wrapper para OpenCV.

    Usé la clase en este enlace para comparar dos imágenes de productos, y los resultados fueron geniales. No es muy difícil implementarlo solo para ser usado para comparar dos imágenes, solo necesitas borrar las líneas de JAI y Swing y demás. Cambia el tamaño de las imágenes a 300×300 y devuelve un valor de diferencia como “1234”. El valor de la diferencia máxima está cerca de “11041”, se indica en el enlace. Haciendo una división, simplemente puede obtener el porcentaje. Si está interesado, puedo publicar el código modificado aquí más tarde.

    Los resultados fueron geniales, pero aún obtuve “fotos de cámaras digitales”, que se detectaron como similares a las “fotos de televisión”. Entonces, usé ImageJ para detectar bordes en la imagen. Usando la operación de detección de bordes, ImageJ convierte la imagen en una imagen de formato gris detectada en el borde. Luego puse las dos imágenes detectadas en el borde en el mismo comparador y multipliqué los dos valores. Los resultados se volvieron aún más precisos.

    Obtener la forma detectada por el borde de las imágenes