J'ai besoin d'un moyen simple et rapide de comparer deux images pour la similitude. Ie 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.
(Plus concret, si cela compte: une image est une icône et l'autre image est une sous-zone d'une capture d'écran et je veux savoir si cette sous-zone est exactement l'icône ou non.)
J'ai OpenCV sous la main mais je ne suis toujours pas habitué.
Une possibilité à laquelle j'ai pensé jusqu'à présent: divisez les deux images en 10x10 cellules et pour chacune de ces 100 cellules, comparez l'histogramme des couleurs. Ensuite, je peux définir une valeur de seuil inventée et si la valeur que j'obtiens 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), je peux donc utiliser une valeur de seuil assez élevée.
Je suppose qu'il existe des dizaines d'autres solutions possibles pour cela qui fonctionneraient plus ou moins (car la tâche elle-même est assez simple car je ne veux détecter les similitudes que si elles sont vraiment très similaires). Que suggérerais-tu?
Il y a quelques questions très liées / similaires sur l'obtention d'une signature / empreinte digitale / hachage à partir d'une image:
- OpenCV / SURF Comment générer un hachage d'image / une empreinte digitale / une signature à partir des descripteurs?
- Empreinte digitale d'image pour comparer la similitude de nombreuses images
- Détection d'image quasi-dupliquée
- OpenCV: image d'empreinte digitale et comparaison avec la base de données .
- plus , plus , plus , plus , plus , plus , plus , plus
Aussi, je suis tombé sur ces implémentations qui ont de telles fonctions pour obtenir une empreinte digitale:
- pHash
- imgSeek ( GitHub repo ) (GPL) basé sur le document Fast Multiresolution Image Querying
- correspondance d'image . Très similaire à ce que je recherchais. Similaire à pHash, basé sur une signature d'image pour tout type d'image, Goldberg et al . Utilise Python et Elasticsearch.
- iqdb
- ImageHash . prend en charge pHash.
- Déduplicateur d'image (imagededup) . Prend en charge CNN, PHash, DHash, WHash, AHash.
Quelques discussions sur les hachages d'images perceptives: ici
Un peu hors sujet: il existe de nombreuses méthodes pour créer des empreintes digitales audio. MusicBrainz , un service Web qui fournit une recherche basée sur les empreintes digitales pour les chansons, a un bon aperçu dans leur wiki . Ils utilisent maintenant AcoustID . C'est pour trouver des correspondances exactes (ou presque exactes). Pour trouver des correspondances similaires (ou si vous n'avez que des extraits de code ou un bruit élevé), jetez un œil à Echoprint . Une question SO connexe est ici . Il semble donc que cela soit résolu pour l'audio. Toutes ces solutions fonctionnent assez bien.
Une question un peu plus générique sur la recherche floue en général est ici . Par exemple, il existe un hachage sensible à la localité et une recherche du plus proche voisin .