Fourier Transform di OpenCV Python

Di bagian tutorial kali ini akan membahas Fourier Transform, untuk lebih jelasnya lihat teori dibawah ini.

Fourier Transform digunakan untuk menganalisis karakteristik frekuensi berbagai filter. Untuk gambar, 2D Discrete Fourier Transform (DFT) digunakan untuk mencari domain frekuensi. Sebuah algoritma cepat yang disebut Fast Fourier Transform (FFT) digunakan untuk perhitungan Discrete Fourier Transform atau DFT.

Untuk lebih jelasnya bisa baca link berikut ini :

  1. An Intuitive Explanation of Fourier Theory by Steven Lehar
  2. Fourier Transform at HIPR
  3. What does frequency domain denote in case of images?

Untuk sinyal sinusoidal, x (t) = A \ sin (2 \ pi ft), untuk f adalah frekuensi sinyal, dan jika domain frekuensi diambil, kita bisa melihat lonjakan f . Jika sinyal diambil sampelnya untuk membentuk sinyal diskrit, kita mendapatkan domain frekuensi yang sama, tetapi periodik dalam rentang [- \ pi, \ pi] atau [0,2 \ pi] (atau [0, N] untuk N-point DFT). Kita dapat mempertimbangkan gambar sebagai sinyal yang diambil sampelnya dalam dua arah. Jadi mengambil transformasi fourier di kedua arah X dan Y memberi Kita representasi frekuensi gambar.




Lebih intuitif, untuk sinyal sinusoidal, jika amplitudonya berubah sangat cepat dalam waktu singkat, Kita dapat mengatakan itu adalah sinyal frekuensi tinggi. Jika itu bervariasi secara perlahan, itu adalah sinyal frekuensi rendah. Kita dapat memperluas ide yang sama ke gambar. Di mana amplitudo bervariasi secara drastis dalam gambar? Di ujung-ujungnya, atau suara-suara. Jadi bisa kita katakan, ujung dan suara adalah konten frekuensi tinggi dalam suatu gambar. Jika tidak ada banyak perubahan dalam amplitudo, itu adalah komponen frekuensi rendah.

Sekarang kita akan melihat bagaimana menemukan Fourier Transform.

Fourier Transform di Numpy

Pertama kita akan melihat bagaimana menemukan Fourier Transform menggunakan Numpy. Numpy memiliki paket FFT untuk melakukan ini. np.fft.fft2 () menyediakan kita mengubah frekuensi yang akan menjadi array yang kompleks. Argumen pertama adalah gambar input, yang merupakan skala abu-abu. Argumen kedua adalah opsional yang menentukan ukuran array output. Jika lebih besar dari ukuran gambar input, gambar input diisi dengan nol sebelum perhitungan FFT. Jika kurang dari gambar input, gambar input akan dipangkas. Jika tidak ada argumen yang dilewatkan, ukuran larik output akan sama dengan input.




Sekarang setelah Kita mendapatkan hasilnya, komponen frekuensi nol (komponen DC) akan berada di sudut kiri atas. Jika Kita ingin membawanya ke pusat, Kita perlu menggeser hasilnya dengan \ frac {N} {2} di kedua arah. Ini hanya dilakukan oleh fungsi, np.fft.fftshift () . (Lebih mudah untuk menganalisa). Setelah Kita menemukan frekuensi berubah, Kita dapat menemukan spektrum besarnya.

Hasilnya terlihat seperti dibawah ini :

Spektrum Magnitudo

Bisa dilihat, Kita dapat melihat lebih banyak daerah lebih putih di pusat yang menunjukkan konten frekuensi rendah lebih banyak.




Jadi setelah Kita menemukan transformasi frekuensi, Sekarang Kita dapat melakukan beberapa operasi dalam domain frekuensi, seperti penyaringan lolos tinggi dan merekonstruksi gambar, yaitu menemukan DFT terbalik. Untuk itu Kita cukup menghilangkan frekuensi rendah dengan masking dengan jendela segi empat berukuran 60×60. Kemudian terapkan pergeseran terbalik menggunakan np.fft.ifftshift () sehingga komponen DC lagi datang di sudut kiri atas. Kemudian temukan invers FFT menggunakan fungsi np.ifft2 () . Hasilnya, sekali lagi, akan menjadi bilangan kompleks. Kita dapat mengambil nilai absolutnya.

Hasilnya :

High Pass Filtering

Fourier Transform di OpenCV

OpenCV menyediakan fungsi cv2.dft () dan cv2.idft () untuk ini. Ini mengembalikan hasil yang sama seperti sebelumnya, tetapi dengan dua saluran. Saluran pertama akan memiliki bagian nyata dari hasil dan saluran kedua akan memiliki bagian imajiner dari hasil. Gambar input harus dikonversi ke np.float32 terlebih dahulu. Kita akan melihat bagaimana melakukannya.

Jadi, sekarang kita harus melakukan invers DFT. Di sesi sebelumnya, kita membuat HPF, kali ini kita akan melihat cara menghapus konten frekuensi tinggi dalam gambar, yaitu kita menerapkan LPF ke gambar. Ini benar-benar mengaburkan gambar. Untuk ini, kita membuat topeng pertama dengan nilai tinggi (1) pada frekuensi rendah, yaitu kita meneruskan konten LF, dan 0 di wilayah HF .

Hasilnya :

Spektrum Magnitudo

Satu pemikiran pada “Fourier Transform di OpenCV Python”

Tinggalkan komentar

This site uses Akismet to reduce spam. Learn how your comment data is processed.