Kompetensi dasar dan indikator
1 Kompetensi Dasar
Setelah mengikuti praktikum ini, mahasiswa mampu:
- Memahami dan menganalisis implementasi Transformasi Fourier
2 Indikator
1 Mahasiswa mampu memahami dan menganalisis implementasi Transformasi Fourier
- Mahasiswa berhasil menganalisis implementasi Transfonnasi Fourier untuk perbaikan citra digital
- Mahasiswa berhasil membuat source code untuk implementasi Transformasi Fourier
Dasar Teori
Pada bab ini akan dibahas implementasi Transformasi Fourier dan mahasiswa diminta mempelajari dengan seksama uraian lengkap tentang implementasi Transformasi Fourier yang diangkat dari jurnal yang berjudul "Penerapan Metode Transformasi Fourier Untuk Perbaikan Citra Digital".
Metode Frequency Domain
Secara umum, metode yang digunakan dalam pemrosesan citra digital dapat dibagi menjadi dua kelompok, yaitu metode spatial domain dan metode frequency domain. Pada metode spatial domain, pemrosesan dilakukan dengan cara memanipulasi nilai pixel dari citra tersebut secara langsung.
Sedangkan pada pengolahan citra digital dengan metode frequency domain, informasi citra digital ditransformasikan lebih dulu dengan transformasi Fourier, kemudian dilakukan manipulasi pada hasil transformasi Fourier tersebut. Setelah manipulasi selesai, dilakukan inverse transformasi Fourier untuk mendapatkan informasi citra kembali. Metode frequency domain ini dapat digunakan untuk menyelesaikan masalah masalah tertentu yang sulit jika dilakukan dengan menggunakan metode spatial domain.
Transformasi Fourier
Transformasi Fourier dari f(x), didefinisikan sebagai berikut: di mana diketahui F(u), maka f(x) dapat diperoleh dengan Inverse Transformasi Fourier berikut: Kedua persamaan di atas disebut dengan pasangan transformasi Fourier. Jika f(x) adalah bilangan real, biasanya F(u) merupakan bilangan kompleks yang bisa diuraikan menjadi:
F(u) = R(u) +jI(u) dimana R(u) dan I(u) adalah komponen real dan imajiner dari F(u). Persamaan di atas juga sering dituliskan sebagai:
dimana
|F(u)| adalah magnitude dari F(u), yang diperoleh dari :
Fungsi magnitude |F(u)| disebut juga spektrum Fourier dari f(x), dan ΙΈ(u) disebut dengan sudut fase dari f(u). Karena pada pengolahan citra digital, data yang digunakan berbentuk digital/diskrit maka dapat digunakan kedua persamaan diatas untuk melakukan transformasi dan inverse transformasi Fourier.
Untuk menganalisa citra pada frequency domain, hasil transformasi Fourier dapat ditampilkan sebagai citra, dimana intensitasnya proporsional dengan besamya |F(u)| atau spektrum Fourier. Namun karena dynamic range dari spektrum Fourier biasanya sangat besar, maka sebelum ditampilkan sebagai citra harus diubah menjadi:
D(u,v) = c log ( 1 + |F(u,v)|)
dimana c adalah konstanta. Selanjutnya yang ditampilkan sebagai citra adalah nilai dari D(u,v). Nilai D(u,v) ini akan memiliki dynamic range yang lebih kecil daripada |F(u,v)|.
Metode Penelitian
Untuk mengimplementasikan proses pengolahan citra dengan metode frequency domain, penulis membuat program dengan menggunakan Matlab. Secara garis besar program ini akan melakukan langkah-langkah berikut:
1. Membuka file citra digital
2. Menampilkan citra digital
3. Melakukan transformasi Fourier pada citra
4. Menampilkan spektrum Fourier dari citra
5. Melakukan perubahan pada hasil transformasi Fourier
6. Menampilkan spektrum Fourier yang telah diubah
7. Melakukan inverse transformasi Fourier
8. Menampilkan citra digital hasil proses
Pada Matlab telah tersedia beberapa fungsi yang dapat langsung digunakan untuk membantu mempercepat pembuatan program. Adapun fungsi-fungsi Matlab yang sangat penting dan digunakan di program ini antara lain:
- IMREAD
Fungsi ini berguna untuk membaca citra dari suatu file. Jika citra yang dibaca memiliki fonnat wama grayscale, fungsi ini akan menghasi lkan array dua dimensi yang berisi informasi intensitas grayscale dari citra tersebut. Fungsi ini mendukung format BMP, JPEG, TIF, PNG, HDF, PCX, dan XWD . - IMSHOW
Fungsi ini digunakan untuk menampilkan citra pada layar. - IMWRITE
Fungsi ini digunakan untuk menyimpan citra ke dalam file. Fungsi ini merupakan kebalikan dari fungsi IMREAD. - FFT2
Fungsi ini digunakan untuk melakukan transformasi Fourier terhadap array 2 dimensi. Hasil yang diperoleh juga akan berbentuk array 2 dimensi. - FFTSHIFT
Fungsi ini digunakan untuk melakukan pergeseran dari hasil transormasi Fourier, sehingga memudahkan analisa visualisasi dari spektrum Fourier. Karena spektrum Fourier bersifat periodik, pergeseran ini tidak akan berpengaruh pada citra yang dihasilkan jika dilakukan inverse transformasi Fourier. - IFFT2
Fungsi ini digunakan untuk melakukan inverse transformasi Fourier terhadap array 2 dimensi. Hasil yang diperoleh juga akan berbentuk array 2 dimensi.
Langkah pertama yang dilakukan adalab membaca file citra yang akan diproses dan menyimpan informasi graylevel dari semua pixelnya ke dalamsebuab matriks.
Perintah yang digunakan adalah:
nmfile = 'flo_nois.bmp';
img = imread(nmfile) ;
img = imread(nmfile) ;
Selanjutnya dilakukan transformasi Fourier dan dilanjutkan dengan penggeseran (shifting ) basil transformasi Fourier tersebut supaya basil visualisasinya lebih mudah diamati dan dianalisa. Untuk itu digunakan perintah:
% Transformasi Fourier dengan FFT
img_f = fft2(img);
img_fs = fftshift(img_f);
img_f = fft2(img);
img_fs = fftshift(img_f);
Setelah itu baru digunakan perintah imshow untuk menampilkan citra maupun spektrum Fouriemya. Namun pada saat spektrum Fourier akan ditampilkan, karena dynamic range dari spektrum Fourier sangat besar, lebib dulu dilakukan proses dengan perintah berikut:
img_spectrum = log(l +abs(img_fs));
Proses ini akan memperkecil dynamic range sebingga dapat ditampilkan di layar dengan lebih jelas dan lebih mudah untuk dianalisa. Untuk menghilangkan noise, lebih dulu dibuat sebuab matriks h yang dimensinya sama dengan dimensi dari matriks untukmenyimpan hasil transformasi Fourier, yaitu 256 x 256. Matriks h ini dinisialisasi dengan diisi nilai satu pada setiap elemennya dengan menggunakan perintah:
h = ones(256);
Selanjutnya bagian tertentu dari matriks yang menunjukkan area dimana noise berada pada spektrum Fourier citra diubah menjadi nol, dengan menggunakan perintah:
% Memilih area frekuensi yang akan difilter
% untuk menghapus noise.
for ix = 1:256,
for iy = 1:256,
% Noise berasal dari frekuensi yang membentuk garis
% vertikal di bagian tengah spektrum.
% Nilai pada area ini akan dihilangkan dengan cara
% dikalikan 0.
if (iy > 127) & (iy < 130) & ((ix < 123) | (ix > 134))
h(ix,iy) = 0;
end
end
end
% untuk menghapus noise.
for ix = 1:256,
for iy = 1:256,
% Noise berasal dari frekuensi yang membentuk garis
% vertikal di bagian tengah spektrum.
% Nilai pada area ini akan dihilangkan dengan cara
% dikalikan 0.
if (iy > 127) & (iy < 130) & ((ix < 123) | (ix > 134))
h(ix,iy) = 0;
end
end
end
Perintah di atas hanya berlaku untuk noise yang ada pada citra yang digunakan oleh penulis. Jika noise pada spektrum Fourier citra lainnya berada di area yang berbeda, tentunya perintah di atas harus dimodifikasi angka-angkanya sehingga sesuai dengan area noise pada spektrum Fourier yang akan dihilangkan.
Setelah bagian tertentu dari matriks tersebut diberi nilai nol, sedangkan yang lainnya tetap bernilai satu, maka masing-masing elemen matriks tersebut dikalikan dengan elemen-elemen yang bersesu aian dari matriks spektrum Fourier citra, dengan perintah:
g = img_fs .* h;
Perkalian ini akan menghasilkan spektrum Fourier baru dimana area noise telah hilang karena dikalikan dengan nol. Pada visualisasi spektrum Fourier hilangnya area noise ini ditunjukkan dengan warna hitam di area tersebut.
Langkah berikutnya adalah melakukan inverse transformasi Fourier dari spektrum Fourier yang baru untuk mendapatkan informasi citra kembali, dengan perintah:
hasil = uint8(abs(ifft2(g)));
Digunakannya uint8 adalah supaya informasi citra yang diperoleh memiliki tipe data pixel 8-bit atau 256 graylevel, sehingga sama dengan citra asalnya. Program selengkapnya yang disertai dengan penjelasan mengenai perintah-perintah yang digunakan dapat dilihat pada lampiran.
Hasil dan Pembahasan
Program yang dibuat telah diujicobakan untuk beberapa file citra yang memiliki berbagai jenis noise yang dapat terlihat pada spektrum Fouriemya.
Contoh kasus 1:
Pada gambar berikut ini gambar kiri atas adalah citra yang memiliki noise berupa garis-garis horisontal. Sedangkan gambar kanan atas adalah spektrum Fourier dari citra tersebut. Pada spektrum Fourier ini tampak sebuah garis vertikal berwama terang yang mewakili noise pada citra tersebut.
Gambar kanan bawah menunjukkan gambar spektrum Fourier yang telah diproses.
Proses dilakukan dengan cara mengalikan nilai spektrum pada area yang dipilih dengan nol. Area yang dipilih adalah bagian berwama terang yang membentuk garis vertikal karena bagian inilah yang mewakili adanya noise.
Sedangkan area di bagian pusat spektrum tidak dihilangkan karena area ini mengandung informasi citra itu sendiri. Jika area pusat spektrum ini juga dijadikan nol, maka citra yang dihasilkan akan menjadi gelap.
Setelah area yang dipilih dikalikan dengan nol, tampak bahwa wama pada area tersebut menjadi gelap. Setelah itu dilakukan inverse transformasi Fourier sehingga didapatkan citra seperti pada gambar kiri bawah. Terlihat bahwa citra menjadi lebih jelas karena noise berupa garis-garis horisontal sudah tidak ada lagi.
Contoh kasus 2:
Pada contoh kasus ini prinsipnya sama dengan contoh pertama, hanya bedanya jenis noise yang ada di sini direpresentasikan dengan adanya dua garis vertikal berwama terang pada spektrum Fourier dari citra.
Setelah area spektrum yang dipilih dikalikan nol, kemudian dilakukan inverse transformasi Fourier, terlihat bahwa citra yang dihasilkan jauh lebih jelas daripada sebelumnya.
Dari kedua contoh kasus tersebut, terlihat bahwa dengan melakukan pemrosesan citra digital dengan metode frequency domain, kita dapat melakukan perbaikan pada citra yang tercemari oleh noise tertentu.
Noise yang dapat dihilangkan atau dikurangi dengan metode ini adalah noise yang menghasilkan pola tertentu pada spektrum Fouriemya, misalnya berupa garis lurus.
Jika noise yang ada tersebar dan bentuknya tidak teratur, maka akan sulit untuk menentukan area mana yang menjadi penyebab noise tersebut.
Penutup
Pada pengolahan citra digital, metode frequency domain dapat digunakan untuk menyelesaikan masalah-masalah tertentu yang sulit jika dilakukan dengan menggunakan metode spatial domain.
Pada metode frequency domain, informasi citra digital ditransfonnasikan lebih dulu dengan transformasi Fourier, kemudian dilakukan manipulasi pada hasil transformasi Fourier tersebut. Setelah manipulasi selesai, dilakukan inverse transformasi Fourier untuk mendapatkan informasi citra kembali.
Noise yang dapat dihilangkan atau dikurangi dengan metode ini adalah noise yang menghasilkan pola tertentu pada spektrum Fouriemya, misalnya berupa garis lurus. Secara umum program yang dibuat telah berfungsi dengan baik, namun demikian masih terbuka kemungkinan untuk dikembangkan lebih lanjut, misalnya dengan menambahkan kemampuan untuk menentukan area pada spektrum Fourier yang akan dipilih secara interaktif.
Lampiran
Listing Program
% Image processing pada frequency domain
% untuk menghapus noise berupa garis-garis horisontal.
nmfile = 'flo_nois.bmp';
img = imread(nmfile);
% Transformasi Fourier dengan FFT
img_f = fft2(img);
img_fs = fftshift(img_f);
% Menyiapkan figure sbg tempat untuk menampilkan citra.
hl = figure;
iptsetpref('Imshow AxesVisible','off' );
set(hl , 'Units','pixels', ...
'Position', [10 40 560 530], ...
'MenuBar', 'none', ...
'ToolBar' 'none');
set(h1, 'NumberTitle', 'off' );
set(h1, 'Name', 'Image Processing in Frequency Domain (Press Enter to continue...)');
ahl = axes('Parent',hl , ...
'Units','pixels', ...
'Position',[5 265 256 256], ...
'XTick',[], ...
'YTick',[], ...
'Box','on', ...
'Tag','Axes3');
ah2 = axes('Parent',hl , ...
'Units','pixels', ...
'Position',[280 265 256 256], ...
'XTick',[], ...
'YTick',[], ...
'Box','on', ...
'Tag','Axes4');
ah3 = axes('Parent',hl , ...
'Units','pixels', ...
'Position',[5 5 256 256], ...
'XTick',[], ...
'YTick ,[], ...
'Box','on', ...
'Tag','Axesl ');
ah4 = axes('Parent',hl , ...
'Units','pixels', ...
'Position',[280 5 256 256], ...
'XTick',[], ...
'YTick',[], ...
'Box','on', ...
'Tag','Axes2');
% Menampilkan citra asal
axes(ahl);
imshow(img);
pause;
% Kompresi dynamic range dari spektrum Fourier
% untuk menampilkan spektrum Fourier sbg citra (Gonzalez, p.92)
img_spectrum = log(l +abs(img_fs));
axes(ah2);
% Menampilkan spektrum Fourier dari citra
%imshow(r2f2, [3 10]);
imshow(img_spectrum, [3 10]);
pause;
h = ones(256);
% Memilih area frekuensi yang akan difilter
% untuk menghapus noise.
for ix = 1:256,
for iy = 1:256,
% Noise berasal dari frekuensi yang membentuk garis
% vertikal di bagian tengah spektrum.
% Nilai pada area ini akan dihilangkan dengan cara
% dikalikan 0.
if (iy > 127) & (iy < 130) & ((ix < 123) | (ix > 134))
h(ix,iy) = O;
end
end
end
g = img_fs .* h;
% Kompresi dynamic range dari spektrum Fourier
img_spectrum = log(1+abs(g));
axes(ah4);
% Menampilkan spektrum Fourier yang sudah difilter
imshow(img_spectrum, [3 10]);
pause;
% Inverse Transformasi Fourier
hasil = uint8(abs(ifft2(g)));
axes(ah3);
% Menampilkan citra hasil
imshow(hasil);
pause;
close;
% untuk menghapus noise berupa garis-garis horisontal.
nmfile = 'flo_nois.bmp';
img = imread(nmfile);
% Transformasi Fourier dengan FFT
img_f = fft2(img);
img_fs = fftshift(img_f);
% Menyiapkan figure sbg tempat untuk menampilkan citra.
hl = figure;
iptsetpref('Imshow AxesVisible','off' );
set(hl , 'Units','pixels', ...
'Position', [10 40 560 530], ...
'MenuBar', 'none', ...
'ToolBar' 'none');
set(h1, 'NumberTitle', 'off' );
set(h1, 'Name', 'Image Processing in Frequency Domain (Press Enter to continue...)');
ahl = axes('Parent',hl , ...
'Units','pixels', ...
'Position',[5 265 256 256], ...
'XTick',[], ...
'YTick',[], ...
'Box','on', ...
'Tag','Axes3');
ah2 = axes('Parent',hl , ...
'Units','pixels', ...
'Position',[280 265 256 256], ...
'XTick',[], ...
'YTick',[], ...
'Box','on', ...
'Tag','Axes4');
ah3 = axes('Parent',hl , ...
'Units','pixels', ...
'Position',[5 5 256 256], ...
'XTick',[], ...
'YTick ,[], ...
'Box','on', ...
'Tag','Axesl ');
ah4 = axes('Parent',hl , ...
'Units','pixels', ...
'Position',[280 5 256 256], ...
'XTick',[], ...
'YTick',[], ...
'Box','on', ...
'Tag','Axes2');
% Menampilkan citra asal
axes(ahl);
imshow(img);
pause;
% Kompresi dynamic range dari spektrum Fourier
% untuk menampilkan spektrum Fourier sbg citra (Gonzalez, p.92)
img_spectrum = log(l +abs(img_fs));
axes(ah2);
% Menampilkan spektrum Fourier dari citra
%imshow(r2f2, [3 10]);
imshow(img_spectrum, [3 10]);
pause;
h = ones(256);
% Memilih area frekuensi yang akan difilter
% untuk menghapus noise.
for ix = 1:256,
for iy = 1:256,
% Noise berasal dari frekuensi yang membentuk garis
% vertikal di bagian tengah spektrum.
% Nilai pada area ini akan dihilangkan dengan cara
% dikalikan 0.
if (iy > 127) & (iy < 130) & ((ix < 123) | (ix > 134))
h(ix,iy) = O;
end
end
end
g = img_fs .* h;
% Kompresi dynamic range dari spektrum Fourier
img_spectrum = log(1+abs(g));
axes(ah4);
% Menampilkan spektrum Fourier yang sudah difilter
imshow(img_spectrum, [3 10]);
pause;
% Inverse Transformasi Fourier
hasil = uint8(abs(ifft2(g)));
axes(ah3);
% Menampilkan citra hasil
imshow(hasil);
pause;
close;
Langkah Praktikum
Latihan
- Buatlah source code implementasi Transformasi Fourier pada bidang tertentu yang anda tentukan sendiri.
Jawab
NB :
Download laporan di Halaman Daftar Isi
Download laporan di Halaman Daftar Isi