Menggunakan Filter Terbalik untuk Mengoreksi Gambar yang Konvensional secara Spasial (Dekonvolusi)


8

Sebagai bagian dari tugas pekerjaan rumah, kami menerapkan Inverse Filter. Turunkan gambar kemudian pulihkan dengan Filter Balik.

Saya menggabungkan gambar dalam domain spasial dengan filter kotak 5x5. I FFT filter, FFT gambar yang rusak, kemudian bagi gambar yang rusak dengan filter. Membalik FFT hasilnya menjadi gambar dan saya mendapatkan sampah.

Jika saya FFT gambar, FFT filter, kalikan keduanya, bagi hasil itu dengan filter FFT, jelas saya sangat dekat dengan gambar aslinya. ((X * Y) / Y ~ == X)

Saya punya firasat matematika tidak sesederhana "spasial == perkalian FFT".

Apa cara yang benar untuk menggunakan Filter Terbalik? Saya memiliki kernel yang tepat digunakan menurunkan gambar. Saya tidak menambahkan suara apa pun.

Buku teks Bovik, Panduan Penting untuk Pemrosesan Gambar hampir sepenuhnya menolak Filter Inverse. Gonzalez & Woods sedikit lebih penuh harapan tetapi segera melompat ke Filter Wiener.

Saya punya pertanyaan serupa di stackoverflow.com /programming/7930803/inverse-filter-of-spatially-convolved-versus-frequency-convolved-image

(Pertanyaan ini juga harus ditandai [pekerjaan rumah] tetapi tag belum ada dan saya belum punya perwakilan untuk membuatnya.)

EDIT. Untuk beberapa saran hebat di bawah ini. @ dipan-mehta Sebelum saya FFT, saya mengisi kernel konvolusi dengan ukuran yang sama seperti gambar. Saya meletakkan kernel di kiri atas. Saya ifft (ifftshift ()) kemudian menyimpan ke gambar dan saya mendapatkan hasil yang baik. Saya telah melakukan ifft (ifftshift ()) pada kernel dan gambar. Hasil (ish) bagus. (Gambar ada di /programming/7930803/inverse-filter-of-spatially-convolved-versus-frequency-convolved-image pertanyaan.)

@ jason-r mungkin benar. Saya tidak mengerti matematika dari konvolusi + transformasi yang mendasarinya. "Dekonvolusi" adalah kata baru bagi saya. Masih banyak yang harus dipelajari. Terima kasih untuk bantuannya!

Solusi saya untuk tugas pekerjaan rumah adalah melakukan segalanya dalam domain frekuensi. Saya berbicara dengan profesor. Saya membuat tugas lebih sulit daripada yang diperlukan. Dia ingin kita menambahkan suara lalu coba Inverse Filter, Wiener Filter, dan Conastained Least Squares Filter. Inti dari latihan ini adalah untuk melihat bagaimana filter menangani kebisingan.


1
Apakah Anda memasang filter dengan angka nol agar ukurannya sama dengan gambar sebelum Anda mengambil FFT? Apakah Anda melakukan divisi kompleks dengan benar?
Dima

Yup, lengkapi filter dengan nol, kernel di kiri atas. Semua kode Python / numpy saya ada di tautan stackoverflow.com yang disebutkan di atas. Divisi yang kompleks mungkin adalah masalah saya.
David Poole

Jawaban:


8

