21.07.2013 Views

TEKNIK PENGOLAHAN CITRA Kuliah 7 – Transformasi Fourier

TEKNIK PENGOLAHAN CITRA Kuliah 7 – Transformasi Fourier

TEKNIK PENGOLAHAN CITRA Kuliah 7 – Transformasi Fourier

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>TEKNIK</strong> <strong>PENGOLAHAN</strong> <strong>CITRA</strong><br />

<strong>Kuliah</strong> 7 <strong>–</strong> <strong>Transformasi</strong> <strong>Fourier</strong><br />

Indah Susilawati, S.T., M.Eng.<br />

Program Studi Teknik Elektro<br />

Program Studi Teknik Informatika<br />

Fakultas Teknik dan Ilmu Komputer<br />

Universitas Mercu Buana Yogyakarta<br />

2009


KULIAH 7<br />

<strong>TEKNIK</strong> <strong>PENGOLAHAN</strong> <strong>CITRA</strong><br />

TRANSFORMASI FOURIER<br />

<strong>Transformasi</strong> <strong>Fourier</strong> merupakan salah satu dasar penting dalam pengolahan citra,<br />

dapat memproses dengan efisien dan lebih cepat. Dibandingkan dengan linear spatial<br />

filtering, maka transformasi <strong>Fourier</strong> lebih cepat (terutama jika ukuran filternya besar).<br />

<strong>Transformasi</strong> <strong>Fourier</strong> memungkinkan pengolahan dengan cara mengisolasi satu<br />

“frekuensi” tertentu pada citra, sehingga dapat digunakan untuk menerapkan LPF dan<br />

HPF dengan ketelitian yang cukup tinggi.<br />

Latar Belakang<br />

Suatu fungsi periodik dapat dinyatakan sebagai jumlahan fungsi sinus dan cosinus<br />

yang bervariasi amplitude dan frekuensinya. Gambar berikut merupakan contoh suatu<br />

fungsi dan dekomposisinya menjadi fungsi-fungsi sinus.


Beberapa fungsi mungkin hanya terdekomposisi menjadi sejumlah terhingga<br />

fungsi sinus dan cosinus, tetapi juga terdapat fungsi yang mempunyai tak terhingga<br />

fungsi dekomosisi, misalnya fungsi gelombang kotak (square wave) berikut.<br />

Pada gambar berikut, diambil empat fungsi dekomposisi yang pertama dan kemudian<br />

dijumlahkan. Semakin banyak fungsi dekomposisi yang dijumlahkan, maka hasilnya<br />

akan semakin mirip dengan fungsi aslinya (fungsi kotak).<br />

<strong>Transformasi</strong> <strong>Fourier</strong> Diskret Satu Dimensi<br />

Dalam fungsi diskret (sebagaimana pada pengolahan citra), maka hanya akan ada<br />

sejumlah terhingga nilai sehingga juga hanya dibutuhkan sejumlah terhingga fungsi saja.<br />

Misalkan terdapat suatu deret sbb.<br />

1 1 1 1 -1 -1 -1 -1<br />

Maka dapat dinyatakan dengan pendekatan diskret seperti gelombang kotak pada gambar<br />

berikut. Pada gambar yang sama juga dapat dilihat bahwa gelombang kotak ini dapat<br />

dinyatakan sebagai jumlahan dua fungsi sinus saja. Oleh karena pembahasan pengolahan<br />

citra menggunakan citra digital maka hanya akan dibahas transformasi <strong>Fourier</strong> diskret<br />

saja (DFT : Discrete <strong>Fourier</strong> Transform).


Definisi DFT Satu Dimensi<br />

Misalkan terdapat deret sepanjang N yang dinyatakan sbg fx = [f0, f1, f2, ..., fN-1]<br />

maka DFT dari deret tsb didefinisikan sbg<br />

dengan<br />

Fu = [F0, F1, F2, ..., FN-1]<br />

Dan untuk Inverse Discrete <strong>Fourier</strong> Transform (IDFT) <strong>–</strong> nya adalah<br />

∑ −1<br />

