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.
sumber
Jawaban:
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.
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.
sumber
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
sumber
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.
sumber