Ada beberapa subquestions yang akan saya bahas secara terpisah:

  • Konvolusi dalam domain spasial (atau sesuai dalam domain waktu untuk sinyal sampel waktu) setara dengan perkalian dalam domain frekuensi. Dalam sistem sampel, ada beberapa seluk-beluk untuk kasus batas (yaitu ketika menggunakan DFT, perkalian dalam domain frekuensi benar-benar memberi Anda konvolusi melingkar, bukan konvolusi linier), tetapi secara umum, itu benar-benar sederhana.

  • Penyaringan terbalik murni hampir tidak pernah merupakan solusi yang tepat dalam praktiknya. Dalam sebagian besar kasus, Anda tidak memiliki akses ke filter tepat yang telah diterapkan pada data Anda, jadi Anda tidak bisa begitu saja membalikkannya. Bahkan jika Anda tahu filternya, maka itu masih bermasalah. Pertimbangkan fakta bahwa filter mungkin memiliki nol pada frekuensi spasial tertentu; jika ya, maka setelah menerapkan filter ke gambar Anda, semua informasi pada frekuensi tersebut hilang. Jika Anda secara naif membalikkan filter itu, itu akan mendapatkan keuntungan tak terbatas (atau setidaknya sangat tinggi) pada nol tersebut. Jika Anda kemudian menerapkan invers naif ke gambar yang memiliki konten aditif apa pun pada frekuensi tersebut (misalnya noise, yang mungkin merupakan penyebabnya), maka komponen yang tidak diawasi akan sangat diperkuat. Ini umumnya tidak diinginkan.

    Masalah penyaringan terbalik ini sangat mirip dengan pemerataan dalam sistem komunikasi, di mana fenomena ini disebut sebagai peningkatan kebisingan . Dalam konteks itu, pendekatan invers-filter disebut sebagai zero-forcing equalizer , yang jarang benar-benar digunakan.

  • Area yang Anda jelajahi lebih dikenal sebagai dekonvolusi . Sebagai aturan umum, dekonvolusi adalah operasi yang rumit. Bahkan jika Anda tahu filter yang tepat yang diterapkan dan ingin membatalkannya, itu tidak selalu mudah. Ketika Anda dicatat, pendekatan saringan terbalik biasanya menepis demi sebuah Wiener penyaring atau beberapa struktur lain yang bertujuan untuk tidak persis invert sistem, melainkan untuk memperkirakan apa yang input ke sistem itu dan meminimalkan beberapa kriteria error (meminimalkan berarti Kesalahan yang dilakukan adalah tujuan bersama). Seperti yang Anda harapkan, menerapkan filter Wiener untuk masalah ini disebut sebagai dekonvolusi Wiener .


"Dekonvolusi" adalah kata baru bagi saya. Saya masih harus banyak belajar. Terima kasih!
David Poole

@JasonR tidakkah kita harus mengetahui urutan 'trainer' pada gambar untuk dekonvolusi Wiener sehingga kriteria MMSE diminimalkan sehubungan dengan sesuatu yang diketahui benar?
Spacey

1
Secara umum, Anda perlu mengetahui kerapatan spektral daya sinyal dan fungsi transfer yang telah diterapkan pada sinyal untuk merancang filter Wiener. Namun, jika Anda tidak mengetahui semua informasi itu, Anda dapat membuat tebakan yang menghasilkan struktur fungsional yang lebih kuat daripada filter terbalik. Lihat bagian ini di halaman Wikipedia untuk diskusi.
Jason R

3

Saya harap Anda tidak membuat kesalahan dalam hal perhitungan dilakukan untuk -

Saya menggabungkan gambar dalam domain spasial dengan filter kotak 5x5. I FFT filter, FFT gambar yang rusak, kemudian bagi gambar yang rusak dengan filter. Membalik FFT hasilnya menjadi gambar dan saya mendapatkan sampah.

Misalkan gambar Anda berukuran 256x256, dan Filter 5x5 - untuk menerapkan Penyaringan dengan mengalikan FFT, Anda harus terlebih dahulu mengubah filter menjadi ukuran yang setara terlebih dahulu. Untuk ini, Anda harus menjaga filter kotak 5x5 di "sudut TOP" (bukan tengah gambar) dan pad itu istirahat dengan nol untuk mengisi 256x256 - Anda harus mendapatkan FFT 256x256 untuk filter.

Untuk membantu mendiagnosis, dalam pemrograman langkah # 1 - pertama ambil saja 256x256 FFT filter saja dan periksa apakah IFFT - rutin dapat memberikan Anda kembali filter. Tes cara yang sama jika FFT -> IFFT gambar itu sendiri bekerja mundur dengan benar.

Langkah # 2 - jika Anda hanya menerapkan filter (dan tidak ada filter terbalik) dalam domain FFT dengan mengalikan - periksa gambar yang dihasilkan setelah IFFT baik-baik saja. Seharusnya gambar pada dasarnya kabur.

Jika semua pemrograman Anda benar - harap pastikan bahwa ketika Anda melakukan 1 / x untuk FFT bersama-sama, tidak ada pembagian dengan kesalahan nol, dan sebaliknya ketika terlalu banyak memuncak hasil perkalian menghasilkan distorsi berat.

Secara umum - untuk setiap filter stabil , filter terbalik menurut definisi tidak stabil - ini bisa menjadi alasan utama. Namun, saya selalu ingin memeriksa implementasi silang sebelum menjelajahi batas teoritis.

Jika dilakukan dengan baik, saya telah melihat perkalian dalam FFT adalah konvolusi dalam ruang sampel baik untuk gambar maupun sinyal audio.

Dipan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.