40 votes

Quel algorithme pourrait être utilisé pour déterminer si les images sont "identiques" ou similaires, quelle que soit leur taille ?

TinEye Le moteur de recherche d'images inversées (reverse image search engine) vous permet de télécharger une image ou de créer un lien vers celle-ci. Il est capable d'effectuer une recherche parmi le milliard d'images qu'il a explorées et de renvoyer des liens vers les images qu'il a trouvées et qui sont identiques.

Cependant, il ne s'agit pas d'une somme de contrôle naïve ou de quoi que ce soit d'autre. Il est souvent capable de trouver des images d'une résolution supérieure et inférieure et d'une taille plus grande et plus petite que l'image originale que vous fournissez. C'est une bonne utilisation du service, car il m'arrive souvent de trouver une image et d'en vouloir la version à la plus haute résolution possible.

De plus, il a trouvé des images d'un même ensemble d'images où les personnes sont dans une position différente, mais où l'arrière-plan reste le même.

Quel type d'algorithme pourrait TinEye qui lui permettrait de comparer une image avec d'autres de tailles et de taux de compression différents, tout en déterminant avec précision qu'il s'agit de la "même" image ou du même ensemble ?

40voto

Igor Krivokon Points 6999

Ces algorithmes sont généralement basés sur les empreintes digitales. L'empreinte digitale est une structure de données raisonnablement petite, qui ressemble à un long code de hachage. Cependant, les objectifs de la fonction d'empreinte digitale sont opposés à ceux de la fonction de hachage. Une bonne fonction de hachage doit générer des codes très différents pour des objets très similaires (mais pas égaux). La fonction d'empreinte digitale devrait, au contraire, générer la même empreinte digitale pour des images similaires.

Pour vous donner un exemple, voici une fonction d'empreinte digitale (pas particulièrement bonne) : redimensionnez l'image en carré de 32x32, normalisez et quantifiez les couleurs, en réduisant le nombre de couleurs à quelque chose comme 256. Vous obtenez alors une empreinte digitale de 1024 octets pour l'image. Conservez un tableau des empreintes => [liste des URL des images]. Lorsque vous avez besoin de rechercher des images similaires à une image donnée, il suffit de calculer sa valeur d'empreinte et de trouver la liste d'images correspondante. Facile.

Ce qui n'est pas facile : pour être utile en pratique, la fonction d'empreinte digitale doit être robuste face aux recadrages, aux transformations affines, aux changements de contraste, etc. La construction de bonnes fonctions d'empreintes digitales est un sujet de recherche distinct. Très souvent, elles sont réglées à la main et utilisent beaucoup d'heuristiques (c'est-à-dire qu'elles utilisent la connaissance du contenu typique d'une photo, du format de l'image / des données supplémentaires dans EXIF, etc.)

Une autre variante consiste à utiliser plus d'une fonction d'empreinte digitale, à essayer d'appliquer chacune d'entre elles et à combiner les résultats. En fait, c'est similaire à la recherche de textes similaires. Au lieu d'un "sac de mots", la recherche de similarité d'images utilise un "sac d'empreintes digitales" et détermine combien d'éléments d'un sac sont identiques à des éléments d'un autre sac. Comment rendre cette recherche efficace est un autre sujet.

Maintenant, en ce qui concerne les articles/papiers. Je n'ai pas pu trouver un bon article qui donnerait un aperçu des différentes méthodes. La plupart des articles publics que je connais traitent de l'amélioration spécifique de certaines méthodes. Je pourrais vous recommander de les consulter :

"Empreinte digitale du contenu à l'aide d'ondelettes" . Cet article traite de l'empreinte audio à l'aide d'ondelettes, mais la même méthode peut être adaptée à l'empreinte d'images.

REGROUPEMENT PAR PERMUTATION : CONCEPTION DE FONCTIONS DE HACHAGE INTELLIGENTES POUR LA RECHERCHE D'IMAGES ET DE SONS . Info sur les hachages sensibles à la localité .

Regroupement de fonctions pour la recherche d'images Web partiellement dupliquées à grande échelle . Un très bon article, qui traite de SIFT et du regroupement des fonctions pour plus d'efficacité. Il comporte également une bibliographie intéressante à la fin.

8voto

Vinko Vrsalovic Points 116138

Elle est probablement basée sur l'amélioration des algorithmes d'extraction de caractéristiques, en tirant parti des caractéristiques qui sont invariantes à l'échelle.

Jetez un coup d'œil à

ou, si vous êtes VRAIMENT intéressé, vous pouvez débourser quelque 70 dollars (ou au moins regarder la preview Google) pour

7voto

RipperDoc Points 204

Le créateur du site FotoForensics a publié un article sur ce sujet sur son blog. Il m'a été très utile et a montré des algorithmes qui peuvent être suffisants pour vous et qui nécessitent beaucoup moins de travail que les ondelettes et l'extraction de caractéristiques.

http://www.hackerfactor.com/blog/index.php?/archives/529-Kind-of-Like-That.html

aHash (également appelé "Average Hash" ou "Mean Hash"). Cette approche écrase l'image en une image 8x8 en niveaux de gris et définit les 64 bits du hachage en se basant sur le fait que la valeur du pixel est supérieure ou non à la valeur de référence. dans le hachage selon que la valeur du pixel est supérieure ou non à la couleur moyenne de l'image.

pHash (également appelé "hachage perceptif"). Cet algorithme est similaire à unHash mais utilise une transformée en cosinus discrète (DCT) et compare en se basant sur des fréquences plutôt que des couleurs. sur des fréquences plutôt que sur des valeurs de couleur.

dHash Comme aHash et pHash, dHash est assez simple à mettre en œuvre et est beaucoup plus précis qu'il n'a le droit de l'être. En tant qu'implémentation dHash est presque identique à aHash, mais il est beaucoup plus performant. bien meilleures. Alors que aHash se concentre sur les valeurs moyennes et que pHash évalue des les modèles de fréquence, dHash suit les gradients.

4voto

Boojum Points 4688

La transformation de Hough est un très vieil algorithme d'extraction de caractéristiques, que vous pouvez trouver intéressant. Je doute que ce soit ce que tinyeye utilise, mais c'est un bon point de départ simple pour apprendre l'extraction de caractéristiques.

Il existe également diapositives pour un exposé soigné de certaines personnes de l'Université de Toronto sur leur travail à astrométrie.net . Ils ont développé un algorithme permettant de faire correspondre des images du ciel nocturne prises au télescope à des emplacements dans des catalogues d'étoiles afin d'identifier les caractéristiques de l'image. C'est un problème plus spécifique que celui que tinyeye essaie de résoudre, mais je m'attends à ce que beaucoup des idées de base dont ils parlent soient applicables au problème plus général.

4voto

j_random_hacker Points 28473

http://tineye.com/faq#how

Sur cette base, La réponse de Igor Krivokon semble être sur la bonne voie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X