J'ai besoin d'un moyen simple et rapide de comparer deux images pour la similarité. C'est à dire. Je veux obtenir une valeur élevée s'ils contiennent exactement la même chose mais peuvent avoir un arrière-plan légèrement différent et peuvent être déplacés/redimensionnés de quelques pixels.Méthode simple et rapide pour comparer les images pour la similarité
(Plus concrètement, si cela importe: L'une image est une icône et l'autre image est un sous-domaine d'une capture d'écran et je veux savoir si cette sous-zone est exactement l'icône ou non.)
Je OpenCV à portée de main mais je n'y suis toujours pas habitué. Une possibilité à laquelle j'ai pensé jusqu'à présent: Divisez les deux images en 10x10 cellules et comparez l'histogramme de couleur pour chacune de ces 100 cellules. Ensuite, je peux définir une valeur de seuil composée et si la valeur obtenue est supérieure à ce seuil, je suppose qu'elles sont similaires.
Je ne l'ai pas encore essayé à quel point cela fonctionne mais je suppose que ce serait assez bon. Les images sont déjà assez similaires (dans mon cas d'utilisation), donc je peux utiliser une valeur seuil assez élevée.
Je suppose qu'il existe des dizaines d'autres solutions possibles pour cela qui fonctionneraient plus ou moins (comme la tâche elle-même est assez simple car je veux seulement détecter la similarité si elles sont vraiment très similaires). Que suggérerais-tu?
Il y a quelques très liés/questions similaires au sujet de l'obtention d'une signature/empreinte/hachage à partir d'une image:
- OpenCV/SURF How to generate a image hash/fingerprint/signature out of the descriptors?
- Image fingerprint to compare similarity of many images
- Near-Duplicate Image Detection
- OpenCV: Fingerprint Image and Compare Against Database.
- more, more, more, more, more, more, more
En outre, je suis tombé sur ces mises en œuvre qui ont de telles fonctions pour obtenir une empreinte digitale:
- pHash
- imgSeek (GitHub repo) (GPL) basé sur le papier Fast Multiresolution Image Querying
- image-match. Très similaire à ce que je cherchais. Similaire à pHash, basé sur An image signature for any kind of image, Goldberg et al. Utilise Python et Elasticsearch.
- iqdb
- ImageHash. soutient pHash.
Quelques discussions sur hash image perceptives: here
Un peu offtopic: Il existe de nombreuses méthodes pour créer des empreintes digitales audio. MusicBrainz, un service Web qui fournit une recherche d'empreintes digitales pour les chansons, a un good overview in their wiki.Ils utilisent AcoustID maintenant. C'est pour trouver des correspondances exactes (ou presque exactes). Pour trouver des correspondances similaires (ou si vous avez seulement des extraits ou du bruit élevé), jetez un oeil à Echoprint. Une question SO connexe est here. Donc, il semble que cela soit résolu pour l'audio. Toutes ces solutions fonctionnent assez bien.
Une question un peu plus générique à propos de la recherche floue en général est here. Par exemple. il y a locality-sensitive hashing et nearest neighbor search.
Peut-être que les empreintes digitales pourraient aider? http: // stackoverflow.com/questions/596262/image-empreinte-de-comparer-similitude-de-nombreuses-images – GWW
La métrique de Wasserstein, également connue sous le nom de distance du moteur de la terre (EMD), est quelque chose que les gens semblent ignorer, mais donnerait ce que tu veux ici. – mmgp
duplication possible de [Comparaison d'images - algorithme rapide] (http://stackoverflow.com/questions/843972/image-comparison-fast-algorithm) – sashoalm