1 ⎡ ⎤<br />

= exp<br />

⎢<br />

2<br />

⎥<br />

= 0 ⎣ ⎦<br />

N xu<br />

f x<br />

π<br />

i F<br />

N u N<br />

u


Fast <strong>Fourier</strong> Transform (FFT)<br />

Alternatif lain untuk menghitung DFT (selain menggunakan rumusan di atas)<br />

adalah menggunakan algoritma cepat yang dikenal dengan Fast <strong>Fourier</strong> Transform (FFT).<br />

Dengan FFT maka waktu yang dibutuhkan untuk menghitung DFT menjadi lebih cepat.<br />

Metode FFT bekerja secara rekursif dengan membagi vektor asli menjadi dua<br />

bagian, menghitung FFT masing-masing bagian, dan kemudian menggabungkannya. Hal<br />

ini mengindikasikan bahwa FFT akan menjadi sangat efisien jika panjang vektor<br />

merupakan bilangan pangkat 2. Tabel berikut memuat perbandingan jumlah operasi<br />

perkalian dalam perhitungan DFT menggunakan rumus DFT secara langsung dan<br />

menggunakan algoritma FFT.<br />

DFT Dua Dimensi<br />

Dalam dua dimensi, DFT mempunyai input berupa matriks dan akan<br />

menghasilkan output berupa matriks dengan ukuran yang sama. Jika input adalah f(x,y)<br />

maka outputnya dapat dinyatakan dengan F(u,v). Matriks F(u,v) disebut transformasi<br />

<strong>Fourier</strong> dari f (x,y) dan ditulis sbb.<br />

Jika diketahui fungsi F(u,v), maka matriks f(x,y) dapat dicari dengan Inverse DFT, yaitu<br />

Dalam satu dimensi, suatu fungsi dapat dinyatakan sebagai jumlahan fungsi sinus<br />

dan cosinus. Oleh karena citra adalah fungsi dua dimensi f(x,y), maka adalah beralasan<br />

jika fungsi tsb dinyatakan sebagai


Definisi DFT untuk 2 dimensi mirip dengan pada satu dimensi. Dengan masukan<br />

f(x,y) berukuran M x N (sehingga x = 0, 1, ... M-1 dan y = 0, 1, 2, ..., N-1) maka<br />

Sifat-Sifat <strong>Transformasi</strong> <strong>Fourier</strong> Dua Dimensi<br />

Similarity (Kemiripan). Dari rumusan DFT dan IDFT dua dimensi di atas, maka<br />

sekilas terlihat bahwa keduanya sangat mirip kecuali faktor skala 1/MN pada rumus<br />

IDFT dan tanda negatif pada eksponen dalam rumus DFT. Hal ini menunjukkan bahwa<br />

algoritma yang sama dapat diterapkan untuk mencari DFT dan IDFT hanya dengan<br />

sedikit penyesuaian saja.<br />

DFT Sebagai Filter Spasial. Perhatikan bahwa nilai<br />

merupakan nilai yang tidak bergantung pada nilai f atau F. Ini berarti bahwa nilai tsb<br />

dapat dihitung terlebih dahulu dan kemudian meletakkannya di depan tanda sigma. Ini<br />

juga berarti bahwa setiap nilai F(u,v) dapat diperoleh dengan mengalikan setiap nilai<br />

f(x,y) dengan suatu nilai tertentu, dan menjumlahkan semua hasilnya. Hal ini sama<br />

seperti yang dilakukan pada proses linear spatial filtering, yaitu mengalikan semua<br />

elemen di bawah mask dan kemudian menjumlahkan hasilnya. Dengan demikian, DFT<br />

dapat dipandang sebagai filter spasial linear dengan ukuran sama besar dengan citra yang<br />

diolah.<br />

Separabilitas. Perhatikan bahwa elemen filter transformasi <strong>Fourier</strong> dapat<br />

dinyatakan sebagai hasil kali sbb.


Hasil kali yang pertama<br />

hanya bergantung pada x dan u dan independen terhadap y dan v. Sebaliknya hasil kali<br />

