Welche Eigenschaften eines Bildes können verwendet werden, um es programmgesteuert als "schlecht" zu verwerfen?

9

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.

Carlos Campderrós
quelle
3
Ich würde mich freuen, die Antwort darauf zu sehen, aber ich bin mir nicht sicher, ob es eine gibt. Stellen Sie sich beispielsweise ein dramatisches Foto eines Insekts oder eines anderen sich bewegenden Motivs vor, bei dem 95% des Bildes unscharf oder unscharf sind. Es gibt viele andere Beispiele, bei denen die programmgesteuerte Bewertung der Ästhetik fälschlicherweise einige Ihrer besten Bilder eliminieren kann. Auf jeden Fall würde ich gerne sehen, wie sich das entwickelt.
AK
2
Ich würde sicherlich geblasene Highlights als Faktor betrachten.
Chili555
1
Sie können Verwacklungen bei Über- / Unterbelichtung leicht erkennen und wenn Sie wirklich schlau sind, können Sie versuchen, das Motiv des Fotos zu identifizieren, um zu testen, ob es scharfgestellt ist, aber das war es auch schon.
Matt Grum
2
Selbst das Erkennen von Unter- oder Überbelichtung ist schwierig, denn was ist mit Fällen, in denen Sie dies so wollten? Was ist, wenn das Bild entweder hoch oder niedrig ist (für den Effekt oder nur, weil die Szene so war)?
Bitte lesen Sie mein Profil

Antworten:

5

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.

Geben Sie hier die Bildbeschreibung ein

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.

zzkt
quelle
1

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

  Public Sub GetBlur()
    Dim List As String() = Directory.GetFiles("E:\Dartmoor\", "*.JPG")


    For Index As Integer = 1 To 2000
        Dim imgfile As String = List(Index)
        Dim Image As Drawing.Bitmap = Drawing.Bitmap.FromFile(imgfile)
        Dim img As Image(Of Gray, Byte) = New Image(Of Gray, Byte)(Image)
        Dim factor As Single()
        Dim imgB As Drawing.Bitmap = New Drawing.Bitmap(imgfile)
        imgB = New Drawing.Bitmap(imgB)
        Dim imgGray As Image(Of Gray, Byte) = img.Convert(Of Gray, Byte)()
        Dim imgTmp As Image(Of Gray, Single) = imgGray.Laplace(1)
        Dim maxLap As Short = -32767
        For Each MyByte As Single In imgTmp.Data
            If MyByte > maxLap Then

                maxLap = MyByte

            End If
        Next

        If maxLap > 300 Or maxLap < 150 Then
            List(Index) = imgfile & " is blurry"

        Else
            List(Index) = imgfile & " isn't blurry"
        End If

        '    'This saves the location of where the user is currently if they need to pause





        imgGray.Dispose()
        img.Dispose()
        imgTmp.Dispose()
        imgB.Dispose()

    Next
    Using sw As StreamWriter = New StreamWriter("Result.txt")
        For i As Integer = 1 To 2000
            sw.WriteLine(List(i))
        Next
    End Using
End Sub
Simon Dolby
quelle
Dies beantwortet nicht die Frage, auf welche Dinge ich achten muss, um ein Bild programmgesteuert verwerfen zu können (Kantenerkennung, Schärfe). Dies klingt nach einer Implementierung des Vorschlags in einer anderen Antwort.
Scottbb
Zuallererst würde ich empfehlen, nichts zu löschen, was laut Programm verschwommen ist. Weil es nie 100% perfekt ist. Das Originalplakat soll überprüfen, ob es schlecht ist. Diese Implementierung würde also dafür funktionieren. Diese Implementierung verwendet die Kantenerkennung. Das Problem ist, dass "schlecht" sehr vielfältig ist und wenn ich schlecht denke, denke ich verschwommen und so.
Simon Dolby
Aber es scheint, dass eine Komposition mit einem kleinen, gut fokussierten Thema mit viel kreativer Unschärfe (Bokeh) als größtenteils verschwommen rausgeschmissen wird. Eine absichtliche Unschärfe besteht diese Prüfung also nicht. (Ich stimme auch zu, ich würde nichts löschen, was mir ein Programm als "schlecht" bezeichnet hat. Computer können Kunst nicht gut interpretieren)
scottbb
Das ist ein sehr fairer Punkt in Bezug auf die kreative Unschärfe. Das wird sehr schwer zu beheben sein. Ich würde mir vorstellen, zu versuchen, eine gute Auswahl zu finden, die die kreative Unschärfe einschließt. Oder erstellen Sie eine separate Routine, die nach kreativen Unschärfen sucht, die natürlich einen separaten Bereich haben würden. Mein Bereich wurde als Ergebnis von 40 überprüften Bildunschärfen erstellt.
Simon Dolby
1

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.


Sherwood Botsford
quelle