J'ai une collection de photos JPEG, chacune de 500 à 600 pixels sur le côté le plus long. Comment puis-je détecter celles qui ont été agrandies algorithmiquement à partir d'une photo sensiblement plus petite?
Un marché en ligne exige que chaque vendeur télécharge des photos des produits qu'il vend, et ces photos doivent avoir au moins 500 pixels de large ou 500 pixels de haut car les photos de produits avec peu de détails provoquent une mauvaise expérience pour les acheteurs. Je peux déjà savoir si un vendeur essaie de contourner cette exigence en ajoutant une bordure de couleur unie, comme l'extension du fond blanc standard avec plus de blanc. Mais ces derniers temps, les vendeurs ont commencé à contourner cela en mettant à l'échelle les anciennes photos prises avant la publication de l'exigence de 500 pixels. Quelle est la bonne façon de déterminer si les photos ont été agrandies avec une interpolation du plus proche voisin, bilinéaire ou bicubique?
la source
Réponses:
Demandez à un CHIEN de flairer les photos.
Si vous allez pénaliser les photos agrandies numériquement, vous pourriez aussi bien pénaliser les photos floues. Les bords flous et les détails des deux provoquent la même mauvaise expérience pour les téléspectateurs, qu'ils soient causés par un petit original ou une mise au point médiocre. Ce que vous voulez faire, c'est détecter le flou, c'est-à-dire l'absence de hautes fréquences spatiales.
Essayez de faire la différence entre une image et une copie floue d'elle-même. Si une image est déjà floue, un flou gaussien à 1 pixel ne changera pas l'image autant que si l'image était nette. Il y aura donc plus de différence entre une image nette et une version floue qu'entre une image floue et une autre version floue. En vision par ordinateur, cette technique est appelée la " différence des gaussiens " (DOG).
J'ai juste essayé ceci sur une photo de 400x480 pixels et sur la même chose qui avait été réduite à 200x240 (50%) puis agrandie à 400x480 (200%), et les bords de la photo à l'échelle étaient nettement plus faibles. Il ne sera pas concluant sur un agrandissement léger tel que 140%, mais il attrapera des cas flagrants.
Plusieurs bibliothèques de vision par ordinateur incluent des moyens de calculer la différence de Gaussiens sur une image. Il en va de même pour de nombreux éditeurs d'images graphiques. Les versions récentes de GIMP, par exemple. inclure une macro DOG qui automatise les étapes 2 à 4: Filtres> Détection des bords> Différence des gaussiens, puis définissez les rayons sur 1,0 et 0,0.
Questions connexes sur d'autres sites Stack Exchange:
DOG n'attrapera pas le voisin le plus proche, mais vous pouvez le faire en recherchant un modèle de lignes et de colonnes identiques à leur voisin immédiat vers le haut ou vers la gauche.
la source
x + amt*(x - GB(x, r))
. La combinaison de USM et d'agrandissement ne stimulera que les médiums (fréquences spatiales moyennes), pas les aigus, car les aigus n'existent pas. DOG (x, 1, 0) isole les sommets.Je ne pense pas que cela soit possible au sens général. Il existe de nombreux algorithmes de mise à l'échelle possibles, avec une signature qui peut être difficile à détecter sans ambiguïté sans connaissance du contenu de l'image (à titre d'exemple extrême, une zone de couleur uniforme mise à l'échelle est toujours de couleur uniforme ...).
Une option serait peut-être de calculer une métrique pour la complexité de l'image, telle qu'une estimation d'entropie (par exemple, voir /programming/4935380/get-or-calculate-the-entropy-of-an-image-with -ruby-and-imagemagick ).
Si vous procédez ainsi sur un grand nombre d'images, vous pouvez générer des statistiques pour l'ensemble de la collection. Vous pouvez ensuite examiner manuellement les images qui sont aberrantes dans ces statistiques.
Malheureusement, cela entraînera toujours des faux positifs et les images qui ont été bien mises à l'échelle peuvent ne pas être capturées (mais si elles sont bonnes, est-ce important?)
la source
Je prendrais une approche hybride. Je pense que les autres idées d'utiliser une différence de gaussiens, de vérifier EXIF ou d'autres métadonnées, ou même FFT peuvent être combinées. Un autre moyen peut-être plus simple consiste à simplement prendre chaque image, à la réduire, à la redimensionner et à la comparer. S'ils sont très similaires (en utilisant peut-être quelque chose comme Delta E , peut-être), il est probable qu'ils ont été mis à l'échelle (ou flous comme le suggère un autre post). Peut-être pourriez-vous faire un seuil du nombre de tests réussis vs échoués? Si plus de la moitié des tests réussissent, c'est bien, sinon c'est mauvais, ou nécessite une intervention humaine pour vérifier, ou quelque chose comme ça.
la source
Vous devriez être en mesure de faire un assez bon travail en déballant partiellement les données JPEG elles-mêmes et en effectuant un comptage trivial.
Les données JPEG sont créées en effectuant une transformation en cosinus discrète sur les données d'image d'origine, en quantifiant (en jetant les données haute résolution), puis en parcourant le bloc DCT résultant en zigzag et en compressant le flux de bits résultant avec le codage Huffman.
Si vous inversez le codage Huffman et annulez le zigzag, vous aurez une série de blocs DCT 8x8, dans lesquels les données de fréquence les plus basses se trouvent dans le coin supérieur gauche du bloc et les informations de fréquence les plus élevées sont en bas à droite.
Cela signifie que vous pouvez littéralement regarder les données dans ce format intermédiaire et dire si elles ont été suréchantillonnées, car tous les blocs 8x8 auront des valeurs non nulles uniquement dans le coin supérieur gauche (à peu près).
la source
En fait, vous pouvez
Vous n'avez pas besoin d'un chien pour renifler l'image. Aller à:
http://rest7.com/image_upscaled
Sur cette page, vous pouvez télécharger votre image et obtenir des dimensions originales , comme ceci:
Parfois, il ne devine pas correctement la résolution d'origine. Je pense que cela dépend de l'algorithme de mise à l'échelle utilisé sur la photo. J'ai également découvert que si une photo était mise à l'échelle puis compressée au format JPEG avec une forte compression (comme 30%), les artefacts JPEG rendaient cette page plus difficile à deviner. Mais si vos photos sont de bonne qualité, mises à l'échelle en utilisant des méthodes populaires (Lanczos, Bilinéaire), elles devraient être assez précises.
Voici 2 exemples d'images:
ORIGINAL
https: // i. empiler. imgur. com / iXYKV.png
(désolé, je n'ai pas assez de réputation pour poster plus de 2 liens)
UPSCALED & CROPPED
Si vous postez la photo recadrée, cette page reviendra:
Vous pouvez donc voir qu'il a détecté que l'image a été agrandie et recadrée. Il ne vous indiquera pas la taille de l'image d'origine avant le recadrage, car il n'est tout simplement pas possible d'obtenir des informations sur quelque chose qui a été supprimé uniquement à partir des pixels laissés intacts.
la source