yang kedua<br />

hanya bergantung pada y dan v dan independen terhadap x dan u. Hal ini berarti rumusan<br />

di atas dapat dipecah menjadi rumusan yang lebih sederhana yang mengolah masing-<br />

masing baris dan kolom pada matriks. DFT dan IDFT untuk matriks baris adalah sbb.<br />

Jika variabel x dan u diganti dengan y dan v maka didapatkan rumusan DFT dan IDFT<br />

untuk matriks kolom.<br />

DFT dua dimensi dapat diperoleh dengan menggunakan sifat separabilitas ini;<br />

untuk menghitung DFT sebuah matriks, dapat dihitung DFT seluruh baris dan kemudian<br />

menghitung DFT semua kolom dari matriks hasilnya. Dapat juga menghitung DFT<br />

seluruh kolom dan kemudian menghitung DFT semua baris dari matriks hasilnya.<br />

Perhatikan gambar berikut.


Linearitas. DFT mempunyai sifat linear, yaitu DFT dari jumlahan dua atau lebih<br />

fungsi adalah jumlahan dari DFT masing-masing fungsi tsb; DFT dari perkalian skalar<br />

suatu fungsi adalah DFT dari fungsi tsb dikalikan dengan skalar yang sama. Atau<br />

dinyatakan,<br />

Dengan f dan g adalah matriks dan k adalah skalar. Sifat ini sangat penting saat<br />

menangani degradasi citra, misalnya citra berderau yang dimodelkan sbg<br />

d = f + n<br />

dengan f adalah citra tak berderau, n adalah derau dan d adalah citra berderau. Maka<br />

dengan transformasi <strong>Fourier</strong> citra berderau dapat dinyatakan<br />

Dan sebagaimana yang akan dibahas nanti, derau yang tampak pada DFT membuatnya<br />

lebih mudah untuk dihilangkan.<br />

Koefisien DC. Nilai F(0,0) pada DFT disebut koefisien DC. Jika u = v = 0, maka<br />

persamaan atau rumusan DFT di atas menghasilkan<br />

Nilai di atas sama dengan jumlahan semua elemen pada matriks asli (yang diolah).<br />

Pergeseran (Shifting). Untuk kemudahan dalam menampilkan (display), akan<br />

lebih mudah jika koefisien DC berada di pusat matriks. Hal ini akan terjadi jika semua<br />

elemen matriks f(x,y) dikalikan dengan (-1) x+y sebelum dilakukan transformasi. Gambar<br />

berikut memperlihatkan pergeseran matriks menggunakan metode ini. Koefisien DC<br />

ditunjukkan dengan kotak kecil berwarna hitam di sudut kiri atas submatriks A.


Simetri Konjugat. Analisis definisi transformasi <strong>Fourier</strong> mengarahkan ke sifat<br />

simetri; jika diambil substitusi u = -u dan v = -v maka<br />

F(u,v) = F*(-u + pM, -v + qN)<br />

untuk sebarang bilangan bulat p dan q. Hal ini berarti bahwa setengah hasil transformasi<br />

merupakan “cermin” konjugat dari setengah yang lain. Dapat dipandang bahwa setengah<br />

bagian atas adalah “cermin” konjugat dari setengah bagian bawah atau setengah bagian<br />

kiri adalah “cermin” konjugat dari setengah bagian kanan. Simetri berarti bahwa<br />

informasi berada di setengah hasil transformasi, setengahnya lagi adalah redundant<br />

(mubazir). Gambar berikut memperlihatkan simetri dalam DFT yang telah digeser; kotak<br />

kecil berwarna hitam menunjukkan posisi koefisien DC.<br />

Menampilkan Hasil <strong>Transformasi</strong><br />

Setelah melakukan transformasi <strong>Fourier</strong> citra f(x,y) menjadi F(u,v) maka perlu<br />

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<br />

cara atau pendekatan yang dapat dilakukan untuk menampilkan hasil tranformasi <strong>Fourier</strong>.<br />

1. Temukan nilai terbesar dari | F(u,v) | yaitu m. Nilai ini biasanya adalah koefisien<br />

