Memusatkan frekuensi nol untuk Transformasi Fourier Diskrit


11

Saya sedang mengerjakan aplikasi pemrosesan gambar yang menggunakan transformasi fourier diskrit untuk mengimplementasikan pengaburan / penajaman. Aplikasi ini kurang lebih berfungsi, tetapi sesuatu tentang mekanika masih membingungkan bagi saya.

Secara khusus, ini adalah bagaimana proses pemusatan frekuensi nol sedang dilakukan.

Contoh yang saya lihat preproses gambar input (intensitas abu-abu) dengan mengalikannya dengan matriks ukuran yang sama dengan gambar input, yang nilainya , di mana adalah baris, adalah kolom, jadi pola bergantian dan(1)x+yxy11

Menurut catatan, ini sama dengan menukar kuadran matriks dengan membalik sumbu dan .yxy

Saya mengerti mengapa ini dilakukan, dan saya ingin menekankan Saya mengerti saya memiliki kode saya / Fourier berfungsi, saya hanya tidak mengerti mengapa mengalikan matriks input dengan 1 / -1 akhirnya memusatkan komponen frekuensi nol sekitar 0.

Terima kasih


Anda juga dapat menemukan beberapa referensi di Bab 4, 4.6-Implementasi dari Pemrosesan Gambar Digital oleh Gonzalez (Saya memiliki edisi kedua). Semoga ini bisa membantu.
hakunami

Jawaban:


18

Oh! Trik yang keren! Ini bekerja karena teorema konvolusi (yaitu, perkalian dalam domain spasial / waktu setara dengan konvolusi dalam domain frekuensi.)

Ini tidak membalik melintasi sumbu dan , itu memutar gambar transformasi Fourier (pikirkan menggeser setengah jalan di sekitar silinder). Kuncinya di sini adalah bahwa berganti -1,1 dalam domain spasial adalah sinyal dengan frekuensi tertinggi. Jadi transformasi Fourier dari gambar itu adalah satu titik di domain frekuensi. Konvolusi oleh satu titik sama dengan menggeser (memutar) gambar dengan offset titik dari frekuensi nol.yxy

Berikut adalah gambar tes: gambar uji. Transformasi Fourier terlihat seperti:transformasi citra uji fourier

Jika Anda mengambil Transformasi Fourier dari gambar bolak ( gambar kotak-kotak), itu menghasilkan satu titik tepat di tengah Fourier transform: masukkan deskripsi gambar di sini. (Ingat kita belum melakukan rotasi kita, jadi pusat transformasi fourier adalah frekuensi tinggi dan frekuensi rendah masih di tikungan.) Tapi ini adalah "kernel rotasi!" Berputar dengan kernel rotasi ini menggerakkan semuanya ke bawah dan ke kanan (tetapi hal-hal yang jatuh dari kanan bawah berputar ke kiri atas.)

Convolving gambar asli dengan kernel rotasi (dalam domain image) memberi Anda: gambar berbelit-belit, sementara convolving Fourier Transform gambar dengan kernel rotasi (dalam domain frekuensi) memberi Anda: diputar transformasi fourier.

Dan kita dapat memeriksa bahwa mengalikan testimage oleh kotak-kotak dalam domain image memberi gambar multiplikasi, yang memiliki Fourier Transform dari: sekali lagi diputar transformasi fourier.


Saya bingung. Ini menggunakan konvolusi untuk mengimplementasikan fftshiftfungsi-like? Bukankah lebih murah secara komputasi untuk mengatur ulang 4 kuadran secara langsung?
endolith

2
Tidak ada belokan langsung di sini. Ini menggunakan perkalian piksel-bijaksana dalam domain gambar untuk mendapatkan yang setara dengan konvolusi dalam domain fourier. Ya, fftshifttidak terlalu mahal, tetapi trik ini mungkin memiliki perilaku cache yang lebih baik. Multiplikasi pixelwise sebenarnya hanya membalik tanda dari setiap pixel lainnya. Begitu mudah untuk di-vektor-kan, penulisan read-memodifikasi-tulis adalah hit cache yang dijamin, dan mudah bagi prosesor untuk membuat prefetch membaca.
Pengembaraan Logika

Oh benar, itu tanda flip, bukan perkalian nyata.
Endolith

Mengapa transformasi gambar uji Fourier (gambar kedua) terlihat seperti itu? Saya benar-benar melihat dua gambar, satu hitam di atas yang lain.
hakunami

10

Jawaban dari Wandering Logic benar dan terperinci. Hanya berpikir Anda ingin melihat beberapa matematika, bukan gambar:

Jika Anda melihat case 1D, Anda mengalikan input dengan mana frekuensi adalah . Yaitu, perkalian menggeser spektrum sinyal dengan setengah frekuensi sampling. ω 2 π ( k / 2 )(1)k=ejωω2π(k/2)

Efeknya adalah bahwa frekuensi nol - yang berada di indeks 0 sebelumnya - sekarang berada di setengah lebar gambar (atau tinggi, tergantung pada apakah Anda mengalikan kolom atau baris).

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.