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
Menurut catatan, ini sama dengan menukar kuadran matriks dengan membalik sumbu dan .y
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
Jawaban:
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.yx y
Berikut adalah gambar tes: . Transformasi Fourier terlihat seperti:
Jika Anda mengambil Transformasi Fourier dari gambar bolak ( ), itu menghasilkan satu titik tepat di tengah Fourier transform: . (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: , sementara convolving Fourier Transform gambar dengan kernel rotasi (dalam domain frekuensi) memberi Anda: .
Dan kita dapat memeriksa bahwa mengalikan testimage oleh kotak-kotak dalam domain image memberi , yang memiliki Fourier Transform dari: .
sumber
fftshift
fungsi-like? Bukankah lebih murah secara komputasi untuk mengatur ulang 4 kuadran secara langsung?fftshift
tidak 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.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).
sumber