PENGOLAHAN
CITRA DI KAWASAN
FREKUENSI
Domain Spasial vs Domain
Frekuensi
Domain Spasial
■ Konsep koordinat baris dan kolom
■ Pemrosesan pixel-by-pixel ■ Komputasi lama (terutama
citra dengan ukuran spasial tinggi)
Domain Frekuensi
■ Konsep frekuensi, perubahan intensitas piksel ke piksel
(frekuensi rendah dan tinggi) ■ Pemrosesan berdasarkan
pemilihan frekuensi yang akan difilter atau tidak
■ Komputasi relatif cepat (terutama citra dengan ukuran spasial tinggi)
Konsep Frekuensi dalam citra
■ Sembarang sinyal spasial mempunyai representasi frekuensi ■ Makna frekuensi dalam citra:
– Komponen frekuensi tinggi dikaitkan dengan perubahan piksel ke piksel secara cepat sepanjang citra. Misal: teks, tekstur, dsb.
– Komponen frekuensi tinggi dikaitkan dengan fitur berskala besar pada citra. Misal: daerah dengan intensitas konstan, atau piksel yang jumlahnya mendominasi dalam seluruh daerah citra.
Transformasi Fourier
■ Fungsi periodik dapat dinyatakan sebagai jumlah sinus dan/atau cosinus dar perbedaan frekuensi setiap perkaliannya dengan koefisien yang berbeda
Transformasi Fourier
■Fungsi yang tidak periodik tetapi dengan daerah kurva yang terbatas dapat dinyatakan sebagai integral sinus dan/atau cosinus dikalikan dengan fungsi bobot.
■Transformasi Fourier 1 dimensi:
6
Transformasi Fourier Diskrit
■ Karena citra adalah gelombang diskrit, maka fungsi f(x), x=0,1,…,M-1, untuk satu dimensi kita mendapatkan:
■ Formula Euler:
■ Sehingga didapatkan:
■ Untuk u = 0,…,M-1
■ f(x) adalah nilai intensitas setiap piksel
■ Nilai u adalah komponen dalam domain frekuensi
■ Setiap F(u) adalah nilai frekuensi dalam transformasi
Sebagai contoh, terdapat f(x) = (2, 4, 1, 5). Alihragam Fourier-nya seperti berikut.
= (f(0)(cos(0)-j sin(0)) + f(1)(cos()-j sin()) + f(2)(cos()-j sin()) + f(3)( (cos()-j sin())) / 4
= (f(0) + f(1) + f(2) + f(3)) / 4
= (2 + 4 + 1 + 5) / 4 = 12 / 4 = 3
= (f(0)(cos(0)-j sin(0)) + f(1)(cos()-j sin()) + f(2)(cos()-j sin()) + f(3)( (cos()-j sin())) / 4
= (2 (1-0) + 4(0-j) + 1(-1-0) + 5(0+j)) / 4 = (1+j)/4 = 0,25 + j0,25
= (f(0)(cos()-j sin()) + f(1)(cos()-j sin()) + f(2)(cos()-j sin()) + f(3)( (cos()-j sin())) / 4
= (2 (1-0) + 4(-1-0) + 1(1-0) + 5(-1-0) ) / 4 = -6 / 4 = -1,50
= (f(0)(cos(0)-j sin(0)) + f(1)(cos()-j sin()) + f(2)(cos()-j sin()) + f(3)( (cos()-j sin())) / 4 = (2 (1-0) + 4(0+j) + 1(-1-0) + 5(0-j) ) / 4 = (1 - j)/4
= 0,25 - j0,25
Adapun alihragam-baliknya berupa:
dengan u = 0,1,2,…,N-1
Sebagai contoh, terdapat f(x) = (2, 4, 1, 5). Alihragam Fourier-nya seperti berikut.
= (f(0)(cos(0)-j sin(0)) + f(1)(cos()-j sin()) + f(2)(cos()-j sin()) + f(3)( (cos()-j sin())) / 4
= (f(0) + f(1) + f(2) + f(3)) / 4
Program : dft1d.m
function [Re, Im] = dft1d(Fx)
% DFT1D Digunakan untuk memperoleh DFT dimensi satu. % Hasil: Re berisi bagian real dan
% Im berisi bagian imajiner
Contoh penggunaan fungsi dft1d ditunjukkan di bawah ini. Perhatikan Fx perlu ditranspos.
>> Fx = [2,4,1,5];
>> [Re,Im] = dft1d(Fx) Re =
Program : idft1d.m
function Fx = idft1d(Fu)
% IDFT1D Digunakan untuk melaksanakan transformasi balik % 1D DFT.
% Masukan: Fu berupa bilangan kompleks
n = length(Fu); % Jumlah nilai dalam fungsi Fu for u = 0 : n - 1
Berikut adalah contoh penggunaan DCT dan alihragam-baliknya:
>> Fx = [2,4,1,5];
>> [Re,Im] = dft1d(Fx); >> F = idft1d(Re+Im*j) F =
Transformasi Fourier Diskrit 2-D
■Untuk citra 2 dimensi, DFT yang digunakan:
■Untuk u=0,…,M-1 and v=0,…,N-1 dan iDFT didefinisikan:
■Karena nilai FT adalah bilangan kompleks, kadang-kadang kita nyatakan F(u) dalam koordinat polar:
■Dimana jarak atau spektrum dinyatakan dengan:
■Sudut fase dnyatakan oleh:
Transformasi Fourier Diskrit 2-D
■ Untuk u=0, v=0, didapatkan:
■ Sama dengan rata-rata nilai intensitas.
■ Lokasi ini juga adalah titik origin pada domain frekuensi.
Program : dft2d.m
function [Re, Im] = dft2d(berkas)
% DFT2D Digunakan untuk memperoleh DFT dimensi dua. % Masukan: nama berkas berskala keabuan
Fungsi dft2d digunakan untuk mentransformasikan citra berskala keabuan. Contoh penggunaannya misalnya seperti berikut:
>> [Dr, Di] = dft2d(’C:\Image\lena128.png’);
Fast Fourier Transform
■ Suatu metode bernama FFT (Fast Fourier Transform) dibuat untuk
mempercepat komputasi alihragam Fourier. Jika kompleksitas DFT untuk mentransformasikan sebuah piksel seperti yang tertuang dalam
implementasi di depan sebesar O(N2), FFT memiliki kompleksitas sebesar O(N
log2 N). Sebagai pembanding, jika N sama dengan 256 maka N2 sama dengan
65.536, sedangkan N log2 N menghasilkan 256 x 8 atau 2048. Jadi, FFT lebih
cepat 32 kali dibandingkan DFT untuk ukuran citra seperti itu. Pada alihragam berdimensi dua, penghematan waktu akan lebih terasa
■ Peluang adanya penghematan waktu komputasi dapat dilukiskan untuk citra N=8. Nilai untuk u dan x sama dengan 0,1,2,3,4,5,6,7 dengan nilai real
Visualisasi Pemrosesan FFT
■ Sebagaimana telah dibahas di depan, alihragam Fourier menghasilkan
bilangan kompleks. Terkait dengan hal itu, terdapat definisi spektrum Fourier seperti berikut:
■ dengan R(u,v) menyatakan bagian real dan I(u,v) menyatakan bagian imajiner. Adapun sudut fase transformasi didefinisikan sebagai:
■ Selain itu, terdapat pula istilah power spectrum atau spektrum daya, yang didefinisikan sebagai kuadrat besaran:
■ Untuk kepentingan analisis secara visual, spektrum dan sudut fase Fourier dapat disajikan dalam bentuk gambar. Berikut adalah contoh untuk
melakukan transformasi citra lena256.tif dan kemudian menyajikan spektrum.
>> Img = imread(’C:\Image\lena256.tif’); >> F = fft2(Img);
■ Mengingat nilai dalam spektrum terlalu lebar, penerapan logaritma biasa
digunakan hanya untuk kepentingan visualisasi. Sebagai contoh, Gambar (c) diperoleh melalui:
>> S2 = log(1 + abs(F)); >> imshow(S2, []);
■ Penambahan angka 1 dimaksudkan untuk menghindari terjadinya log(0). ■ Hasil pada Gambar (c) menunjukkan keadaan yang seperti berulang yang
■ Hal seperti itu dapat dikerjakan dengan menggunakan fungsi fftshift. Kegunaan fungsi fftshift adalah untuk mengatur agar komponen frekuensi nol diletakkan di tengah-tengah spektrum. X =
Penukaran kuadran melalui fftshift
Contoh berikut menunjukkan efek penukaran fftshift pada hasil transformasi Fourier:
>> G = fftshift(F);
>> imshow(log(1+abs(G)),[])
>>
Penapisan pada Kawasan Frekuensi
■ Menurut teorema konvolusi, konvolusi pada kawasan frekuensi dapat
dilakukan dengan mengalikan F(v, u) dengan H(v,u) (Gonzalez, dkk., 2004). Dalam hal ini, H(v,u) dinamakan sebagai fungsi transfer filter dan
■ Adapun contoh berikut menunjukkan pemakaian zero padding. >> Fs = imread('C:\Image\kotatua.tif');
>> Hs = fspecial('sobel'); >> size(Fs)
>> F = real(ifft2(G));
Program : filterdft.m
function F = filterdft(berkas, H)
% FILTERDFT Digunakan untuk melaksanakan pemfilteran % pada kawasan frekuensi menggunakan FFT.
% Masukan:
[a, b] = size(Fs); %Peroleh ukuran citra
% Menentukan ukuran baru untuk perluasan citra r = nextpow2(2 * max(a, b));
p = 2 ^ r; q = p;
% Transformasi via FFT dengan zero padding Ff = fft2(Fs, p, q);
Hf = fft2(H, p, q); % Konvolusi
G = Hf .* Ff;
% Peroleh citra hasil pemfilteran F = real(ifft2(G));
■ Contoh penggunaan fungsi filterdft: >> H = fspecial(’sobel’);
Source code FFT satu dimensi dalam matlab dapat dilihat sebagai berikut:
Image=imread('cameraman.tif');
[ImageHeight ImageWidth]=size(Image); X=fft(Image);
Y=ifft(X);
imshow([Image X uint8(Y)]);
sedangkan source code FFT dua dimensi dalam matlab dapat dilihat sebagai berikut:
Image=imread('cameraman.tif');
[ImageHeight ImageWidth]=size(Image); X=fft2(Image);
Y=ifft2(X);
Filter Lolos-Rendah
■ Filter lowpass adalah flter yang mengubah (menurunkan) komponen frekuensi tnggi, dan
melewatkan (passing) komponen frekuensi rendah. Citra yang diflter menggunakan flter lowpass memiliki detail yang kurang tajam dibandingkan citra asal.
■ Filter ini berguna untuk menghaluskan derau atau untuk kepentingan interpolasi tepi objek dalam citra.
Filter lolos-rendah
Jenis filter lolos-rendah pada kawasan frekuensi yang paling sederhana adalah yang dinamakan ILPF (Ideal Low Pass Filter). Filter ini memiliki fungsi transfer seperti berikut:
Dalam hal ini, D0 adalah bilangan non-negatif yang biasa disebut radius filter, yang menentukan ambang frekuensi, dan D(v,u) adalah jarak antara (v,u) terhadap pusat filter, yang dinyatakan dengan
Program : ilpf.m
function F = ilpf(berkas, d0)
% ILPF Digunakan untuk melaksanakan pemfilteran
% pada kawasan frekuensi menggunakan ILPF.
[a, b] = size(Fs); %Peroleh ukuran citra
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b)); p = 2 ^ r;
q = p;
% Menentukan jangkauan frekuensi u dan v u = 0:(p - 1);
v = 0:(q - 1);
% Hitung indeks untuk meshgrid idx = find(u > q/2);
u(idx) = u(idx) - q;
idy = find(v > p/2); v(idy) = v(idy) - p;
% Peroleh array meshgrid [V, U] = meshgrid(v, u);
% Hitung jarak D(v,u) D = sqrt(V.^2 + U.^2);
% Hitung frekuensi ambang sebesar d0 kalai lebar citra
% Peroleh fungsi transfer Hf = double(D <= ambang);
% Transformasi via FFT dengan zero padding Ff = fft2(Fs, p, q);
% Pemfilteran G = Hf .* Ff;
% Transformasi balik F = real(ifft2(G));
■ Contoh pemakaian fungsi ilpf:
>> F = ilpf('C:\Image\kotatua.tif', 0.08); imshow(F)
■ BLPF (Butterworth low pass filter) merupakan jenis filter lolos-rendah yang digunakan untuk memperbaiki efek bergelombang yang dikenal dengan
sebutan ringing, yang diakibatkan oleh ILPF. Berbeda dengan ILPF, BLPF tidak memiliki titik diskontinu yang tajam. Fungsi transfernya berupa
Program : blpf.m
function F = blpf(berkas, d0, n)
% BLPF Digunakan untuk melaksanakan pemfilteran % pada kawasan frekuensi menggunakan BLPF. % Masukan:
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b)); p = 2 ^ r;
q = p;
% Menentukan jangkauan frekuensi u dan v
u = 0:(p - 1); v = 0:(q - 1);
% Hitung indeks untuk meshgrid idx = find(u > q/2);
u(idx) = u(idx) - q;
idy = find(v > p/2); v(idy) = v(idy) - p;
% Peroleh array meshgrid [V, U] = meshgrid(v, u);
% Menentukan n kalau n tidak disebutkan if nargin == 2
n = 1; end
ambang = d0 * p; % Hitung frekuensi ambang Hf = 1 ./ (1 + D ./ ambang^(2 * n));
% Transformasi via FFT dengan zero padding Ff = fft2(Fs, p, q);
% Pemfilteran G = Hf .* Ff;
% Transformasi balik F = real(ifft2(G));
■ Contoh pemakaian fungsi blpf:
>> F = blpf('C:\Image\kotatua.tif', 0.02, 0.3 ); >> imshow(F)
■ GLPF (Gaussian low pass filter) merupakan filter lolos-rendah dengan fungsi transfer seperti berikut:
dengan merupakan deviasi standar. Sebagai contoh, dengan menggunakan sama dengan Do maka
Program : glpf.m
function F = glpf(berkas, d0)
% GLPF Digunakan untuk melaksanakan pemfilteran % pada kawasan frekuensi menggunakan GLPF. % Masukan:
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b)); p = 2 ^ r;
q = p;
% Menentukan jangkauan frekuensi u dan v
u = 0:(p - 1); v = 0:(q - 1);
% Hitung indeks untuk meshgrid idx = find(u > q/2);
u(idx) = u(idx) - q; idy = find(v > p/2); v(idy) = v(idy) - p;
% Peroleh array meshgrid [V, U] = meshgrid(v, u);
% Hitung jarak D(v,u) D = sqrt(V.^2 + U.^2);
% Menentukan n kalau n tidak disebutkan
if nargin == 2 n = 1;
ambang = d0 * p; % Hitung frekuensi ambang Hf = exp(-(D.^2) ./ (2 * ambang ^ 2));
% Transformasi via FFT dengan zero padding Ff = fft2(Fs, p, q);
% Pemfilteran G = Hf .* Ff;
% Transformasi balik F = real(ifft2(G));
Contoh pemakaian fungsi di glpf:
>> F = glpf('C:\Image\kotatua.if', 0.05); >> imshow(F)
Filter Lolos-Tinggi
■ Filter highpass adalah flter yang mengubah (menurunkan) komponen frekuensi rendah, dan
melewatkan (passing) komponen frekuensi tnggi. Citra yang diflter menggunakan flter highpass memiliki detail yang lebih tajam dibandingkan citra asal.
■ Filter ini memiliki hubungan dengan filter lolos-rendah seperti berikut:
■ Dengan Hlt(v,u) adalah fungsi transfer filter lolos-tinggi dan Hlf(v,u) adalah fungsi transfer filter lolos-rendah.
■ Tiga jenis filter lolos-tinggi dilihat di Tabel. Ketiga filter yang tercantum dalam tersebut yaitu IHPF (Ideal high pass filter), BHPF (Butterworth high pass
Program : bhpf.m
function F = bhpf(berkas, d0, n)
% BHPF Digunakan untuk melaksanakan pemfilteran % pada kawasan frekuensi menggunakan BHPF. % Masukan:
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b)); p = 2 ^ r;
q = p;
% Menentukan jangkauan frekuensi u dan v
u = 0:(p - 1); v = 0:(q - 1);
% Hitung indeks untuk meshgrid idx = find(u > q/2);
u(idx) = u(idx) - q; idy = find(v > p/2); v(idy) = v(idy) - p;
% Peroleh array meshgrid [V, U] = meshgrid(v, u);
% Hitung jarak D(v,u) D = sqrt(V.^2 + U.^2);
% Menentukan n kalau n tidak disebutkan if nargin == 2
ambang = d0 * p; % Hitung frekuensi ambang
Hlr = 1 ./ (1 + (D ./ ambang) .^(2 * n)); % Lolos-rendah Hlt = 1 - Hlr; % Lolos-tinggi
% Transformasi via FFT dengan zero padding Ff = fft2(Fs, p, q);
% Pemfilteran G = Hlt .* Ff;
% Transformasi balik F = real(ifft2(G));
■ Contoh pemakaian fungsi blpf:
>> F = bhpf('C:\Image\goldhill.tif', 0.005, 1 ); >> imshow(F)
Pemfilteran dengan BHPF
Pemfilteran dengan Pendekatan High Frequency Emphasis
■ Penerapan filter lolos-tinggi dengan cara yang telah dibahas menimbulkan efek berupa hilangnya latarbelakang. Hal ini disebabkan pemfilteran dengan cara tersebut menghilangkan komponen DC (F(0,0)).
■ Nah, untuk mengatasi hal itu, terdapat pendekatan yang dinamakan pemfilteran high frequency emphasis (HFE). Dalam hal ini, penonjolan frekuensi tinggi diatur melalui rumus:
■ Dalam hal ini,
– Hlt adalah fungsi transfer filter lolos-tinggi;
– a adalah nilai ofset, sebagai penambah nilai rerata intensitas; – b adalah nilai pengali, untuk meningkatkan kontras.
■ Gonzales, dkk. (2004) menunjukkan bahwa penggunaan a sebesar 0,5 dan b sebesar 2 memberikan hasil yang memuaskan pada citra medis.
function F = hfe(berkas, d0, n)
% HFE Digunakan untuk melaksanakan pemfilteran % pada kawasan frekuensi menggunakan BHPF % dan menerapkan HFE (High frequency emphasis). % Masukan:
[a, b] = size(Fs); %Peroleh ukuran citra
% Menentukan ukuran baru untuk perluasan citra r = nextpow2(2 * max(a, b));
p = 2 ^ r; q = p;
% Menentukan jangkauan frekuensi u dan v u = 0:(p - 1);
v = 0:(q - 1);
% Hitung indeks untuk meshgrid idx = find(u > q/2);
u(idx) = u(idx) - q; idy = find(v > p/2); v(idy) = v(idy) - p;
% Peroleh array meshgrid [V, U] = meshgrid(v, u);
% Hitung jarak D(v,u) D = sqrt(V.^2 + U.^2);
% Menentukan n kalau n tidak disebutkan if nargin == 2
n = 1; end
ambang = d0 * p; % Hitung frekuensi
■ Contoh penggunaan fungsi hfe:
>> F = hfe('C:\Image\goldhill.tif', 0.05, 1 ); >> imshow(F)
Hasil penerapan high frequency emphasis
Latihan
1. Berikan beberapa contoh transformasi yang mengalihkan ke kawasan frekuensi. 2. Terdapat data seperti berikut:
f(x) = (3, 4, 4, 5)
Hitunglah transformasi Fourier F(0) hingga F(3). 3. Jelaskan maksud istilah berikut.
■ Spektrum Fourier
■ Spektrum daya (power spectrum)
4. Apa yang Anda ketahui mengenai FFT? 5. Apa kegunaan fungsi fftshift?
6. Jelaskan yang dimaksud dengan istilah berikut. ■ Filter lolos-rendah