Ich möchte meine Fotos schneller überprüfen lassen, wenn ich sie von der Kamera auf den Computer lege. Sicherlich gibt es einige Parameter, die ich programmgesteuert aus den Fotos extrahieren kann, und dieser Wert könnte ausreichen, um einige Fotos automatisch in den Stapel "Verwerfen" zu legen.
Ich denke an Algorithmen, um Kanten zu erkennen, eine durchschnittliche Schärfe / Unschärfe des Bildes zu erzielen oder ähnliches.
Ich weiß, dass dieses Skript nicht wirklich alle schlechten Fotos verwirft und die guten behält, aber ich hoffe, die total beschissenen zu verwerfen.
Ich bin mir ziemlich sicher, dass ich mit ImageMagick ein Shell-Skript programmieren kann (aber ich bin offen für jede Befehlszeilensoftware), um das zu bekommen, was ich brauche. Das Problem ist, dass ich nicht weiß, nach welchen Werten ich suchen soll, um bessere Ergebnisse zu erzielen.
TLDR; Auf welche Dinge sollte ich achten, um ein Bild programmgesteuert verwerfen zu können (Kantenerkennung, Schärfe)?
Ich benutze Fedora Linux.
Bearbeiten: Ich glaube nicht, dass diese Frage ein Duplikat von Gibt es eine Fotoanalyse-Software, die Bilder vorsortiert, indem sie potenzielle technische Probleme identifiziert? weil diese Frage nach einer Softwareempfehlung fragt und empfohlen wird, die Antworten im Workflow zu ändern (und Software zu verwenden, die unter Linux nicht verfügbar ist), während ich nach dem frage, was bessere Ergebnisse bei der Erkennung schlechter Fotos liefert.
quelle
Antworten:
Eine vernünftige Antwort darauf wäre "es kommt darauf an" (eine andere Perspektive besteht darin, " ein wenig gegen die Idee objektiver Metriken zu kämpfen ").
Ich würde empfehlen, diese Tabelle zu konsultieren, um festzustellen, wie lange Sie damit verbringen sollten, einen schnelleren Weg zu finden, wenn Sie nach „Schnelligkeit“ suchen.
Wenn Sie sich jedoch dazu entschließen, dies als Übung zum Verständnis der rechnergestützten Bildanalyse zu betrachten, werfen Sie einen Blick auf OpenCV .
Zu Beginn benötigen Sie wahrscheinlich eine klarere Definition von "totaler Mist". Ich würde einen datengetriebenen Ansatz vorschlagen. Gehen Sie eine vernünftige Auswahl Ihrer Bilder manuell durch, teilen Sie sie grob in gut / schlecht / Mist (G / B / C) auf. Sehen Sie sich alle Merkmale genauer an, die C von G oder B trennen könnten. Versuchen Sie, diese Merkmale so einfach wie möglich zu beschreiben (zB Farbstufen, unscharf, zu hell, zu dunkel usw. +). übersetzen Sie dies in OpenCV-Begriffe. Schreiben Sie einen Code, um die Theorie zu testen. klassifizieren. Wiederholen, bis zufrieden.
quelle
Abhängig von der Sprache, in der Sie OpenCV verwenden, wie oben vorgeschlagen, oder von der .net-äquivalenten Emgu . Grundsätzlich sollten Sie das Bild in Graustufen skalieren, dann eine Laplace-Unschärfe verwenden, dann die Bilddaten abrufen und das Bild überprüfen, um festzustellen, ob es innerhalb eines Schwellenbereichs liegt. Wenn es sich in einem bestimmten Bereich befindet, ist das Bild nicht verschwommen. Wenn sich das Bild außerhalb dieses Bereichs befindet, ist dies der Fall.
Unten ist meine Implementierung mehrerer Fotos mit VB.net
quelle
ImageMagick ist dein Freund hier. Sie werden eine Menge Skripte schreiben, die es Prorrams nennen.
ZB Bildarithmetik:
Nehmen Sie das Bild auf. Verwischen Sie es zu einem neuen Bild. Subtrahieren Sie Bild 2 von Bild 1 und nehmen Sie den absoluten Wert des Ergebnisses. Summiere die Pixel des Ergebnisses und den Durchschnitt. Schwelle.
Ein scharfes Bild unterscheidet sich erheblich von dem unscharfen Bild, sodass der Durchschnittswert der Subtraktion hoch ist.
Ein verschwommenes Bild unterscheidet sich viel weniger von einem verschwommenen verschwommenen Bild.
Wie einer der Kommentare zu einer anderen Antwort hervorhebt, ist ein Bild manchmal absichtlich verschwommen. Manche Leute mögen Bokeh. Machen Sie also einen weiteren Schritt und nehmen Sie das mittlere Drittel oder das mittlere Viertel des Bildes.
Nehmen Sie das Histogramm des Bildes. Wenn mehr als X% der Pixel für einen Kanal gesättigt sind (> 248), werden die Glanzlichter ausgeblasen.
quelle