DC yang dihasilkan dari transformasi. Gunakan imshow.m untuk<br />

melihat | F(u,v) | / m.<br />

2. Gunakan mat2gray.m untuk melihat | F(u,v) | secara langsung.<br />

Permasalahan lain adalah bahwa koefisien DC biasanya sangat besar dibandingkan<br />

dengan nilai-nilai yang lain. Hal ini mempunyai pengaruh pada tampilan hasil<br />

transformasi yaitu berupa satu titik putih dikelilingi warna hitam. Satu cara untuk<br />

merentangkan nilainya adalah dengan mengambil logaritma dari | F(u,v) | dan<br />

menampilkan<br />

Log ( 1 + | F(u,v) | )<br />

Tampilan magnitude transformasi <strong>Fourier</strong> disebut spektrum dari transformasi tersebut.<br />

<strong>Transformasi</strong> <strong>Fourier</strong> Dalam MATLAB<br />

Beberapa fungsi Matlab yang sesuai adalah<br />

• fft.m untuk memperoleh DFT dari sebuah vektor<br />

• ifft.m untuk memperoleh inverse DFT dari sebuah vektor<br />

• fft2.m untuk memperoleh DFT dari sebuah matriks<br />

• ifft2.m untuk memperoleh inverse DFT dari sebuah matriks<br />

• fftshift.m untuk menggeser hasil transformasi sehingga koefisien DC berada di<br />

tengah<br />

Contoh 1<br />

Membuat matriks 8 x 8 dengan semua elemennya sama dengan 1, kemudian mencari<br />

DFT-nya dengan metode FFT. Hasilnya adalah matriks dengan koefisien DC dan nol<br />

pada semua elemen yang lain (karena matriks masukan elemennya sama, tidak ada<br />

perubahan)<br />

>> a = ones (8);<br />

>> fft2 (a)<br />

Hasilnya adalah


Contoh 2<br />

ans =<br />

64 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

Membentuk matriks yang mengandung perubahan nilai dan melihat DFT-nya.<br />

>> a = [100 200; 100 200];<br />

>> b = repmat (a, 4, 4)<br />

b =<br />

>> bfft = fft2 (b)<br />

100 200 100 200 100 200 100 200<br />

100 200 100 200 100 200 100 200<br />

100 200 100 200 100 200 100 200<br />

100 200 100 200 100 200 100 200<br />

100 200 100 200 100 200 100 200<br />

100 200 100 200 100 200 100 200<br />

100 200 100 200 100 200 100 200<br />

100 200 100 200 100 200 100 200<br />

bfft =<br />

9600 0 0 0 -3200 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

Matriks b dapat dinyatakan dengan jumlahan dua matriks yaitu sebuah matriks konstan<br />

yang semua elemennya 150 dan sebuah matriks yang berubah-ubah nilainya sebesar -50<br />

dan 50 dari kiri ke kanan. Matriks konstan akan menghasilkan koefisien DC yang bernilai<br />

64 x 150 = 9600.


Contoh 3<br />

Membuat matriks dengan satu tebing step tunggal dan mencari DFT-nya.<br />

>> a = [zeros(8, 4) ones(8, 4)]<br />

a =<br />

>> afft = fft2 (a)<br />

0 0 0 0 1 1 1 1<br />

0 0 0 0 1 1 1 1<br />

0 0 0 0 1 1 1 1<br />

0 0 0 0 1 1 1 1<br />

0 0 0 0 1 1 1 1<br />

0 0 0 0 1 1 1 1<br />

0 0 0 0 1 1 1 1<br />

0 0 0 0 1 1 1 1<br />

afft =<br />

Columns 1 through 5<br />

32.0000 -8.0000 +19.3137i 0 -8.0000 + 3.3137i 0<br />

0 0 0 0 0<br />

0 0 0 0 0<br />

0 0 0 0 0<br />

0 0 0 0 0<br />

0 0 0 0 0<br />

0 0 0 0 0<br />

0 0 0 0 0<br />

Columns 6 through 8<br />

