Bibliothèque Java pour comparer la similarité des images [fermé]

j'ai passé pas mal de temps à chercher une bibliothèque qui me permette de comparer des images les unes aux autres en Java.

Je n'ai pas vraiment trouvé quoi que ce soit d'utile, peut-être que mon GoogleSearch-skill N'est pas assez élevé alors j'ai pensé que je vous demanderais si vous pouviez me diriger dans une direction d'où je pourrais trouver quelque chose comme ça.

fondamentalement, ce que je veux faire est de comparer deux images l'une avec l'autre et obtenir une valeur de combien les deux sont similaires. Comme un pourcentage.

j'espère que vous avez quelque chose que je peux utiliser, Je ne saurais pas écrire quelque chose comme ça moi-même...

PS: il ne doit pas nécessairement être en Java, c'est juste l'environnement que mon application va exécuter.

50
demandé sur Florian Peschka 2011-12-27 17:00:26

3 réponses

vous pouvez jeter un oeil à deux réponses sur elle-même: celui-ci est sur la comparaison d'image elle-même, offrant des liens à des trucs en C++ (si je lis correctement) tandis que celui-ci offre des liens à des approches plus larges, un étant en C .

je suggère de commencer par le deuxième lien car il y a des liens sur cette discussion qui mèneront au code de mise en œuvre de certaines techniques pertinentes que vous pourriez être en mesure de "traduire" dans Java vous-même.

C'est le meilleur que mes compétences google pouvaient faire, pas de Java cependant - désolé. J'espère que c'est un bon point de départ!

EDIT: Voici quelqu'un avec votre problème qui a écrit sa propre classe de comparaison en Java . Je n'ai pas lu le code source. Il déclare expressément qu'il n'a pas pu trouver de bibliothèques Java dans ce but non plus, donc c'est pourquoi il l'a écrit lui-même.

Oh, et cette question sur SO a probablement les meilleurs liens sur ce, tous en ce qui concerne les bibliothèques Java de traitement d'image. Espérons qu'il y en ait un parmi eux qui puisse comparer les images pour la similitude.

Ok, dernière édition: Le Livre de recettes de traitement D'Image Java montre une implémentation Java d'un algorithme de base pour déterminer la différence entre deux images. Il dispose également d'un e-mail à contacter le gars qui l'a écrit ainsi qu'une multitude de références. Pas de bibliothèque.

modifier après avoir lu votre commentaire à votre question: Sauf si vous avez déjà vérifié tous les liens ci-dessus, puisque ce que vous voulez semble être de vérifier si deux images sont égales, je suggère de commencer par le traitement D'Image Java Cookbook (puisque cela a une implémentation D'un algorithme en Java pour vérifier les images égales) et le dernier lien à une question SO. En outre, vérifier PerceptualImageDiff et le code source de ce projet (C++); il les sons vraiment nifty-il est apparemment censé vérifier si deux images regardent égale au système visuel humain .

29
répondu G. Bach 2017-09-03 15:02:47

juste au-dessus de ma tête, OpenCV est une grande bibliothèque de traitement d'image, mais il pourrait être exagéré si vous voulez juste comparer des images. Si c'est le cas, je dirais ImageJ .

Quelqu'un a déjà demandé comment faire cela en utilisant OpenCV ici .

j'utiliserais C++ pour cela, mais si vous devez utiliser Java, il y a un projet qui a fait un Java wrapper pour OpenCV, ici .

8
répondu dario_ramos 2017-05-23 12:18:15

j'ai utilisé la classe dans ce lien pour comparer deux images de produit, et les résultats étaient frais. Il n'est pas très difficile de l'implémenter juste pour être utilisé pour comparer deux images, vous avez juste besoin de supprimer les lignes de JAI et Swing et autres. Il redimensionne les images à 300x300 et renvoie une valeur de différence comme "1234". La différence maximale est proche de "11041", c'est indiqué dans le lien. Faire une division, vous pouvez simplement obtenir le pourcentage. Si je suis intéressé je peux poster le code modifié ici plus tard.

les résultats étaient cool, mais j'ai quand même eu "digital camera photos", détecté pour être similaire à "TV photos". Donc, J'ai utilisé ImageJ pour détecter bords dans l'image. À l'aide de l'opération detect edges, ImageJ convertit l'image en une image greyform détectée par edge. Puis j'ai mis les deux images de bord-détectées dans le même comparateur et multiplié les deux valeurs. Les résultats sont devenus encore plus précis.

obtenir la forme de bord-détecté des images

7
répondu İsmet Alkan 2017-05-23 10:31:31