11
votes

Détecter l'égalité des images à différentes résolutions

J'essaie de construire un script pour traverser mes photos d'origine, haute résolution et de remplacer les anciens résous que j'ai téléchargés sur Flickr avant d'avoir un compte Pro.

Pour beaucoup d'entre eux, je peux simplement utiliser des informations exif telles que la date suivie pour déterminer une correspondance. Mais certains sont vraiment anciens et que le fichier d'origine n'avait pas d'informations exif, ou il a été encombré par le logiciel de redimensionnement stupide que j'ai utilisé à l'époque.

Donc, incapable de compter sur les métadonnées, je suis obligé de recourir au contenu lui-même. Le problème est que les originaux sont dans différentes résolutions que celles sur Flickr (qui est tout le point de cette entreprise). Il y a donc un moyen pour moi de les comparer avec une sorte de mesure de similitude floue qui me permettrait de définir un seuil pour nécessiter une entrée humaine ou non?

Je suppose que connaître une image est une version redimensionnée de l'autre peut donner de meilleurs résultats que la similitude générale. Une solution dans n'importe quelle langue fera, mais Ruby serait un plus :)


0 commentaires

3 Réponses :


7
votes

problème intéressant, BTW :)

Solution lente ISH - Excellente chance de succès

Utilisez un détecteur de fonctionnalités d'échelle-invariant pour trouver des fonctionnalités correspondantes dans les deux images. Si les fonctionnalités sont assorties avec un score élevé à des endroits similaires, vous avez votre correspondance.

Je recommanderais SIFT qui génère un descripteur Invariant 128-Invariart 128-Integer pour une fonctionnalité trouvée dans une image. Surf (disponible dans OpenCV) est un autre détecteur de points de fonction (plus rapide).

Vous pouvez correspondre à des fonctionnalités sur deux images via Bruteforce (comparer chaque descripteur à un descripteur de l'autre image) qui est O (n ^ 2) mais assez rapide (surtout dans la mise en œuvre de VL SIFT). Mais si vous avez besoin de comparer les fonctionnalités d'une image à plusieurs images (que vous pourriez avoir à), vous devez construire un arbre des fonctionnalités pour l'interroger avec les caractéristiques de l'autre image. Les arbres K-D sont utiles et OpenCV a une belle mise en œuvre.

Solution rapide - pourrait travailler

Downsample exemple Votre image haute résolution sur les dimensions bases et utilisez une mesure de similarité comme SAD (où la somme des différences entre le bloc de, disent, 3x3 pixels autour d'un pixel dans les deux images est le score) pour déterminer une correspondance.


1 commentaires

Comment conviendriez-vous la "solution rapide" sur une base de données relationnelle?




3
votes

calculez le normalisé histogramme de couleur de Les deux images et les comparent à l'aide d'une méthode (intersection de l'histogramme, par exemple - voir le lien ci-dessus). Remarque L'histogramme normalisé est nécessaire car les images présentent différentes résolutions. Si les images sont si différentes, elles ne sont pas la même image. Mais si elles sont similaires, vous avez l'un de ces deux cas: (i) ils sont la même image ou (ii) sont des images différentes mais présentent des images similaires globales .

Pour étui (II), diviser les images et les carreaux rectangulaires et répétez le processus, comparant les carreaux correspondants. Vous essayez de prendre en compte les propriétés locales locales de l'image. Classer les résultats et choisir le meilleur match.


0 commentaires