Saya mencoba menulis skrip yang memotong setiap piksel dalam sebuah foto dan menerapkan bokeh pada gambar secara keseluruhan.
Saya membuat skrip berdasarkan tautan ini , namun itu tampaknya merupakan peretasan.
Saya memiliki tiga gambar input: peta kedalaman hitam dan putih, foto, dan gambar "sikat" bokeh (yang saat ini merupakan segi enam). Untuk setiap piksel foto, saya mencap kuas bokeh sehingga berpusat pada piksel itu dan dalam warna piksel itu.
Kelihatannya ... oke pada sikat bokeh kecil, tapi begitu saya meningkatkan ukuran sikat bokeh akhirnya terlihat seperti gaussian blur. Berikut adalah gambar kali kuadrat dengan algoritme saya:
Nevermind the dark edge, saya bisa memperbaikinya.
Anda bisa mengatakan itu berbeda dari gaussian, tetapi masih jauh dari apa yang bisa disebut bokeh, dengan tepi yang tajam:
Saya mengerti mengapa algoritma saya melakukan apa yang dilakukannya ... bagaimana saya bisa mensimulasikan bokeh secara lebih akurat?
sumber
Jawaban:
Saya pikir masalah utamanya adalah rentang dinamis, algoritme Anda mungkin benar tetapi Anda bekerja pada tipe data yang salah.
Sumber cahaya titik yang jika tidak bisa klip dan pergi putih murni akan tersebar di area yang lebih besar oleh lensa yang tidak fokus, sehingga membentuk disk yang tidak secerah itu dan karena itu tidak klip.
Itu sebabnya Anda mendapatkan lingkaran-lingkaran bagus itu di gambar bokeh asli Anda. Jika Anda memotong sinyal (membuatnya kurang terang dari yang seharusnya dan kemudian menyebar dengan simulasi bokeh Anda, Anda mendapatkan lingkaran redup (atau segi enam, atau apa pun) yang tidak menonjol dan dengan demikian tidak terlihat realistis.
Apa yang Anda miliki dalam rantai gambar nyata adalah:
Apa yang kamu lakukan adalah
Anda tidak akan mendapatkan hasil yang benar karena Anda tidak bekerja dengan data linier.
Apa yang dapat Anda lakukan adalah mencoba untuk meluruskan data, mengganti rentang dinamis apa pun yang hilang akibat kliping, melakukan simulasi bokeh Anda, dan kemudian mengulang operasi nonlinier!
Ini sebuah contoh. Saya sudah mulai dengan gambar HDR yang telah dipetakan, memberikan hasil yang sangat nonlinier. Ini adalah jenis gambar terburuk untuk dicoba dengan simulasi bokeh!
Melakukan operasi konvolusi standar untuk mensimulasikan bokeh (menggunakan alat blur lensa photoshop) menghasilkan hasil ini, yang sangat mirip dengan apa yang Anda dapatkan:
Untuk mendapatkan hasil yang lebih baik, saya menerapkan kurva ekstrem untuk mencoba dan mendapatkan gambar kembali ke kira-kira seperti apa sebelum tonemapping, di mana highlight jauh, lebih terang daripada sisa gambar. Saya melakukan ini dengan dengan alat level, mendorong input tengah jauh ke kanan, dari 1,0 menjadi sekitar 0,2). Saya kemudian menerapkan alat blur lensa, seperti sebelumnya. Akhirnya saya menerapkan kurva ekstrem ke arah yang berlawanan dengan kurva pertama. Hasilnya, meski jauh dari sempurna, jauh lebih mirip bokeh lensa asli:
Jika Anda melakukan ini dalam kode, maka coba cubing setiap nilai, lalu terapkan simulasi bokeh rutin Anda, lalu ambil akar pangkat tiga dari setiap nilai. Anda akan melihat peningkatan. Mungkin perlu beberapa penyesuaian.
tl; dr bahkan jika Anda telah menerapkan model matematika bokeh yang sempurna, itu harus diterapkan pada data linier yang tidak terpotong. Jika Anda menerapkan perhitungan yang sama untuk data yang sangat dimodifikasi (bahkan standar dalam kamera JPEG sangat dimodifikasi dari sudut pandang matematika) Anda akan mendapatkan hasil yang sangat berbeda.
sumber
Pertama-tama, dalam optik, hanya cahaya yang bertambah dan kegelapan tidak. Pastikan algoritme Anda tidak mengeluarkan piksel gelap keluar dari lokasi aslinya. Piksel yang dihasilkan harus menyerupai maksimum piksel sumber terdekat daripada rata-rata. Atau, lebih tepatnya, Anda akan menjumlahkan logaritma yang memengaruhi piksel sumber.
Kemungkinan penyebab lain mengapa tepi Anda mungkin tidak tajam adalah jika tepi topeng Anda tidak tajam. Animasi di halaman yang Anda berikan sebagai referensi bisa disalahpahami sehingga dalam topeng, piksel asli cerah dan yang lainnya secara bertahap lebih gelap. Ini akan menerjemahkan ke tepi berlumpur dalam bokeh yang dihitung juga. Dalam fotografi, lubang memiliki tepi yang pasti, bukan yang bertahap. Jadi sebenarnya sebagian besar piksel dalam topeng harus memiliki kecerahan yang sama dan hanya tepi (di mana kurang dari satu piksel harus diwarnai untuk garis yang halus) dapat menjadi beberapa warna abu-abu.
Anda juga menyebutkan memiliki peta kedalaman, tetapi tidak ada kata tentang menggunakannya . Ukuran topeng bokeh Anda harus berkorelasi dengan kedalaman piksel dan perbedaan kedalaman bidang fokus - semakin jauh piksel berasal dari bidang fokus (di kedua arah), semakin besar topengnya. Pada bidang fokus, ukuran topeng harus 1 × 1 piksel.
sumber