TEKNIK PENGOLAHAN CITRA Kuliah 7 – Transformasi Fourier
TEKNIK PENGOLAHAN CITRA Kuliah 7 – Transformasi Fourier
TEKNIK PENGOLAHAN CITRA Kuliah 7 – Transformasi Fourier
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