29 votes

Suppression des images en double

Nous avons une collection de photos de quelques centaines de gigaoctets. Un grand nombre de ces photos sont visuellement des doublons, mais avec des tailles de fichiers, des résolutions, des compressions, etc. différentes.

Est-il possible d'utiliser des méthodes de traitement d'image spécifiques pour rechercher et supprimer ces images en double ?

0voto

HS. Points 1960

Le plus important est de rendre les dossiers comparables.

Une solution générique pourrait consister à mettre à l'échelle toutes les images à une certaine taille fixe et à les mettre en niveaux de gris. Puis enregistrer les images résultantes dans un répertoire séparé avec le même nom pour une référence ultérieure. Il serait alors possible de trier par taille de fichier et de comparer visuellement les entrées voisines.

Les images résultantes peuvent être quantifiées de certaines manières afin de détecter par programme les similitudes (moyenne des blocs, des lignes, etc.).

0voto

dbr Points 66401

J'imagine que la méthode la plus évolutive serait de stocker une empreinte digitale avec chaque image. Ensuite, lorsqu'une nouvelle image est ajoutée, il suffit d'utiliser la commande suivante SELECT id FROM photos where id='uploaded_image_id' pour vérifier les doublons (ou prendre les empreintes digitales de toutes les images, puis effectuer une recherche de doublons).

Évidemment, un simple fichier de hachage ne fonctionnerait pas car le contenu réel diffère

Empreintes acoustiques / cet article peut être un bon début pour le concept, car il existe de nombreuses implémentations de celui-ci. Ici est un article sur les empreintes digitales des images.

Cela dit, vous pouvez peut-être vous en sortir avec quelque chose de plus simple. Quelque chose d'aussi basique que de redimensionner l'image pour qu'elle soit de même largeur ou hauteur, de soustraire image_a de image_b et en additionnant la différence. Si la différence totale est inférieure à un seuil, l'image est un duplicata.

Le problème est que vous devez comparer chaque image à une autre. Le temps nécessaire va augmenter de façon exponentielle..

0voto

Nick Johnson Points 79909

Si vous pouvez trouver un moyen de comparer des images qui obéit à l'inégalité triangulaire (par exemple, si d(a,b) est la différence entre les images a et b, alors d(a,b) < d(a,c) + d(b,c) pour tous les a,b,c), alors a BK-Tree serait un moyen efficace d'indexer les images de telle sorte que vous puissiez trouver des correspondances en O(log n) temps au lieu de O(n) temps pour chaque image.

Si vos correspondances sont limitées à la même image après des quantités variables de compression/redimensionnement/etc, alors la conversion à une taille canonique/équilibre des couleurs/etc et la simple addition des carrés des différences de chaque pixel peuvent être une bonne métrique, et cela obéit à l'inégalité triangulaire, donc vous pourriez utiliser un arbre BK pour un accès efficace.

0voto

Ben Throop Points 1099

Si vous avez un peu d'argent à dépenser, et peut-être qu'une fois que vous aurez effectué un premier passage pour déterminer quelles images sont peut-être vous pourriez écrire un test pour le Turc mécanique d'Amazon.

https://www.mturk.com/mturk/welcome

En fait, vous créeriez un petit widget qu'AMT montrerait à de vrais utilisateurs humains qui n'auraient plus qu'à répondre à la question "Ces deux images sont-elles identiques ?". Ou vous pourriez leur montrer une grille de 5 x 5 images et leur demander "Lesquelles de ces images correspondent ?". Vous recueillez alors les données.

Une autre approche consisterait à utiliser les principes de l'informatique humaine, qui ont été adoptés de manière très célèbre par Luis Von Ahn ( http://www.cs.cmu.edu/~biglou/ ) avec reCaptcha, qui utilise les réponses Captcha pour déterminer les mots illisibles qui ont été soumis à la reconnaissance optique de caractères, contribuant ainsi à la numérisation des livres. Vous pourriez créer un captcha qui demanderait aux utilisateurs d'aider à affiner les images.

-1voto

Cela ressemble à un problème de procédure plutôt qu'à un problème de programmation. Qui télécharge les photos ? Vous ou les clients ? Si vous téléchargez la photo, normalisez les dimensions à une échelle et un format de fichier fixes. Les comparaisons seront ainsi plus faciles. Cependant, en l'état actuel des choses, à moins que vous ne disposiez de plusieurs jours, voire de plusieurs semaines de temps libre, je vous suggère plutôt de supprimer manuellement les images en double, par vous-même ou par votre équipe, en comparant visuellement les images.

Vous devriez peut-être regrouper les images par lieu puisqu'il s'agit d'images touristiques.

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