Évaluer la qualité d'une image par rapport à la compression?

j'ai des images que j'utilise pour une vision par ordinateur tâche. La tâche est sensible à la qualité de l'image. Je voudrais supprimer toutes les images qui sont en dessous d'un certain seuil, mais je ne suis pas sûr s'il y a une méthode/heuristique pour détecter automatiquement les images qui sont fortement compressées via JPEG. Quelqu'un a une idée?

11
demandé sur muckabout 2010-11-16 13:05:30

3 réponses

L'évaluation de la qualité de l'Image est un domaine de recherche en évolution rapide. Comme vous ne mentionnez pas être en mesure d'accéder aux images originales (non compressées), vous êtes intéressé par aucune référence évaluation de la qualité de l'image. Il s'agit en fait d'un problème assez difficile, mais voici quelques points pour vous aider à commencer:

  • puisque vous mentionnez JPEG, il y a deux principales caractéristiques de dégradation qui se manifestent dans les images compressées JPEG: blocage et flou
  • les mesures D'évaluation de la qualité de l'image sans référence recherchent généralement ces deux caractéristiques
  • Le blocage
  • est assez facile à repérer, car il n'apparaît que sur les limites des macroblocs. Les macroblocs sont de taille fixe -- 8x8 ou 16x16 selon ce que l'image a été encodée avec
  • flou est un peu plus difficile. Il se produit parce que des fréquences plus élevées dans l'image ont été atténués (enlevés). Vous pouvez découper l'image en blocs, DCT (Discrete Cosine Transform) chaque bloc et regarder les composants haute fréquence du résultat DCT. Si les composants haute fréquence sont absents pour une majorité de blocs, alors vous êtes probablement à la recherche d'une image floue
  • une autre méthode de détection du flou consiste à mesurer la largeur moyenne des bords de l'image. Effectuer la détection de bord de Sobel sur l'image et ensuite mesurer la distance entre minima/maxima locaux de chaque côté du bord. Google pour "a no-reference perceptual flou metric" par Marziliano -- c'est une approche célèbre. "No Reference Block Based Blur Detection" by Debing est un papier plus récent

quelle que soit la métrique que vous utilisez, pensez à la façon dont vous allez traiter les faux positifs/négatifs. Par opposition au simple battleholding, j'utiliserais le résultat métrique pour trier les images et puis couper la fin de la liste qui ressemble à ce qu'elle contient seulement des images floues.

votre tâche sera beaucoup plus simple si votre jeu d'images contient un contenu assez similaire (par exemple des visages seulement). Cela est dû au fait que les paramètres d'évaluation de la qualité de l'image peut souvent être influencée par le contenu de l'image, malheureusement.

Google Scholar est vraiment votre ami ici. J'aimerais pouvoir vous donner une solution concrète, mais je n'en ai pas encore ... si je le faisais, je serais un étudiant très réussi EN Master.

Mise à jour:

vient de penser à une autre idée: pour chaque image, Re-compresser L'image avec JPEG et examiner le changement de taille du fichier avant et après re-compression. Si la taille du fichier après re-compression est significativement plus petite qu'avant, alors il est probable que l'image n'est pas fortement compressée, car il y avait quelques détails significatifs qui ont été supprimés par re-compression. Sinon (très peu de différence ou la taille du fichier après re-compression est plus grande) il est probable que l'image était fortement compressée.

L'utilisation du réglage de qualité pendant la recompression vous permettra de déterminer ce que signifie exactement fortement comprimé .

si vous êtes sous Linux, cela ne devrait pas être trop difficile à mettre en œuvre en utilisant l'utilitaire convert de bash et imageMagick.

Vous pouvez essayer d'autres variantes de cette approche:

  • au lieu de la compression JPEG, essayez une autre forme de dégradation, comme le flou gaussien
  • au lieu de simplement comparer la taille des fichiers, essayez une métrique de référence complète comme SIM -- il y a une implémentation OpenCV librement disponible . D'autres implémentations (par ex. Matlab, C#) existent aussi, alors regardez autour de vous.

dites-moi comment vous allez.

19
répondu mpenkov 2010-11-17 23:58:05

j'ai fait tourner de nombreuses photos vers un livre ancien (donc une mise en page similaire, deux pages par image), mais certaines étaient beaucoup plus floues, au point que le texte ne pouvait pas être lu. J'ai cherché un script batch prêt à l'emploi pour trouver le plus flou, mais je n'en ai trouvé aucun utile, donc j'ai utilisé une autre partie du script obtenu sur le net (basé sur ImageMagick, mais ne fonctionne plus; Je ne pouvais pas récupérer l'auteur pour les crédits!), c'est utile pour évaluer le niveau de flou d'une image unique, modifié, et automatisée sur tout un dossier. J'ai téléchargé ici:

https://gist.github.com/888239

en espérant qu'il sera utile pour quelqu'un d'autre. Il fonctionne sur un système Linux, et utilise ImageMagick (et certains outils habituellement installés en ligne de commande, comme gawk, sort, grep, etc.).

3
répondu pceres 2012-06-27 18:52:57

un simple heuristique pourrait être de regarder width * height * color depth < sigma * file size . Vous devez déterminer une bonne valeur pour sigma , bien sûr. sigma serait dépendante sur l'entropie des images que vous regardez.

1
répondu bjoernz 2010-11-16 10:55:40