-8.0000 - 3.3137i 0 -8.0000 -19.3137i<br />

0 0 0<br />

0 0 0<br />

0 0 0<br />

0 0 0<br />

0 0 0<br />

0 0 0<br />

0 0 0<br />

Untuk menempatkan koefisien DC di tengah dan karena hasil transformasi memuat nilainilai<br />

kompleks maka dicari magnitude-nya sekaligus dibulatkan.<br />

>> afft = fftshift (afft)<br />

>> round (abs(afft))


ans =<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 9 0 21 32 21 0 9<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

0 0 0 0 0 0 0 0<br />

Koefisien DC merupakan jumlahan semua nilai matriks a dan nilai-nilai yang lain<br />

merupakan koefisien-koefisien fungsi sinus yang diperlukan untuk membentuk tebing<br />

pada matriks.<br />

<strong>Transformasi</strong> <strong>Fourier</strong> Citra<br />

Akan dibuat beberapa citra sederhana dan melihat hasil transformasi <strong>Fourier</strong>-nya.<br />

Contoh 1<br />

>> a = [zeros (256, 128) ones (256, 128)];<br />

>> af = fftshift (fft2 (a) );<br />

Untuk melihat spektrumnya dapat dipilih dari dua cara berikut:<br />

1. af1 = log ( 1 + abs (af) );<br />

imshow (af1/af1(129,129))<br />

Proses ini didasarkan pada kenyataan bahwa setelah penggeseran maka koefisien<br />

DC berada pada posisi x = y = 129. Nilai direntangkan dengan fungsi log dan<br />

membagi nilainya dengan koefisien DC.<br />

2. imshow (mat2gray ( log (1 + abs (af) ) ) )<br />

Fungsi mat2gray.m secara otomatis melakukan scaling untuk menampilkan citra.<br />

Untuk kemudahan maka akan dibuat satu fungsi sederhana untuk melihat hasil<br />

transformasi. Berikut adalah contoh fungsinya.


function fftshow (f, type)<br />

if nargin < 2,<br />

type = 'log';<br />

end<br />

if (type == 'log')<br />

f1 = log (1 + abs(f));<br />

fm = max (f1(:));<br />

imshow (im2uint8(f1/fm))<br />

elseif (type == 'abs')<br />

fa = abs(f);<br />

fm = max (fa(:));<br />

imshow (fa/fm)<br />

else<br />

error ('Type must be log or abs');<br />

end;<br />

Berikut adalah citra dari matriks a dan hasil transformasi <strong>Fourier</strong>-nya.<br />

Citra matriks a Transf. <strong>Fourier</strong> matriks a<br />

Citra matriks b Transf. <strong>Fourier</strong> matriks b


Contoh 2<br />

Membuat sebuah kotak dan melihat transformasi <strong>Fourier</strong>-nya.<br />

Contoh 3<br />

clear all;<br />

clc;<br />

a = zeros (256, 256);<br />

a(78:178, 78:178) = 1;<br />

imshow (a)<br />

af = fftshift(fft2(a));<br />

figure, fftshow(af,'abs')<br />

Sebuah kotak dan DFT-nya<br />

Sebuah kotak yang diputar 45° dan melihat DFT-nya.<br />

clear all;<br />

clc;<br />

[x,y] = meshgrid(1:256, 1: 256)<br />

b = (x+y < 329) & (x+y > 182) & (x-y > -67) & (x-y < 73)<br />

imshow (b)<br />

bf = fftshift(fft2(b));<br />

figure, fftshow(bf)


Contoh 4<br />

Sebuah kotak yang diputar 45° dan DFT-nya<br />

Membuat sebuah lingkaran dan melihat DFT-nya.<br />

clear all;<br />

clc;<br />

[x,y] = meshgrid(-128:127, -128: 127)<br />

z = sqrt(x.^2 + y.^2)<br />

c = (z


Contoh 5<br />

Citra einstein.jpg dan DFT-nya.<br />

Citra einstein.jpg dan DFT-nya<br />

Citra einstein.jpg dengan derau periodik dan DFT-nya

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!