Seperti yang disebutkan dalam jawaban lain, difraksi telah menyebabkan ketidakpatuhan. Untuk menguji ini, seseorang dapat mencoba mempertajam gambar menggunakan dekonvolusi dengan menggunakan fungsi penyebaran titik yang sesuai dengan F / 29. Untuk difraksi, kami memiliki (hingga normalisasi keseluruhan)
P (s) = {J 1 [π rs / ( λF )] / [π rs / ( λF )]} 2
di mana J 1 adalah fungsi Bessel dari jenis pertama orde 1 ,
s adalah jarak pada gambar yang diukur dalam piksel,
r adalah ukuran satu piksel (biasanya sekitar 4,2 * 10 ^ (- 6) meter untuk sensor pangkasan),
λ adalah panjang gelombang cahaya, dan
F adalah F-number, dalam hal ini 29.
Hal ini kemudian berlaku untuk cahaya monokromatik, untuk memperkirakan fungsi penyebaran titik untuk saluran warna yang dapat kita rata-rata pada beberapa kisaran panjang gelombang yang sesuai. Selain itu, seseorang harus mengintegrasikan P ke area piksel yang ditentukan oleh s.
Jika kita mengkompilasi fungsi penyebaran 3 titik untuk 3 saluran warna dengan cara ini kita dapat mempertajam gambar dengan mengubahnya menjadi ruang warna linier dan menerapkan algoritma dekonvolusi dan kemudian mentransformasikannya kembali ke sRGB. Saya mendapat hasil sebagai berikut:
Jadi wajah telah dipertajam secara signifikan hanya dengan menggunakan data tentang F-number dan asumsi tentang ukuran piksel. Artefak Banding terlihat di bagian gelap gambar, ini karena posterisasi setelah diubah kembali ke sRGB.
Seperti yang diminta, saya akan menambahkan beberapa detail lebih lanjut tentang program yang digunakan. Saya menggunakan ImageJ dan ImageMagick , saya juga menggunakan Mathematica untuk menghitung fungsi penyebaran titik, tetapi juga bisa dilakukan dalam ImageJ. Saya akan mulai dengan menjelaskan bagaimana saya melakukan dekonvolusi dengan ImageJ ketika saya sudah memiliki fungsi penyebaran titik. Untuk melakukan dekonvolusi, Anda perlu menginstal plugin untuk ImageJ, saya menggunakan plugin ini untuk kasus ini, tetapi ada juga plugin lain yang tersedia misalnya plugin DeconvolutionLab .
Pertama, Anda perlu mengonversi ke ruang warna linier, saya menggunakan ImageMagick untuk mengubah gambar unsharp (input.jpg) ke ruang warna linier menggunakan perintah:
convert input.jpg -colorspace RGB output.tif
Kemudian dengan ImageJ, Anda kemudian buka file output.tif. Kemudian, dari opsi menu, Anda memilih "gambar" lalu "warna" dan kemudian "Saluran Meludah". Kemudian dari menu pilih "plugins" dan kemudian "parallel iterative deconvolution" dan kemudian 2d deconvolution interative ".
Anda kemudian mendapatkan jendela dekonvolusi, Anda kemudian memilih gambar dan "PSF" berarti fucntion titik penyebaran, di sana Anda memilih file gambar yang berisi fungsi penyebaran titik. Untuk metode ini, saya memilih "WPL" yang didasarkan pada filter Wiener, yang biasanya bekerja cukup baik untuk gambar dengan noise rendah. Dalam opsi untuk WPL, periksa "normalisasi PSF", dan untuk filter low pass ubah nilainya menjadi 0,2, secara default adalah 1, tetapi nilai yang lebih rendah lebih baik untuk gambar dengan noise rendah (jika Anda memilih lebih besar, Anda harus akan mendapatkan gambar yang kurang tajam). Pilihan lain, Boundary dapat dipilih untuk menjadi refleksif, mengubah ukuran dapat diatur ke "kekuatan berikutnya 2", output dapat diatur ke 32 bit, presisi dapat diatur menjadi dua kali lipat. Saya memilih jumlah iterasi maksimum menjadi 15,
Anda kemudian menjalankan program dengan mengklik "deconvolve". Anda kemudian mendapatkan file gambar 32 bit sebagai output. Biasanya, nilai piksel sangat mirip dengan apa yang ada di gambar aslinya, tetapi Anda dapat memiliki beberapa piksel yang melebihi maksimum untuk format gambar asli. Jadi, dalam hal ini kami mulai dengan gambar 8 bit, tetapi dalam gambar dekonvolusi, Anda dapat memiliki nilai abu-abu yang melebihi 255 yang kemudian menyebabkan seluruh gambar menjadi terlalu gelap. Ini harus diperbaiki dengan memotong piksel ini ke 255, yang dapat Anda lakukan dengan memilih di menu "proses" dan kemudian "Matematika" dan kemudian "Max". Nilai maksimum kemudian akan digunakan untuk klip nilai abu-abu yang melebihi nilai itu. Perhatikan bahwa ini akan dilakukan untuk gambar yang terakhir Anda klik. Anda juga dapat melihat file mana yang merupakan "file saat ini" dengan memilih "
Kemudian setelah Anda mendekonvolusikan 3 komponen warna, Anda dapat menggabungkannya dengan memilih di menu "image", lalu "color" dan kemudian "Merge Channels". Anda kemudian mendapatkan gambar komposit yang dapat dikonversi menjadi 8 bit RGB menggunakan perintah "Stack to RGB" yang Anda temukan di sana.
Anda kemudian menyimpan gambar itu, sebut saja im.tif. Terakhir, Anda harus mengonversikan ini ke sRGB, Anda dapat melakukannya dengan ImageMagick menggunakan perintah:
convert im.tif -set colorspace RGB -colorspace sRGB output.tif
Pertanyaan selanjutnya adalah bagaimana cara mendapatkan fungsi penyebaran titik. Dalam praktiknya, jika Anda mengambil gambar seperti yang sedang dibahas di sini, Anda bisa saja mengambil gambar sumber titik, misalnya bintang di F / 29 dan menggunakannya sebagai fungsi penyebaran titik Anda. Sebagai alternatif, Anda dapat melihat batas kontras tinggi dan mengekstrak fungsi penyebaran titik dari cara nilai abu-abu berubah dari satu nilai ke nilai lainnya melintasi batas. Tetapi kemudian Anda mencoba untuk mempertajam gambar sebaik mungkin.
Dalam hal ini tujuannya adalah untuk mengkompilasi fungsi penyebaran titik untuk saluran warna berdasarkan apa yang Anda harapkan untuk F / 29, mendekonvolusi gambar dengan itu dan melihat apakah hasilnya terlihat cukup baik. Saya menggunakan Mathematica untuk melakukan beberapa perhitungan dan yang mana program aljabar komputer yang canggih itu cukup mudah untuk melakukan segala macam manipulasi termasuk rata-rata selama interval panjang gelombang dan mengintegrasikan lebih dari area pixel untuk membuat PSF lebih realistis.
Tetapi ImageJ juga memungkinkan Anda untuk membuat gambar baru yang dapat Anda gunakan sebagai fungsi penyebaran titik. Jika Anda mengklik "File" dan kemudian "Baru" Anda dapat membuat gambar berukuran 32 bit, katakanlah, 64 oleh 64 diisi dengan hitam. Anda kemudian dapat memprogram rumus untuk nilai abu-abu dengan memilih "proses", lalu "Matematika" dan kemudian "Makro". Untuk mendapatkan fungsi penyebaran titik untuk kasus ini yang melibatkan fungsi Bessel di sini, Anda dapat menggunakan fakta bahwa hal itu dijelaskan dengan baik oleh beberapa istilah pertama dari ekspansi seri. Halaman MathWorld yang saya tautkan memberi Anda rangkaian ekspansi ini, jadi, J 1 (x) 2 / x 2 dengan x = π rs / ( λF ) dapat diganti dengan fungsi dari bentuk A + B s 2 + C s 4. Perkiraan ini akan menjadi tidak valid jika s terlalu besar. Sekarang, kita tahu bahwa PSF cenderung nol, misalnya pada jarak sekitar 5 atau 6 piksel dapat diatur ke nol. Dengan asumsi bahwa polinomial masih kecil pada nilai-nilai ini, Anda dapat menulis Makro sebagai:
if(d<7) v = A + B * pow(d,2) + B * pow(d,4)
Anda kemudian membuat 3 gambar untuk, katakanlah, lambda = 650 nm, 500 nm dan 400 nm, atau nilai apa pun yang menurut Anda sesuai untuk mewakili difraksi dalam 3 saluran warna. Anda kemudian dapat melakukan rata-rata pada beberapa panjang gelombang yang berbeda dengan membuat gambar untuk lambda yang berbeda dan kemudian memilih "proses", lalu "kalkulator gambar", dan di sana Anda pilih "tambahkan". Anda kemudian dapat menambahkan gambar lain ke hasil ini dan ketika Anda selesai menambahkan, Anda dapat membagi untuk mendapatkan rata-rata dengan memilih "proses", kemudian "matematika" dan kemudian "bagi".