Sifat apa dari suatu gambar yang dapat digunakan untuk secara terprogram membuangnya sebagai "buruk"?

9

Saya ingin memiliki proses peninjauan yang lebih cepat dari foto-foto saya ketika saya membuangnya dari kamera ke komputer. Tentunya ada beberapa parameter yang dapat saya ekstrak secara program dari foto dan nilai ini mungkin cukup untuk secara otomatis memasukkan beberapa foto ke dalam tumpukan 'buang'.

Saya sedang berpikir dalam algoritma untuk mendeteksi tepi, mendapatkan ketajaman / kekaburan rata-rata gambar atau sesuatu seperti itu.

Saya tahu bahwa skrip ini tidak akan benar-benar membuang semua foto buruk dan menyimpan yang baik, tetapi saya berharap untuk membuang yang benar-benar jelek.

Saya cukup yakin saya dapat memprogram skrip shell menggunakan ImageMagick (tapi saya terbuka untuk perangkat lunak baris perintah) untuk mendapatkan apa yang saya butuhkan. Masalahnya adalah saya tidak tahu nilai mana yang harus saya cari untuk mendapatkan hasil yang lebih baik.

TLDR; hal-hal apa yang harus saya perhatikan untuk dapat membuang gambar secara terprogram (deteksi tepi, ketajaman)?

Saya menggunakan Fedora Linux.

sunting: Saya tidak berpikir pertanyaan ini merupakan duplikat dari Apakah ada perangkat lunak analisis foto yang akan mengurutkan gambar dengan mengidentifikasi potensi masalah teknis? karena pertanyaan itu meminta rekomendasi perangkat lunak dan disarankan untuk membuat perubahan alur kerja dalam jawaban (dan menggunakan perangkat lunak yang tidak tersedia di linux), sementara saya bertanya apa yang akan memberikan hasil yang lebih baik dalam mendeteksi foto yang buruk.

Carlos Campderrós
sumber
3
Saya akan senang melihat jawaban untuk ini, tetapi saya tidak yakin ada satu. Misalnya, bayangkan foto dramatis serangga atau subjek bergerak lainnya di mana 95% gambar kabur atau tidak fokus. Ada banyak contoh lain di mana secara estetika mengevaluasi program dapat keliru menghilangkan beberapa gambar terbaik Anda. Bagaimanapun, saya ingin melihat bagaimana ini berkembang.
AK
2
Saya pasti akan melihat highlight yang meledak sebagai faktor.
chili555
1
Anda dapat mendeteksi guncangan kamera, eksposur over / under dengan cukup mudah, dan jika Anda benar-benar pintar, Anda dapat mencoba mengidentifikasi subjek foto untuk menguji apakah fokusnya, tapi hanya itu.
Matt Grum
2
Bahkan mendeteksi paparan di bawah atau terlalu banyak itu sulit, karena bagaimana dengan kasus di mana Anda menginginkannya seperti itu? Bagaimana jika gambarnya adalah kunci tinggi atau rendah (untuk efek atau hanya karena itulah pemandangannya).
Silakan Baca Profil Saya

Jawaban:

5

Jawaban yang masuk akal untuk ini adalah "itu tergantung" (perspektif lain adalah " bertempur sedikit melawan gagasan metrik obyektif ")

Saya akan merekomendasikan berkonsultasi dengan bagan ini untuk menentukan berapa lama Anda harus menghabiskan mencoba mencari cara yang lebih cepat jika 'kecepatan' adalah apa yang Anda cari.

masukkan deskripsi gambar di sini

Namun jika Anda memutuskan untuk melakukan pendekatan ini sebagai latihan dalam memahami analisis gambar komputasi, lihatlah OpenCV .

Untuk memulai, Anda mungkin perlu definisi yang lebih jelas tentang "omong kosong". Saya menyarankan pendekatan berbasis data; pergi melalui sampel yang wajar dari gambar Anda secara manual, secara kasar dibagi menjadi baik / buruk / omong kosong (G / B / C) melihat lebih dekat pada setiap fitur yang dapat memisahkan C dari G atau B, cobalah untuk menggambarkan fitur-fitur ini sesederhana mungkin (mis. tingkat warna, buram, terlalu terang, terlalu gelap, dll +). terjemahkan ini ke dalam istilah OpenCV. tulis beberapa kode untuk menguji teorinya. menggolongkan. ulangi sampai puas.

zzkt
sumber
1

Bergantung pada bahasa yang Anda gunakan OpenCV seperti yang disarankan di atas atau itu .net equivilent Emgu . Pada dasarnya Anda ingin skala abu-abu gambar, lalu gunakan Laplacian Blur, kemudian dapatkan data gambar dan periksa gambar untuk melihat apakah itu dalam rentang ambang batas. Jika dalam rentang tertentu gambar tidak buram, jika gambar di luar kisaran itu, itu.

Di bawah ini adalah implementasi saya dari banyak foto menggunakan 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
sumber
Ini tidak menjawab pertanyaan, hal-hal apa yang harus saya lihat untuk dapat membuang gambar secara terprogram (deteksi tepi, ketajaman)? Ini terdengar seperti implementasi saran dalam jawaban lain.
scottbb
Pertama-tama, saya akan merekomendasikan untuk tidak menghapus apa pun yang menurut progam buram. Karena tidak pernah 100% sempurna. Poster asli mengatakan untuk memeriksa apakah itu buruk. Jadi implementasi ini akan berhasil untuk itu. Implementasi ini menggunakan deteksi tepi. Masalahnya adalah "buruk" sangat bervariasi dan ketika saya berpikir buruk, saya pikir buram dan semacamnya.
Simon Dolby
Tetapi tampaknya komposisi dengan subjek kecil yang terfokus dengan baik, dengan banyak keburaman kreatif (bokeh), akan dikeluarkan karena sebagian besar kabur. Jadi blur yang disengaja gagal dalam pemeriksaan ini. (Saya juga setuju, saya tidak akan menghapus apa pun yang menurut sebuah program adalah "buruk". Komputer tidak dapat menafsirkan seni dengan baik)
scottbb
Itu adalah poin yang sangat adil tentang keburaman kreatif. Itu akan sangat sulit untuk diperbaiki. Saya akan membayangkan, mencoba menemukan rentang yang baik yang mencakup blur kreatif. Atau membuat rutinitas terpisah yang memeriksa keburaman kreatif yang tentu saja memiliki kisaran terpisah. Rentang saya dibuat sebagai hasil dari 40 gambar buram diperiksa.
Simon Dolby
1

ImageMagick adalah teman Anda di sini. Anda akan menulis banyak skrip yang menyebut itu prorrams.

Misalnya Gambar aritmatika:

Ambil gambarnya. Blur ke gambar baru. Kurangi gambar 2 dari gambar 1, dengan mengambil nilai absolut dari hasilnya. Jumlah piksel hasilnya, dan rata-rata. Ambang.

Gambar yang tajam sangat berbeda dari gambar yang kabur, sehingga nilai rata-rata pengurangan akan tinggi.

Gambar buram jauh lebih sedikit berbeda dari gambar buram.

Seperti yang ditunjukkan salah satu komentar pada jawaban lain, terkadang gambar sengaja dibuat kabur. Beberapa orang sebenarnya suka bokeh. Jadi, letakkan satu langkah lagi dan ambil sepertiga tengah atau tengah gambar.


Ambil histogram gambar. Jika lebih dari X% piksel jenuh (> 248) untuk saluran apa pun, maka sorotan ditiup.


Sherwood Botsford
sumber