Pendekatan
Ada banyak metode untuk Dekonvolusi (Yaitu operator degradasi adalah linear dan Time / Space Invariant) di luar sana.
Semua dari mereka mencoba untuk berurusan dengan fakta bahwa masalahnya adalah Poised Poised dalam banyak kasus.
Metode yang lebih baik adalah metode yang menambahkan beberapa regularisasi pada model data yang akan dipulihkan.
Ini bisa berupa model statistik (Priors) atau pengetahuan apa pun.
Untuk gambar, model yang bagus adalah potongan yang bijak, halus atau jarangnya gradien.
Tetapi demi jawabannya, pendekatan parametrik sederhana akan dilakukan - -Minimalkan Least Squares Error antara data yang dipulihkan dalam model dengan pengukuran.
Model
Model kuadrat terkecil sederhana.
Fungsi objektif sebagai fungsi data diberikan oleh:
f( x ) = 12∥ h ∗ x - y∥22
Masalah optimasi diberikan oleh:
argminxf( x ) = argminx12∥ h ∗ x - y∥22
xhy
x ∈ Rnh ∈ Rky∈ Rmm = n - k + 1
Ini adalah operasi linear dalam ruang terbatas sehingga dapat ditulis menggunakan Formulir Matriks:
argminxf( x ) = argminx12∥ Hx - y∥22
H∈ Rm × n
Larutan
Solusi Least Squares diberikan oleh:
x^= ( HTH)- 1HTy
HTHcond( H) = cond( HTH)----------√
Analisis Nomor Kondisi
Apa yang ada di balik nomor kondisi ini?
Orang bisa menjawabnya menggunakan Aljabar Linier.
Namun, menurut saya, pendekatan yang lebih intuitif akan memikirkannya dalam Domain Frekuensi.
Pada dasarnya operator degradasi mengurangi energi, pada umumnya, frekuensi tinggi.
Sekarang, karena pada frekuensi ini pada dasarnya adalah perkalian elemen yang bijak, orang akan mengatakan cara mudah untuk membalikkannya adalah pembagian elemen bijak oleh filter terbalik.
Ya, itulah yang dilakukan di atas.
Masalah muncul dengan kasus filter melemahkan energi praktis menjadi nol. Maka kita memiliki masalah nyata ...
Ini pada dasarnya adalah apa yang dikatakan Nomor Kondisi, betapa sulitnya beberapa frekuensi dilemahkan relatif terhadap yang lain.
Di atas orang dapat melihat Nomor Kondisi (Menggunakan unit [dB]) sebagai fungsi dari parameter STD Filter Gaussian.
Seperti yang diharapkan, semakin tinggi STD, semakin buruk angka kondisinya karena STD yang lebih tinggi berarti LPF yang lebih kuat (Nilai yang turun pada akhirnya adalah masalah numerik).
Solusi Numerik
Ensemble Gaussian Blur Kernel telah dibuat.
n = 300k = 31m = 270
Dalam MATLAB, Sistem Linier diselesaikan dengan pinv()
menggunakan Pseudo Inverse dan \
operator berbasis SVD .
Seperti yang dapat kita lihat, menggunakan SVD solusinya jauh kurang sensitif seperti yang diharapkan.
Mengapa ada kesalahan?
Mencari solusi (Untuk STD tertinggi):
Karena orang dapat melihat sinyal dipulihkan dengan sangat baik kecuali untuk awal dan akhir.
Hal ini disebabkan oleh penggunaan Konvolusi Valid yang memberi tahu kita sedikit tentang sampel tersebut.
Kebisingan
Jika kami menambahkan noise, semuanya akan terlihat berbeda!
Alasan hasil yang baik sebelumnya adalah karena fakta bahwa MATLAB dapat menangani DR dari data dan menyelesaikan persamaan meskipun mereka memiliki nomor kondisi yang besar.
Tetapi angka kondisi besar berarti filter terbalik menguatkan kuat (Untuk membalikkan redaman kuat) beberapa frekuensi.
Ketika itu mengandung noise itu berarti noise akan diperkuat dan restorasi akan menjadi buruk.
Seperti yang bisa dilihat di atas, sekarang rekonstruksi tidak akan berhasil.
Ringkasan
Jika seseorang mengetahui Operator Degradasi dengan tepat dan SNR sangat bagus, metode dekonvolusi sederhana akan berfungsi.
Masalah utama dari dekonvolusi adalah seberapa keras Operator Degradasi melemahkan frekuensi.
Semakin ia mengurangi SNR yang dibutuhkan untuk memulihkan (Ini pada dasarnya adalah ide di balik Wiener Filter ).
Frekuensi yang ditetapkan ke nol tidak dapat dipulihkan!
Dalam praktiknya, agar hasil yang stabil harus ditambahkan beberapa prior.
Kode ini tersedia di Pemrosesan Sinyal StackExchange saya, Q2969 GitHub Repository .