Je voudrais avoir un processus d'examen plus rapide de mes photos lorsque je les vide de l'appareil photo vers l'ordinateur. Il y a sûrement certains paramètres que je peux extraire par programme à partir des photos et cette valeur pourrait être suffisante pour mettre automatiquement certaines photos dans la pile de `` rejet ''.
Je pense à des algorithmes pour détecter les bords, obtenir une netteté / flou moyenne de l'image ou quelque chose comme ça.
Je sais que ce script ne rejettera pas vraiment toutes les mauvaises photos et ne conservera pas les bonnes, mais j'espère éliminer celles qui sont totalement nulles.
Je suis presque sûr de pouvoir programmer un script shell à l'aide d'ImageMagick (mais je suis ouvert à tout logiciel en ligne de commande) pour obtenir ce dont j'ai besoin. Le problème est que je ne sais pas quelles valeurs dois-je rechercher pour obtenir de meilleurs résultats.
TLDR; quels éléments dois-je rechercher pour pouvoir supprimer une image par programme (détection des contours, netteté)?
J'utilise Fedora Linux.
edit: Je ne pense pas que cette question soit un doublon de Y a - t-il un logiciel d'analyse photo qui pré-triera les images en identifiant les problèmes techniques potentiels? parce que cette question demande une recommandation de logiciel et est suggérée de modifier le flux de travail dans les réponses (et d'utiliser un logiciel qui n'est pas disponible sur linux), alors que je demande ce qui donnera de meilleurs résultats pour détecter les mauvaises photos.
la source
Réponses:
Une réponse raisonnable à cela serait "ça dépend" (une autre perspective est de " lutter un peu contre l'idée de métriques objectives ")
Je recommanderais de consulter ce tableau pour déterminer combien de temps vous devriez passer à essayer de trouver un moyen plus rapide si la «rapidité» est ce que vous recherchez.
Cependant, si vous décidez d'aborder cela comme un exercice de compréhension de l'analyse d'images de calcul, jetez un œil à OpenCV .
Pour commencer, vous aurez probablement besoin d'une définition plus claire de «totalement merde». Je suggérerais une approche basée sur les données; passer par un échantillon raisonnable de vos images manuellement, diviser grossièrement en bon / mauvais / merde (G / B / C) regarder de plus près toutes les fonctionnalités qui pourraient séparer C de G ou B, essayer de décrire ces fonctionnalités aussi simplement que possible (par exemple, niveaux de couleur, flou, trop clair, trop sombre, etc. +). traduire cela en termes OpenCV. écrire du code pour tester la théorie. classer. répéter jusqu'à satisfaction.
la source
Selon la langue que vous utilisez OpenCV comme suggéré ci-dessus ou son équivalent Emgu .net . Fondamentalement, vous voudrez mettre l'image en niveaux de gris, puis utiliser un flou laplacien, puis obtenir les données d'image et vérifier l'image pour voir si elle se situe dans une plage de seuil. Si elle est dans une certaine plage, l'image n'est pas floue, si l'image est en dehors de cette plage, elle l'est.
Ci-dessous est mon implémentation de plusieurs photos en utilisant VB.net
la source
ImageMagick est votre ami ici. Vous allez écrire beaucoup de scripts qui appellent ça des prorrammes.
Par exemple, arithmétique d'image:
Prenez l'image. Le flou à une nouvelle image. Soustrayez l'image 2 de l'image 1, en prenant la valeur absolue du résultat. Additionnez les pixels du résultat et la moyenne. Seuil.
Une image nette est considérablement différente de l'image floue et la valeur moyenne de la soustraction sera donc élevée.
Une image floue est beaucoup moins différente d'une image floue floue.
Comme le souligne l'un des commentaires d'une autre réponse, une image est parfois intentionnellement floue. Certaines personnes aiment vraiment le bokeh. Alors, faites un autre pas et prenez le tiers du milieu ou le quart du milieu de l'image.
Prenez l'histogramme de l'image. Si plus de X% des pixels sont saturés (> 248) pour n'importe quel canal, les hautes lumières sont soufflées.
la source