TEKNIK PENGOLAHAN CITRA Kuliah 8 Transformasi Fourier Indah Susilawati, S.T., M.Eng. Program Studi Teknik Informatika/Sistem Informasi Fakultas Teknologi Informasi Universitas Mercu Buana Yogyakarta 2015
KULIAH 8 TEKNIK PENGOLAHAN CITRA TRANSFORMASI FOURIER Transformasi Fourier merupakan salah satu dasar penting dalam pengolahan citra, dapat memproses dengan efisien dan lebih cepat. Dibandingkan dengan linear spatial filtering atau filtering spasial linier, maka transformasi Fourier lebih cepat (terutama jika ukuran filternya besar). Transformasi Fourier memungkinkan pengolahan dengan cara mengisolasi satu frekuensi tertentu pada citra, sehingga dapat digunakan untuk menerapkan LPF dan HPF dengan ketelitian yang cukup tinggi. Latar Belakang Suatu fungsi periodik dapat dinyatakan sebagai jumlahan fungsi sinus dan cosinus yang bervariasi amplitude dan frekuensinya. Gambar berikut merupakan contoh suatu fungsi dan dekomposisinya menjadi fungsi-fungsi sinus.
Beberapa fungsi mungkin hanya terdekomposisi menjadi sejumlah terhingga fungsi sinus dan cosinus, tetapi juga terdapat fungsi yang mempunyai tak terhingga fungsi dekomposisi, misalnya fungsi gelombang kotak (square wave) berikut. 1 1 1 1 f ( x) sin x sin 3x sin 5x sin 7x sin 9x... 3 5 7 9 Pada gambar berikut, diambil empat fungsi dekomposisi yang pertama dan kemudian dijumlahkan. Semakin banyak fungsi dekomposisi yang dijumlahkan, maka hasilnya akan semakin mirip dengan fungsi aslinya (fungsi kotak). Transformasi Fourier Diskret Satu Dimensi Dalam fungsi diskret (sebagaimana pada pengolahan citra), maka hanya akan ada sejumlah terhingga nilai sehingga juga hanya dibutuhkan sejumlah terhingga fungsi saja. Misalkan terdapat suatu deret sbb. 1 1 1 1-1 -1-1 -1 Maka dapat dinyatakan dengan pendekatan diskret seperti gelombang kotak pada gambar berikut. Pada gambar yang sama juga dapat dilihat bahwa gelombang kotak ini dapat dinyatakan sebagai jumlahan dua fungsi sinus saja (gambar pertama merupakan penjumlahan gambar kedua dan ketiga). Oleh karena pembahasan pengolahan citra
menggunakan citra digital maka hanya akan dibahas transformasi Fourier diskret saja (DFT : Discrete Fourier Transform). Definisi DFT Satu Dimensi Misalkan terdapat deret sepanjang N yang dinyatakan sebagai f x = [f 0, f 1, f 2,..., f N-1 ] maka DFT dari deret tersebut didefinisikan sebagai F u = [F 0, F 1, F 2,..., F N-1 ] dengan 1 1 N xu u exp 2 i f x N u0 N F
Dan untuk Inverse Discrete Fourier Transform (IDFT) nya adalah 1 1 N xu x exp 2 i F u N u0 N f Fast Fourier Transform (FFT) Alternatif lain untuk menghitung DFT (selain menggunakan rumusan di atas) adalah menggunakan algoritma cepat yang dikenal dengan Fast Fourier Transform (FFT). Dengan FFT maka waktu yang dibutuhkan untuk menghitung DFT menjadi lebih cepat. Metode FFT bekerja secara rekursif dengan membagi vektor asli menjadi dua bagian, menghitung FFT masing-masing bagian, dan kemudian menggabungkannya. Hal ini mengindikasikan bahwa FFT akan menjadi sangat efisien jika panjang vektor merupakan bilangan pangkat 2. Tabel berikut memuat perbandingan jumlah operasi perkalian dalam perhitungan DFT menggunakan rumus DFT secara langsung dan menggunakan algoritma FFT. DFT Dua Dimensi Dalam dua dimensi, DFT mempunyai input berupa matriks dan akan menghasilkan output berupa matriks dengan ukuran yang sama. Jika input adalah f(x,y) maka outputnya dapat dinyatakan dengan F(u,v). Matriks F(u,v) disebut transformasi Fourier dari f (x,y) dan ditulis sbb. F = F (f)
Jika diketahui fungsi F(u,v), maka matriks f(x,y) dapat dicari dengan Inverse DFT, yaitu f = F 1 (F) Dalam satu dimensi, suatu fungsi dapat dinyatakan sebagai jumlahan fungsi sinus dan cosinus. Oleh karena citra adalah fungsi dua dimensi f(x,y), maka adalah beralasan jika fungsi tsb dinyatakan sebagai z = a sin (bx + cy) Definisi DFT untuk 2 dimensi mirip dengan pada satu dimensi. Dengan masukan f(x,y) berukuran M x N (sehingga x = 0, 1,... M-1 dan y = 0, 1, 2,..., N-1) maka M 1 N 1 F( u, v) f ( x, y)exp 2 i x0 y0 M 1 N 1 1 f ( x, y) F( u, v)exp 2 i MN u0 v0 xu M xu M yv N yv N Sifat-Sifat Transformasi Fourier Dua Dimensi Similarity (Kemiripan). Dari rumusan DFT dan IDFT dua dimensi di atas, maka sekilas terlihat bahwa keduanya sangat mirip kecuali faktor skala 1/MN pada rumus IDFT dan tanda negatif pada eksponen dalam rumus DFT. Hal ini menunjukkan bahwa algoritma yang sama dapat diterapkan untuk mencari DFT dan IDFT, hanya diperlukan sedikit penyesuaian saja. DFT Sebagai Filter Spasial. Perhatikan bahwa nilai exp 2 i xu M yv N merupakan nilai yang tidak bergantung pada nilai f atau F. Ini berarti bahwa nilai tersebut dapat dihitung terlebih dahulu dan kemudian meletakkannya di depan tanda sigma. Ini juga berarti bahwa setiap nilai F(u,v) dapat diperoleh dengan mengalikan setiap nilai
f(x,y) dengan suatu nilai tertentu, dan menjumlahkan semua hasilnya. Hal ini sama seperti yang dilakukan pada proses linear spatial filtering, yaitu mengalikan semua elemen di bawah mask dan kemudian menjumlahkan hasilnya. Dengan demikian, DFT dapat dipandang sebagai filter spasial linear dengan ukuran mask yang sama besar dengan citra yang diolah. Separabilitas. Perhatikan bahwa elemen filter transformasi Fourier dapat dinyatakan sebagai hasil kali sebagai berikut. Hasil kali yang pertama xu yv xu yv exp 2 i exp 2i exp 2i M N M N xu exp 2i M hanya bergantung pada x dan u dan independen terhadap y dan v. Sebaliknya hasil kali yang kedua yv exp 2i N hanya bergantung pada y dan v dan independen terhadap x dan u. Hal ini berarti rumusan di atas dapat dipecah menjadi rumusan yang lebih sederhana yang mengolah masingmasing baris dan kolom pada matriks. DFT dan IDFT untuk matriks baris adalah sebagai berikut. M 1 F( u) f ( x) exp 2 i x0 M 1 1 f ( x) F( u)exp 2 i M u0 xu M xu M Jika variabel x dan u diganti dengan y dan v maka didapatkan rumusan DFT dan IDFT untuk matriks kolom. DFT dua dimensi dapat diperoleh dengan menggunakan sifat separabilitas ini; untuk menghitung DFT sebuah matriks, dapat dihitung DFT seluruh baris dan kemudian
menghitung DFT semua kolom dari matriks hasilnya. Dapat juga menghitung DFT seluruh kolom dan kemudian menghitung DFT semua baris dari matriks hasilnya. Perhatikan gambar berikut. Linearitas. DFT mempunyai sifat linear, yaitu DFT dari jumlahan dua atau lebih fungsi adalah jumlahan dari DFT masing-masing fungsi tersebut; DFT dari perkalian skalar suatu fungsi adalah DFT dari fungsi tersebut dikalikan dengan skalar yang sama. Atau dinyatakan, F (f+g)= F (f) + F (g) F (k f) = kf (f) Dengan f dan g adalah matriks dan k adalah skalar. Sifat ini sangat penting saat menangani degradasi citra, misalnya citra berderau yang dimodelkan sebagai d = f + n dengan f adalah citra tak berderau, n adalah derau dan d adalah citra berderau. Maka dengan transformasi Fourier citra berderau dapat dinyatakan F (d)= F (f) + F (n) Dan sebagaimana yang akan dibahas nanti, derau yang tampak pada DFT membuatnya lebih mudah untuk dihilangkan.
Koefisien DC. Nilai F(0,0) pada DFT disebut koefisien DC. Jika u = v = 0, maka persamaan atau rumusan DFT di atas menghasilkan F (0,0) M 1 x0 N1 y0 f ( x, y) exp(0) M 1 x0 N1 y0 f ( x, y) Nilai di atas sama dengan jumlahan semua elemen pada matriks asli (yang diolah). Pergeseran (Shifting). Untuk keperluan menampilkan (display), koefisien DC diletakkan di pusat matriks. Hal ini akan terjadi jika semua elemen matriks f(x,y) dikalikan dengan (-1) x+y sebelum dilakukan transformasi. Gambar berikut memperlihatkan pergeseran matriks menggunakan metode ini. Koefisien DC ditunjukkan dengan kotak kecil berwarna hitam di sudut kiri atas submatriks A. Simetri Konjugat. Analisis definisi transformasi Fourier mengarahkan ke sifat simetri; jika diambil substitusi u = -u dan v = -v maka F(u,v) = F*(-u + pm, -v + qn) untuk sebarang bilangan bulat p dan q. Hal ini berarti bahwa setengah hasil transformasi merupakan cermin konjugat dari setengah yang lain. Dapat dipandang bahwa setengah bagian atas adalah cermin konjugat dari setengah bagian bawah atau setengah bagian kiri adalah cermin konjugat dari setengah bagian kanan. Simetri berarti bahwa informasi berada di setengah hasil transformasi, setengahnya lagi adalah redundant (mubazir). Gambar berikut memperlihatkan simetri dalam DFT yang telah digeser; kotak kecil berwarna hitam menunjukkan posisi koefisien DC.
a a* b* B* a* A* c c* b B d A Menampilkan Hasil Transformasi Setelah melakukan transformasi Fourier citra f(x,y) menjadi F(u,v) maka perlu dilihat hasilnya. Elemen F(u,v) merupakan bilangan kompleks sehingga tidak dapat ditampilkan secara langsung, namum dapat dilihat magnitude-nya yaitu F(u,v). Berikut cara atau pendekatan yang dapat dilakukan untuk menampilkan hasil tranformasi Fourier. 1. Temukan nilai terbesar dari F(u,v) yaitu m. Nilai ini biasanya adalah koefisien DC yang dihasilkan dari transformasi. Gunakan imshow.m untuk melihat F(u,v) / m. 2. Gunakan mat2gray.m untuk melihat F(u,v) secara langsung. Permasalahan lain adalah bahwa koefisien DC biasanya sangat besar dibandingkan dengan nilai-nilai yang lain. Hal ini mempunyai pengaruh pada tampilan hasil transformasi yaitu berupa satu titik putih dikelilingi warna hitam. Satu cara untuk merentangkan nilainya adalah dengan mengambil logaritma dari F(u,v) dan menampilkan Log ( 1 + F(u,v) ) Tampilan magnitude transformasi Fourier disebut spektrum dari transformasi tersebut. Transformasi Fourier Dalam MATLAB Beberapa fungsi Matlab yang sesuai adalah fft.m untuk memperoleh DFT dari sebuah vektor ifft.m untuk memperoleh inverse DFT dari sebuah vektor
fft2.m untuk memperoleh DFT dari sebuah matriks ifft2.m untuk memperoleh inverse DFT dari sebuah matriks fftshift.m menggeser hasil transformasi sehingga koefisien DC berada di tengah Contoh 1 Membuat matriks 8 x 8 dengan semua elemennya sama dengan 1, kemudian mencari DFT-nya dengan metode FFT. Hasilnya adalah matriks dengan koefisien DC dan nol pada semua elemen yang lain (karena matriks masukan elemennya sama, tidak ada perubahan) >> a = ones (8); >> fft2 (a) Hasilnya adalah ans = 64 0 0 0 0 0 0 0 Contoh 2 Membentuk matriks yang mengandung perubahan nilai dan melihat DFT-nya. >> a = [100 200; 100 200]; >> b = repmat (a, 4, 4) b = 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200 100 200
>> bfft = fft2 (b) bfft = 9600 0 0 0-3200 0 0 0 Matriks b dapat dinyatakan dengan jumlahan dua matriks yaitu sebuah matriks konstan yang semua elemennya 150 dan sebuah matriks yang berubah-ubah nilainya sebesar -50 dan 50 dari kiri ke kanan. Matriks konstan akan menghasilkan koefisien DC yang bernilai 64 x 150 = 9600. Contoh 3 Membuat matriks dengan satu tebing undak (step) tunggal dan mencari DFT-nya. >> a = [zeros(8, 4) ones(8, 4)] a = >> afft = fft2 (a) 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 afft = Columns 1 through 5 32.0000-8.0000 +19.3137i 0-8.0000 + 3.3137i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Columns 6 through 8-8.0000-3.3137i 0-8.0000-19.3137i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Untuk menempatkan koefisien DC di tengah (dan karena hasil transformasi memuat nilai-nilai kompleks maka dicari magnitude-nya sekaligus dibulatkan) dilakukan sebagai berikut. >> afft = fftshift (afft) >> round (abs(afft)) ans = 0 9 0 21 32 21 0 9 Koefisien DC merupakan jumlahan semua nilai matriks a dan nilai-nilai yang lain merupakan koefisien-koefisien fungsi sinus yang diperlukan untuk membentuk tebing pada matriks. Transformasi Fourier Citra Misalkan sebuah citra 4 x 4 piksel sebagai berikut. 1 9 X 5 6 3 8 4 6 6 8 2 3 8 2 3 3
Maka hasil DFT 2 dimensinya menjadi 77 4 9 j XF 13 4 9 j 2 5 j 11 8 j 6 13 j 5 4 j 3 4 7 j 11 4 7 j 2 5 j 5 4 j 6 13 j 11 8 j Frekuensi terendah Frekuensi tertinggi Perhatikan analisis berikut; dari hasil DFT 2D diatas, dapat dihitung (diketahui) bagian real, imajiner, magnitude, dan phase-nya. XF real 77 4 13 4 2 11 6 5 3 4 11 4 2 5 6 11 XF imajiner 0 9 0 9 5 8 13 4 0 7 0 7 5 4 13 8 XF magnitude 77 9.85 13 9.85 5.39 13.60 14.32 6.40 3 8.06 11 8.06 5.39 6.4 14.32 13.60 XF phase 0 1.15 3.14 1.15 1.19 2.51 2.00 2.47 0 2.09 3.14 2.09 1.19 2.47 2.00 2.51 Jika magnitude XF dikenakan shifting, maka: XFS = 11 14.32 13 14.32 8.06 13.60 9.85 6.40 3 5.39 77 5.39 8.06 6.40 9.85 13.60 Setelah hasil DFT digeser, maka representasi frekuensi citra dapat digambarkan sebagai berikut.
Berikut akan dibuat beberapa citra sederhana dan melihat hasil transformasi Fourier-nya. Contoh 1 >> a = [zeros (256, 128) ones (256, 128)]; >> af = fftshift (fft2 (a) ); Untuk melihat spektrumnya dapat dipilih dari dua cara berikut: 1. af1 = log ( 1 + abs (af) ); imshow (af1/af1(129,129)) Proses ini didasarkan pada kenyataan bahwa setelah penggeseran maka koefisien DC berada pada posisi x = y = 129. Nilai direntangkan dengan fungsi log dan membagi nilainya dengan koefisien DC. 2. imshow (mat2gray ( log (1 + abs (af) ) ) ) Fungsi mat2gray.m secara otomatis melakukan scalling untuk menampilkan citra. Untuk kemudahan maka akan dibuat satu fungsi sederhana untuk melihat hasil transformasi. Berikut adalah contoh fungsinya. function fftshow (f, type) if nargin < 2, type = 'log'; end if (type == 'log') f1 = log (1 + abs(f)); fm = max (f1(:));
imshow (im2uint8(f1/fm)) elseif (type == 'abs') fa = abs(f); fm = max (fa(:)); imshow (fa/fm) else error ('Type must be log or abs'); end; Berikut adalah citra dari matriks a dan hasil transformasi Fourier-nya. Citra matriks a Transf. Fourier matriks a Citra matriks b Transf. Fourier matriks b Cobalah sendiri membuat matriks b yang menghasilkan citra dan tranf. Fourier seperti tampilan di atas.
Contoh 2 Membuat sebuah kotak dan melihat transformasi Fourier-nya. clear all; clc; a = zeros (256, 256); a(78:178, 78:178) = 1; imshow (a) af = fftshift(fft2(a)); figure, fftshow(af,'abs') Sebuah kotak dan hasil DFT-nya Contoh 3 Sebuah kotak yang diputar 45 dan melihat DFT-nya. clear all; clc; [x,y] = meshgrid(1:256, 1: 256) b = (x+y < 329) & (x+y > 182) & (x-y > -67) & (x-y < 73) imshow (b) bf = fftshift(fft2(b)); figure, fftshow(bf)
Sebuah kotak yang diputar 45 dan hasil DFT-nya Contoh 4 Membuat sebuah lingkaran dan melihat DFT-nya. clear all; clc; [x,y] = meshgrid(-128:127, -128: 127) z = sqrt(x.^2 + y.^2) c = (z<15) imshow (c) cf = fftshift(fft2(c)); figure, fftshow(cf,'log') Sebuah lingkaran putih dan hasil DFT-nya
Contoh 5 Citra einstein.jpg dan DFT-nya. Citra einstein.jpg dan hasil DFT-nya Citra einstein.jpg dengan derau periodik dan hasil DFT-nya TUGAS 1. Buatlah lingkaran berwarna hitam dengan latar belakang putih. Lingkaran ini akan berfungsi sebagai filter HPF. Buatlah lingkaran tersebut berjari-jari 35 piksel dan akan digunakan untuk melakukan filtering pada citra berukuran 100 x 100 piksel.
2. Buatlah bentuk cincin berwarna hitam dengan latar belakang putih. Bentuk cincin ini akan berfungsi sebagai filter yang menahan frekuensi tengah. Buatlah bentuk cincin tersebut bagian dalam berjari-jari 30 piksel dan bagian luar berjari-jari 60 piksel; serta akan digunakan untuk melakukan filtering pada citra berukuran 100 x 100 piksel. 3. Buatlah bentuk cincin berwarna putih dengan latar belakang hitam. Bentuk cincin ini akan berfungsi sebagai filter yang melewatkan frekuensi tengah. Buatlah bentuk cincin tersebut bagian dalam berjari-jari 30 piksel dan bagian luar berjari-jari 60 piksel; serta akan digunakan untuk melakukan filtering pada citra berukuran 100 x 100 piksel.