Setelah bab ini berakhir, diharapkan pembaca mendapatkan berbagai pengetahuan berikut dan mampu mempraktikkannya.
- Pengolahan citra di kawasan spasial dan kawasan frekuensi
- Fourier 1-D
- Alihragam/Transformasi Fourier
- Fourier 2-D
- Fast Fourier Transform
- Visualisasi pemrosesan FFT
- Penapisan pada kawasan frekuensi
- Filter lolos-rendah / Low Pass Filter
- Filter lolos-tinggi / High Pass Filter
- Penapisan dengan pendekatan high frequency emphasis
6.1 Pengolahan Citra di Kawasan Spasial dan Kawasan Frekuensi
Citra dapat ditransformasikan di kawasan spasial maupun di kawasan frekuensi. Dua cara untuk melakukan transformasi citra ditunjukkan pada Gambar 6.2. Sejumlah contoh transformasi di kawasan spasial atau keruangan telah dibahas di Bab 5. Namun, sebagai alternatif citra perlu diproses di kawasan
frekuensi agar penentuan daerah frekuensinya dapat lebih ketat dan tepat. Untuk itu diperlukan pasangan transformasi dan transformasi-balik sebelum dan sesudah penapisan.

Dalam bahasa Indonesia, istilah lain yang identik dengan transformasi adalah alihragam. Adanya pasangan alihragam dan alihragam-balik tentu saja menambah beban komputasi.
Salah satu alihragam yang biasa dipakai di kawasan frekuensi adalah alihragam Fourier. Sejak algoritma alihragam Fourier ditemukan, telah bermunculan pula macam-macam alihragam yang lain, seperti Transformasi gelombang-singkat (wavelet), transformasi Radon, dan DCT (Discrete Cosine Transform).
6.2 Alihragam/Transformasi Fourier
Transformasi Fourier adalah teknik untuk menganalisis sinyal atau citra dalam domain frekuensi, yang dapat digunakan untuk mengubah sinyal atau citra dari domain spasial menjadi domain frekuensi. Transformasi Fourier memecah citra atau sinyal menjadi sejumlah komponen frekuensi, dan menyajikan informasi ini dalam bentuk spektrum frekuensi.
Aplikasi utama dari Transformasi Fourier dalam pengolahan citra digital adalah dalam filter frekuensi, baik itu filter spasial atau filter frekuensi. Dalam filter frekuensi, informasi yang terkandung dalam spektrum frekuensi citra digunakan untuk menghilangkan atau mempertahankan informasi tertentu dalam citra.
Contohnya, filter high-pass (HPF) dapat digunakan untuk menghilangkan komponen frekuensi rendah dari citra, sehingga hanya sisa komponen frekuensi tinggi. Hasilnya akan menghasilkan citra yang lebih tajam atau memiliki tepi yang lebih tegas. Sebaliknya, filter low-pass (LPF) dapat digunakan untuk menghilangkan komponen frekuensi tinggi dari citra, sehingga hanya sisa komponen frekuensi rendah. Hasilnya akan menghasilkan citra yang lebih halus atau kabur.
Transformasi Fourier juga digunakan dalam pengolahan citra lainnya, seperti deteksi tepi, segmentasi citra, dan pemulihan citra.
Alihragam Fourier (Fourier transform) merupakan salah satu jenis alihragam ke kawasan frekuensi yang banyak dipakai pada pengolahan citra. Alihragam ini dimanfaatkan untuk memetakan citra dari kawasan spasial ke dalam kawasan frekuensi. Disamping untuk melihat karakteristik spektrum citra, juga menjadi bagian pemrosesannya. Citra dapat diamati sebagai kumpulan gelombang sinusoid dengan frekuensi, amplitudo, dan fase yang berbeda-beda. Meskipun pada zaman sekarang terdapat berbagai alihragam sebagai alternatif alihragam Fourier, konsep yang mendasari alihragam Fourier perlu dimengerti. Lagipula, beberapa pemrosesan masih bertumpu pada alihragam Fourier.
Berdasarkan temuan ahli fisika dari Prancis bernama Baptiste Joseph Fourier (1768-1830), semua fungsi yang bersifat periodis, betapapun kompleks fungsi tersebut, dapat dinyatakan sebagai penjumlahan sinusoid. Kuncinya terletak pada komposisi amplitude dan fase sinus setiap frekuensi. Begitu pula pada citra. Sebagai gambaran, suatu isyarat berdimensi satu pada Gambar 6.1(a) dapat disusun atas tiga gelombang sinusoid seperti terlihat pada Gambar 6.1(b).

6.3 Fourier 1-D
Transformasi Fourier 1 dimensi adalah proses untuk mengubah sinyal 1 dimensi dari domain waktu menjadi domain frekuensi. Transformasi Fourier ini ditemukan oleh seorang matematikawan Prancis bernama Joseph Fourier pada abad ke-18.
Penerapan Discrete Fourier Transform (DFT) atau alihragam Fourier diskret pada citra berdimensi satu disajikan pada pembahasan berikut. Misalnya, terdapat fungsi f(x) yang terdiri atas N data (f(0), f(1), f(2), f(3), f(4), ..., f(N-1)). Jika dikenakan DFT, akan diperoleh hasil alihragam berupa F(u) berupa

Perhatikan bahwa jumlah data diskret N yang sama di kawasan frekuensi, yang sejalan dengan hukum kelestarian informasi. F(u) diperoleh melalui persamaan:

Pada rumus di depan, j menyatakan √-1. Dengan demikian, hasil transformasi Fourier berupa bilangan kompleks. Adapun alihragam-baliknya (Inverse Transformation) berupa:

Sebagai contoh, terdapat f(x) = (2, 4, 1, 5). Alihragam Fourier-nya seperti berikut.




Gambar 6.2 memperlihatkan citra asli 1D dan hasil transformasi Fourier.

Pada Gambar 6.2, DFT-1 menyatakan transformasi balik dari kawasan frekuensi ke kawasan spasial. Perhatikan bahwa data asli f(x) hanya 4, tetapi hasil alihragam ada 8, seolah ada tambahan informasi.
Sekarang akan ditunjukkan pelaksanaan alihragam-baliknya. Perhatikan cara menghitungnya:





Tampak bahwa f(x) tidak mengandung komponen imajiner seperti aslinya. Berikut adalah contoh fungsi yang digunakan untuk menghitung DFT berdimensi satu.
| 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
n = length(Fx); % Jumlah nilai dalam fungsi Fx
for u = 0 : n - 1
Re(u+1) = 0;
Im(u+1) = 0;
for x = 0 : n - 1
radian = 2 * pi * u * x / n;
cosr = cos(radian);
sinr = -sin(radian);
Re(u+1) = Re(u+1) + Fx(x+1) * cosr;
Im(u+1) = Im(u+1) + Fx(x+1) * sinr;
end
Re(u+1) = Re(u+1) / n;
Im(u+1) = Im(u+1) / n;
end
Program di atas adalah implementasi dari algoritma DFT (Discrete Fourier Transform) 1 dimensi untuk memperoleh transformasi Fourier dari fungsi 1 dimensi Fx.
Pada baris pertama program, dilakukan pengambilan panjang sinyal Fx dengan menggunakan fungsi length() pada Matlab.
Kemudian pada loop pertama, dilakukan iterasi pada setiap nilai frekuensi u dari 0 hingga n-1. Pada setiap iterasi, diinisialisasi variabel Re(u+1) dan Im(u+1) dengan nilai awal 0.
Kemudian, pada loop kedua, dilakukan iterasi pada setiap nilai x dari 0 hingga n-1. Pada setiap iterasi, dilakukan perhitungan nilai cosinus dan sinus dari sudut yang sesuai (radian) menggunakan fungsi cos() dan sin() pada Matlab. Nilai Re(u+1) dan Im(u+1) diupdate dengan mengalikan Fx(x+1) dengan nilai cosinus dan sinus yang sudah dihitung pada loop ini.
Setelah loop kedua selesai, nilai Re(u+1) dan Im(u+1) dibagi dengan n untuk menormalisasi hasil transformasi Fourier yang diperoleh. Proses ini dilakukan pada setiap iterasi loop pertama pada setiap nilai frekuensi u.
Sehingga pada akhir program, variabel Re dan Im akan berisi nilai bagian real dan imajiner dari transformasi Fourier dari sinyal Fx.
Contoh penggunaan fungsi dft1d ditunjukkan di bawah ini. Perhatikan Fx perlu ditranspos.

Hasil di atas sesuai dengan perhitungan manual di depan. Alihragam-baliknya dapat diperoleh melalui fungsi idft1d seperti berikut.
| 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
Fx(u+1) = 0;
for x = 0 : n - 1
radian = 2 * pi * u * x / n;
cosr = cos(radian);
sinr = sin(radian);
Fx(u+1) = Fx(u+1) + Fu(x+1) * (cosr+ j*sinr);
end
end
Fx = real(Fx); % Peroleh bagian real
Program di atas merupakan implementasi dari Transformasi Balik DFT (Inverse DFT) pada satu dimensi. Transformasi Balik DFT digunakan untuk mengembalikan citra yang sudah diubah ke dalam domain frekuensi kembali ke domain spasial.
Pada program tersebut, masukan fungsi DFT yang sudah diubah ke dalam domain frekuensi dinyatakan sebagai variabel Fu, dan keluaran fungsi hasil transformasi balik DFT pada domain spasial dinyatakan sebagai variabel Fx.
Program melakukan iterasi pada setiap sampel frekuensi u, dan menghitung kembali nilai fungsi Fx pada setiap sampel x dengan mengambil kontribusi dari setiap frekuensi. Kontribusi ini diperoleh dengan menggunakan sinus dan kosinus dari sudut dalam radian yang dihitung dengan rumus yang sama dengan Transformasi DFT.
Setelah menghitung kontribusi dari setiap frekuensi, program mengambil bagian real dari nilai Fx yang diperoleh, dan mengembalikan hasil tersebut sebagai keluaran fungsi.
Berikut adalah contoh penggunaan DCT dan alihragam-baliknya:

Perhatikan, argumen pada fungsi idft1d berupa bilangan kompleks, tetapi tidak ada komponen imjinernya atau nilai imajinernya nol. Pengalian dengan j pada Im*j dipakai untuk membentuk bagian imajiner. Hasilnya terlihat sama dengan isi Fx.
6.4 Fourier 2-D
Transformasi Fourier 2 dimensi (2D Fourier Transform) adalah teknik pengolahan citra digital yang memperoleh representasi frekuensi dari sebuah citra dalam domain frekuensi. Dalam pengolahan citra digital, setiap piksel pada citra diperlakukan sebagai fungsi 2 dimensi. Dengan melakukan transformasi Fourier 2D pada fungsi tersebut, kita dapat memperoleh informasi frekuensi dari setiap komponen fungsi. Transformasi Fourier 2D digunakan secara luas dalam berbagai aplikasi pengolahan citra, seperti pengurangan derau (denoising), deteksi tepi, pemampatan data, segmentasi citra, dan sebagainya.
Pada praktiknya, implementasi transformasi Fourier 2D seringkali menggunakan algoritma Fast Fourier Transform (FFT), yang lebih efisien dibandingkan dengan DFT. FFT mengimplementasikan DFT secara cepat dengan memanfaatkan simetri dalam transformasi Fourier. Dalam pengolahan citra digital, FFT digunakan untuk mempercepat pengolahan transformasi Fourier pada citra dengan ukuran besar.
Suatu citra diskret berdimensi dua f(x, y) dapat dinyatakan sebagai deret Fourier, yang dituliskan seperti berikut:

Dalam hal ini, citra berukuran MxN (M baris dan N kolom). Komponen v bernilai dari 0 sampai dengan M-1 dan u bernilai dari 0 sampai dengan N-1. Dalam hal ini, u dan v menyatakan frekuensi, sedangkan nilai F(u, v) dinamakan koefisien Fourier atau spektrum frekuensi diskret. Adapun alihragam-baliknya berupa:

Berdasarkan rumus di atas, setiap piksel akan ditransformasikan dengan kompleksitas berupa O(MN) atau O(N2) jika ukuran citra berupa NxN. Dengan demikian, untuk citra berukuran NxN, kompleksitas berupa O(N4). Tentu saja, untuk ukuran yang besar akan diperlukan waktu yang sangat lama. Itulah sebabnya, dalam praktik cara tersebut dihindari karena terdapat metode lain yang jauh lebih cepat dalam melakukan transformasi. Sekedar untuk kepentingan ilustrasi, alihragam Fourier yang menggunakan Persamaan 6.4 dapat diimplementasikan seperti berikut.
| Program : dft2d.m |
function [Re, Im] = dft2d(berkas)
% DFT2D Digunakan untuk memperoleh DFT dimensi dua.
% Masukan: nama berkas berskala keabuan
% Hasil: Re berisi bagian real dan
% Im berisi bagian imajiner
Fx = double(rgb2gray(imread(berkas)));
[m, n] = size(Fx); % Ukuran citra
% m = jumlah baris
% n = jumlah kolom
t = cputime; % catat waktu mulai
for v = 0 : m -1
for u = 0 : n - 1
Re(v+1, u+1) = 0;
Im(v+1, u+1) = 0;
for y = 0 : m - 1
for x = 0 : n - 1
radian = 2 * pi * (u * x / n + v * y / m);
cosr = cos(radian);
sinr = -sin(radian);
Re(v+1, u+1) = Re(v+1, u+1) + ...
Fx(y+1, x+1) * cosr;
Im(v+1, u+1) = Im(v+1, u+1) + ...
Fx(y+1, x+1) * sinr;
end
end
end
end
e = cputime-t
Fungsi dft2d digunakan untuk mentransformasikan citra berskala keabuan. Contoh penggunaannya misalnya seperti berikut:
>> [Dr, Di] = dft2d(’C:\Image\lena64.png’);
Dengan cara seperti itu, Dr mencatat bagian real dan Di mencatat bagian imajiner. Tabel berikut memberikan contoh waktu pengeksekusian yang dilakukan pada tiga citra dengan ukuran yang berlainan dengan menggunakan fungsi dft2d. Terlihat bahwa semakin besar ukuran citra yang diproses, terjadi peningkatan waktu komputasi yang sangat signifikan.

Pendekatan lain memungkinkan penghitungan baris dan kolom tidak dilakukan sekaligus. Pertama, transformasi berdimensi satu hanya dikenakan pada baris-baris saja. Selanjutnya, hasilnya ditransformasi menurut kolom. Contoh program dalam bahasa C terdapat di Vandevenne (2007).
6.5 Fast Fourier Transform
FFT (Fast Fourier Transform) adalah algoritma untuk melakukan transformasi Fourier cepat dalam jumlah besar. Transformasi Fourier digunakan untuk mengonversi sinyal atau citra dari domain waktu ke domain frekuensi, sehingga memungkinkan analisis lebih lanjut pada sinyal atau citra.
Dalam pengolahan citra digital, FFT digunakan untuk menganalisis frekuensi citra. Citra dalam domain spasial diubah menjadi domain frekuensi menggunakan FFT, yang kemudian dapat dilakukan manipulasi untuk menghasilkan efek tertentu pada citra. Beberapa aplikasi FFT dalam pengolahan citra digital antara lain:
- Filtering: FFT digunakan untuk menghapus noise dari citra dengan cara memfilter frekuensi yang tidak diinginkan dan meninggalkan frekuensi yang diinginkan.
- Kompressi: FFT digunakan dalam teknik kompresi citra seperti JPEG, di mana citra diubah ke dalam domain frekuensi, dikuantisasi, dan kemudian diubah kembali ke domain spasial.
- Deteksi tepi: FFT digunakan untuk mendeteksi tepi pada citra dengan mengidentifikasi perbedaan frekuensi yang tajam antara daerah citra.
- Korelasi: FFT digunakan dalam korelasi citra untuk mencari kecocokan antara dua citra.
Dalam praktiknya, FFT dapat dilakukan dengan cepat pada citra berukuran besar, sehingga menjadi alat yang sangat berguna dalam pengolahan citra digital.
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.



Namun, perlu dictata bahwa penghematan proses komputasi ini hanya dapat terjadi untuk jumlah pikel N = 2n, yaitu 2, 4, 8, 16, dan seterusnya. Untuk citra dengan besar N (dan M) kurang dari angka-angka tersebut dapat dilengkapi dengan piksel-piksel kosong (bernilai intensitas nol). Cara melakukan komputasi dengan FFT dijabarkan oleh Cooley, dkk. (1969). Implementasi dengan Octave berupa fungsi fft dan fft2. Contoh penggunaan fft2 seperti berikut:

Pada contoh di atas, citra bernama lena256.tifditransformasikan menggunakan FFT.
6.6 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.

Citra lena256.tif dan spektrum Fourier-nya diperlihatkan pada Gambar 6.3(a) dan Gambar 6.5(b).


Mengingat nilai dalam spektrum terlalu lebar, penerapan logaritma biasa digunakan hanya untuk kepentingan visualisasi. Sebagai contoh, Gambar 6.3(c) diperoleh melalui:

Penambahan angka 1 dimaksudkan untuk menghindari terjadinya log(0).
Hasil pada Gambar 6.3(c) menunjukkan keadaan yang seperti berulang yang muncul pada setiap pojok dalam kotak frekuensi. Hal ini disebabkan adanya sifat pengulangan pada transformasi Fourier. Dalam hal ini, nilai pada M/2 menuju ke M-1 adalah pengulangan dari titik asal 0 hingga M/2 – 1. Hal ini juga berlaku pada arah mendatar. Berdasarkan sifat ini, untuk kepentingan visualisasi, titik awal (0,0) seringkali diubah agar terletak di tengah-tengah kotak frekuensi, sebagaimana ditunjukkan pada Gambar 6.4.

Hal seperti itu dapat dikerjakan dengan menggunakan fungsi fftshift yang disediakan oleh Octave. Kegunaan fungsi fftshift adalah untuk mengatur agar komponen frekuensi nol diletakkan di tengah-tengah spektrum. Untuk memberikan gambaran fungsi ini, perhatikan contoh berikut.


Jika dikenakan perintah seperti berikut
fftshift(X)
diperoleh hasil berupa:

Gambar 6.5 menunjukkan model penukaran keempat kuadran yang bersebrangan secara diagonal melalui fftshift.

Contoh berikut menunjukkan efek penukaran fftshift pada hasil transformasi Fourier:

Hasilnya dapat dilihat pada Gambar 6.3(d).
6.7 Penapisan pada Kawasan Frekuensi
Sebagaimana telah diutarakan pada Gambar 6.1, penapisan dapat dilakukan 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 diperoleh melalui pengenaan DFT terhadap h(y,x), yang merupakan kernel konvolusi pada kawasan spasial.
Satu hal yang perlu diperhatikan pada kawasan frekuensi, penapisan dapat menimbulkan problem akibat konvolusi. Problem yang dimaksud dikenal dengan nama wraparound error atau spatial aliasing error (Bovik, 2009). Hal ini disebabkan pada kawasan frekuensi terdapat fungsi periodis (yang berulang setelah jarak tertentu) yang membuat gambar akan diulang (seperti efek pengubinan) dan akibatnya membuat interferensi pada konvolusi. Gambar 6.6(a) menunjukkan dua citra yaitu f dan h. Adapun Gambar 6.6(b) menunjukkan operasi konvolusi pada koordinat (m, n). Berdasarkan Gambar 6.6(b), piksel (m, n) dihitung sebagai penjumlahan atas perkalian antara piksel di f dan h. Hasilnya tentu saja mengandung kesalahan yaitu ketika perkalian antara f dan h yang berulang ikut dijumlahkan.

Untuk mengatasi wraparound error, fungsi f dan h dimodifikasi dengan cara memperbesar ukurannya dan bagian yang diperluas diisi dengan nol. Cara perluasan ukuran dan pemberian nilai nol seperti itu dinamakan sebagai zero padding. Gambar 6.7(a) menunjukkan keadaan setelah zero padding dikenakan
pada citra f dan h. Adapun Gambar 6.7(b) menunjukkan bahwa konvolusi pada suatu koordinat piksel tidak lagi mengandung wraparound error.


Gonzales, dkk. (2004) menjelaskan cara menentukan ukuran baru untuk citra f dan h. Misalkan, f berukuran a x b dan h berukuran c x d. Kedua fungsi tersebut diperluas menjadi berukuran p x q. Maka, ukuran untuk p dan q harus memenuhi

dan

Apabila menggunakan FFT, nilai p dan q dipilih sehingga memenuhi
2r
dengan r adalah bilangan bulat. Dalam praktik, nilai p dan q acapkali dibuat sama, yaitu sebesar r. Dengan kata lain, nilai r harus memenuhi persamaan berikut:

Dengan asumsi bahwa ukuran citra f jauh lebih besar daripada citra h, satu pendekatan yang biasa dilakukan untuk memperoleh nilai p dan q untuk kepentingan zero padding menggunakan algoritma seperti berikut.

| Di Octave dan MATLAB, nilai q berdasarkan Algoritma 6.1 dapat diperoleh melalui: nextpow2(2 * max(a, b)) |
Adapun contoh berikut menunjukkan pemakaian zero padding.

Pada contoh di atas, pengaturan 512 didasarkan pada perhitungan untuk zero padding seperti yang telah dibahas di depan, mengingat ukuran citra berupa 250x250. Pada perintah di atas,
Fx = F(1:250, 1:250);
digunakan untuk mengambil citra seperti ukuran citra semula. Gambar 6.8 menunjukkan contoh citra yang diproses dan hasil pemfilteran.


Skrip berikut ditujukan untuk memudahkan dalam menangani penapisan pada kawasan frekuensi melalui FFT.
| Program : filterdft.m |
function F = filterdft(berkas, H)
% FILTERDFT Digunakan untuk melaksanakan pemfilteran
% pada kawasan frekuensi menggunakan FFT.
% Masukan:
% berkas - nama citra
% H - kernel pada kawasan spasial
% Keluaran:
% F - citra yang telah difilter
Fs = double(rgb2gray (imread(berkas)));
[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 pading
Ff = fft2(Fs, p, q);
Hf = fft2(H, p, q);
G = Hf .* Ff;
F = real(ifft2(G));
F = uint8(F(1:a, 1:b));
Program tersebut merupakan implementasi dari pemfilteran pada kawasan frekuensi menggunakan FFT. Berikut adalah penjelasan dari setiap baris program:
function F = filterdft(berkas, H): Membuat sebuah fungsi bernamafilterdftyang memiliki dua parameter masukan yaituberkasyang merupakan nama citra danHyang merupakan kernel pada kawasan spasial.Fs = double(rgb2gray (imread(berkas)));: Membaca citra dengan namaberkasdan mengubah citra tersebut menjadi grayscale. Kemudian, citra grayscale tersebut dikonversi menjadi tipe data double dan disimpan pada variabelFs.[a, b] = size(Fs);: Menentukan ukuran citra dengansize(Fs)dan menyimpan hasilnya pada variabeladanb.r = nextpow2(2 * max(a, b));: Menentukan ukuran yang baru (dalam pangkat 2) untuk perluasan citra dengan memangkatkan 2 pada2 * max(a, b)dan menyimpan hasilnya pada variabelr.p = 2 ^ r;: Menentukan panjang baru untuk perluasan citra dengan memangkatkan 2 padardan menyimpan hasilnya pada variabelp.q = p;: Menentukan lebar baru untuk perluasan citra dengan menyamakan variabelqdengan variabelp.Ff = fft2(Fs, p, q);: Melakukan transformasi Fourier 2 dimensi pada citraFsdengan zero-padding hingga mencapai ukuranpxq, dan menyimpan hasilnya pada variabelFf.Hf = fft2(H, p, q);: Melakukan transformasi Fourier 2 dimensi pada kernelHdengan zero-padding hingga mencapai ukuranpxq, dan menyimpan hasilnya pada variabelHf.G = Hf .* Ff;: Melakukan perkalian antaraFfdanHfpada kawasan frekuensi dan menyimpan hasilnya pada variabelG.F = real(ifft2(G));: Melakukan transformasi Fourier balik 2 dimensi padaG, dan menyimpan bagian real-nya pada variabelF.F = uint8(F(1:a, 1:b));: Mengambil bagian kiri atas dari citra yang telah difilter seukuran dengan citra asli, dan mengubah tipe datanya menjadi unsigned integer 8-bit.
Dengan demikian, program tersebut dapat digunakan untuk melakukan pemfilteran pada citra berdasarkan kernel yang telah ditentukan menggunakan transformasi Fourier dengan zero-padding.
Contoh penggunaan fungsi filterdft:


6.8 Filter Lolos-Rendah (Low Pass Filter)
Low-pass filter adalah jenis filter pada pengolahan citra digital yang digunakan untuk memperhalus citra dan menghilangkan atau mengurangi noise atau detail halus yang tidak diinginkan. Filter ini memungkinkan informasi frekuensi rendah untuk melewati filter, sementara informasi frekuensi tinggi diblokir.
Cara kerja low-pass filter adalah dengan menekan komponen frekuensi tinggi pada citra digital. Filter ini memproses citra digital dengan mengubah nilai pikselnya berdasarkan nilai piksel tetangga dan bobot filter. Bobot filter diterapkan pada piksel tetangga dan kemudian dijumlahkan untuk menghasilkan nilai piksel baru pada lokasi yang sama.
Contoh penerapan low-pass filter adalah dalam pemrosesan citra medis, seperti pada pencitraan resonansi magnetik (MRI) dan tomografi komputer (CT), dimana filter digunakan untuk meningkatkan kualitas citra dan menghilangkan noise. Low-pass filter juga digunakan dalam pengolahan citra untuk memperbaiki citra buram, menghilangkan garis-garis pada citra hasil pemindaian, dan meningkatkan kejelasan pada citra.
Filter lolos-bawah (low-pass filter) adalah filter yang mempunyai sifat dapat meloloskan yang berfrekuensi rendah dan menghilangkan yang berfrekuensi tinggi. Efek filter ini membuat perubahan level keabuan menjadi lebih lembut. Filter ini berguna untuk menghaluskan derau atau untuk kepentingan interpolasi
tepi objek dalam citra. Tiga jenis filter lolos-rendah dilihat pada Tabel 6.1.


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

Skrip berikut menunjukkan suatu fungsi yang ditujukan untuk memfilter citra menggunakan ILPF.
| Program : ilpf.m |
function F = ilpf(berkas, d0)
% ILPF Digunakan untuk melaksanakan pemfilteran
% pada kawasan frekuensi menggunakan ILPF.
% Masukan:
% berkas - nama citra
% d0 - menentukan frekuensi ambang
% Keluaran:
% F - citra yang telah difilter
Fs = double(rgb2gray (imread(berkas)));
[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
ambang = d0 * q;
% 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));
F = uint8(F(1:a, 1:b));
Program ilpf merupakan implementasi dari filter low pass pada pengolahan citra digital dengan menggunakan teknik pemfilteran pada kawasan frekuensi. Program ini melakukan pemfilteran pada citra berkas dengan menggunakan filter ILPF (Ideal Low Pass Filter).
Cara kerja dari filter ILPF adalah dengan menurunkan amplitudo dari frekuensi tinggi dan mempertahankan amplitudo dari frekuensi rendah. Frekuensi tinggi dan rendah dibatasi oleh frekuensi ambang atau cut-off frequency. Frekuensi yang lebih tinggi dari frekuensi ambang akan diblokir atau dibuang, sedangkan frekuensi yang lebih rendah dari frekuensi ambang akan dibiarkan.
Langkah-langkah dalam program ilpf adalah sebagai berikut:
- Membaca citra
berkasdengan menggunakanimreaddan mengubahnya menjadi citra grayscale denganrgb2gray. - Memperoleh ukuran citra
Fsdan menentukan ukuran baru untuk perluasan citra dengannextpow2. - Menentukan jangkauan frekuensi
udanv. - Menghitung jarak antara titik pusat dengan setiap titik frekuensi di domain frekuensi dengan
sqrt. - Memperoleh filter
Hfdengan mengambil nilai 1 (dibiarkan) pada frekuensi yang lebih rendah dari frekuensi ambang dan nilai 0 (dibuang) pada frekuensi yang lebih tinggi dari frekuensi ambang. - Mengaplikasikan filter
Hfpada citraFsdengan melakukan perkalian pada domain frekuensi. - Melakukan transformasi balik dengan
ifft2untuk mendapatkan citra yang telah difilter. - Memotong citra yang telah difilter sesuai dengan ukuran citra asli dengan
uint8.
Output dari program ini adalah citra yang telah difilter, yaitu F.
Contoh pemakaian fungsi ilpf:

Gambar 6.9 merupakan contoh penerapan IDLF untuk berbagai nilai d0 yang diterapkan pada jalan sawah orang.jpg.


Butterworth Low Pass Filter (BLPF) adalah salah satu jenis filter pada pengolahan citra digital yang digunakan untuk menghilangkan frekuensi tinggi pada citra. BLPF bekerja dengan merubah domain citra dari domain spasial ke domain frekuensi dengan menggunakan Transformasi Fourier dan kemudian melakukan pemfilteran pada domain frekuensi.
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

Dalam hal ini, n dinamakan orde filter. Skrip berikut menunjukkan suatu fungsi yang ditujukan untuk memfilter citra menggunakan BLPF.
| Program : blpf.m |
function F = blpf(berkas, d0, n)
% BLPF Digunakan untuk melaksanakan pemfilteran
% pada kawasan frekuensi menggunakan BLPF.
% Masukan:
% berkas - nama citra
% d0 - menentukan frekuensi ambang
% n - menentukan faktor n
% Keluaran:
% F - citra yang telah difilter
Fs = double(rgb2gray (imread(berkas)));
[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 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));
F = uint8(F(1:a, 1:b));
Program di atas merupakan implementasi dari Butterworth Low Pass Filter (BLPF) pada pengolahan citra digital. BLPF merupakan salah satu jenis filter frekuensi yang digunakan untuk memperhalus citra atau mengekstraksi informasi pada frekuensi rendah. Filter ini dapat mengurangi noise pada gambar, serta dapat mempertahankan informasi pada gambar yang dianggap penting.
Penjelasan dari program tersebut adalah sebagai berikut:
- Fungsi
blpfmemiliki tiga input yaituberkasyang merupakan nama citra yang akan diproses,d0yang merupakan frekuensi ambang, dannyang merupakan faktor yang digunakan dalam perhitungan filter. Keluaran dari fungsi ini adalah citra hasil filter. - Citra input dibaca menggunakan fungsi
imreaddan dikonversi ke dalam citra grayscale menggunakan fungsirgb2gray. Ukuran citra yang diperoleh kemudian digunakan untuk menentukan ukuran citra yang telah diperluas menggunakan zero padding. - Jangkauan frekuensi pada citra didefinisikan sebagai
udanv. Indeksudanvyang lebih besar dariq/2danp/2masing-masing dikurangi denganqdanpagar jangkauan frekuensi selalu dalam rentang-q/2sampai(q/2)-1dan-p/2sampai(p/2)-1. - Meshgrid digunakan untuk menghasilkan array 2D yang memuat semua pasangan nilai dari
udanv. - Dari array meshgrid, jarak
D(v,u)dihitung menggunakan rumus Euclidean distance. Jarak ini digunakan untuk membatasi frekuensi pada filter. - Faktor
nyang menentukan bentuk kurva filter Butterworth ditentukan. Faktornmenentukan seberapa curam kurva filter Butterworth dan mempengaruhi efek pemfilteran pada citra. - Frekuensi ambang
ambangdihitung sebagai hasil perkaliand0denganp. Frekuensi ambang ini digunakan sebagai ambang batas frekuensi yang dilewati oleh filter. - Fungsi transfer
Hfdari filter Butterworth dihitung menggunakan persamaan Butterworth Low Pass Filter pada domain frekuensi. Persamaan ini digunakan untuk memperoleh koefisien filter Butterworth. - Citra input kemudian diubah ke dalam domain frekuensi menggunakan transformasi FFT dengan zero padding.
- Citra input yang telah diubah ke dalam domain frekuensi kemudian difilter menggunakan koefisien filter yang telah dihitung.
- Citra hasil filter dihasilkan kembali ke dalam domain spasial menggunakan transformasi FFT dengan zero padding, dan diambil bagian atas kiri dari citra hasil filter dengan ukuran sesuai dengan ukuran citra input.
- Keluaran dari fungsi
blpfadalah citra hasil filter.
Contoh pemakaian fungsi blpf:

Gambar 6.10 dan 6.11 merupakan contoh penerapan IDLF untuk berbagai nilai d0 dan n yang berbeda yang diterapkan pada jalan sawah orang.jpg.





Gaussian Low Pass Filter (GLPF) adalah filter frekuensi yang digunakan dalam pengolahan citra digital untuk mengurangi kebisingan dan memperhalus gambar. GLPF memanfaatkan fungsi Gaussian sebagai kernel filter pada kawasan frekuensi sehingga citra yang dihasilkan menjadi lebih tajam dan jernih. 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

Saat D(v,u) = D0, filter turun menjadi 0.607 terhadap nilai maksimum 1.
Contoh berikut merupakan fungsi yang digunakan untuk melakukan pemfilteran dengan GLPF.
| Program : glpf.m |
function F = glpf(berkas, d0)
% GLPF Digunakan untuk melaksanakan pemfilteran
% pada kawasan frekuensi menggunakan GLPF.
% Masukan:
% berkas - nama citra
% d0 - menentukan frekuensi ambang
% Keluaran:
% F - citra yang telah difilter
Fs = double(rgb2gray (imread(berkas)));
[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 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));
F = uint8(F(1:a, 1:b));
Program di atas merupakan implementasi dari Gaussian low pass filter (GLPF) pada pengolahan citra digital menggunakan transformasi Fourier. GLPF adalah jenis filter frekuensi yang digunakan untuk memperhalus citra dengan menekan komponen frekuensi tinggi dari citra. Filter ini memanfaatkan fungsi Gaussian sebagai filter kernel untuk memperoleh hasil yang diinginkan.
Pada program di atas, pertama-tama dilakukan pembacaan citra dengan menggunakan fungsi imread, kemudian diubah menjadi citra grayscale dengan fungsi rgb2gray. Selanjutnya, ukuran citra diperluas dengan zero padding sehingga ukurannya menjadi bilangan pangkat 2 menggunakan fungsi nextpow2. Kemudian, dilakukan penghitungan jarak frekuensi D dengan menggunakan formula Euclidean distance pada meshgrid yang dihasilkan dari vektor u dan v.
Selanjutnya, dilakukan perhitungan frekuensi ambang dan kernel filter Hf dengan menggunakan rumus fungsi Gaussian pada jarak frekuensi D. Pada program ini, frekuensi ambang d0 digunakan sebagai parameter input. Kemudian, dilakukan transformasi Fourier pada citra asli dengan menggunakan fungsi fft2. Filter kernel Hf kemudian diterapkan pada citra pada frekuensi domain dengan melakukan perkalian dalam domain frekuensi. Kemudian, dilakukan transformasi Fourier balik pada citra hasil filtering menggunakan fungsi ifft2. Hasil akhir citra yang telah difilter kemudian diambil kembali ukurannya yang asli dan diubah menjadi tipe data uint8 untuk dapat ditampilkan.
Secara keseluruhan, program ini melakukan filtering pada citra input menggunakan GLPF dan menghasilkan citra output yang lebih halus dengan komponen frekuensi tinggi ditekan.Filter lolos-tinggi adalah filter yang ditujukan untuk menekan frekuensi
rendah hingga frekuensi tertentu dan meloloskan frekuensi lainnya. Filter ini
memiliki hubungan dengan filter lolos-rendah seperti berikut:
Contoh pemakaian fungsi di glpf:

Gambar 6.12 merupakan contoh penerapan GLPF untuk berbagai nilai d0 yang diterapkan pada jalan sawah orang.jpg.


6.9 Filter Lolos-Tinggi (High Pass Filter)
Filter lolos-tinggi adalah filter yang ditujukan untuk menekan frekuensi rendah hingga frekuensi tertentu dan meloloskan frekuensi lainnya. 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 6.3. Ketiga filter yang tercantum dalam tersebut yaitu IHPF (Ideal high pass filter), BHPF (Butterworth high pass filter), dan GHPF (Gaussian high pass filter).



Contoh berikut menunjukkan implementasi filter BHPF untuk memfilter citra.
| Program : bhpf.m |
function F = bhpf(berkas, d0, n)
% BHPF Digunakan untuk melaksanakan pemfilteran
% pada kawasan frekuensi menggunakan BHPF.
% Masukan:
% berkas - nama citra
% d0 - menentukan frekuensi ambang
% n - menentukan faktor n
% Keluaran:
% F - citra yang telah difilter
Fs = double(rgb2gray (imread(berkas)));
imshow(Fs)
[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 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));
F = uint8(F(1:a, 1:b));
Program di atas adalah implementasi dari High Pass Filter pada citra digital menggunakan Butterworth filter. Berikut adalah penjelasan dari tiap-tiap baris program:
function F = bhpf(berkas, d0, n)
Mendefinisikan fungsi bhpf yang memiliki tiga argumen masukan: nama berkas citra (berkas), frekuensi ambang (d0), dan faktor n.
Fs = double(rgb2gray(imread(berkas))); [a, b] = size(Fs);
Membaca citra dengan nama berkas berkas, dan mengonversi citra ke grayscale. Kemudian menyimpan citra sebagai matriks bilangan bulat 2D dalam variabel Fs, dan menyimpan ukuran citra dalam variabel a dan b.
r = nextpow2(2 * max(a, b)); p = 2 ^ r; q = p;
Menghitung nilai untuk melakukan zero padding pada citra untuk menentukan ukuran baru (p dan q) yang merupakan bilangan pangkat dua dari ukuran citra terbesar (a atau b).
u = 0:(p - 1); v = 0:(q - 1); idx = find(u > q/2); u(idx) = u(idx) - q; idy = find(v > p/2); v(idy) = v(idy) - p; [V, U] = meshgrid(v, u);
Membuat grid untuk koordinat frekuensi (u dan v) dengan meshgrid, dan menghitung indeks untuk grid dengan menggunakan find. Kemudian, menghitung V dan U menggunakan meshgrid dengan v dan u yang telah dikoreksi.
D = sqrt(V.^2 + U.^2);
Menghitung jarak Euclidean (D) antara tiap-tiap koordinat frekuensi dalam U dan V.
if nargin == 2 n = 1; end
Mengecek apakah argumen ketiga (n) telah disediakan oleh pengguna. Jika tidak, maka nilai n diinisialisasi dengan nilai 1.
ambang = d0 * p; Hlr = 1 ./ (1 + (D ./ ambang) .^(2 * n)); % Lolos-rendah Hlt = 1 - Hlr; % Lolos-tinggi
Menghitung filter Butterworth High Pass Filter dengan rumus yang telah dijelaskan sebelumnya. Filter ini memiliki dua bagian: Hlr (lolos-rendah) dan Hlt (lolos-tinggi).
Ff = fft2(Fs, p, q); G = Hlt .* Ff; F = real(ifft2(G)); F = uint8(F(1:a, 1:b));
Melakukan transformasi Fourier 2D pada citra Fs yang telah diperluas dengan fft2. Kemudian, melakukan pemfilteran dengan mengalikan filter Butterworth High Pass Filter Hlt dengan citra yang telah diperluas Ff. Setelah itu, dilakukan transformasi balik Fourier 2D pada hasil pemfilteran dengan ifft2, dan hasil transformasi balik ini diambil bagian paling kiri.
Contoh pemakaian fungsi bhpf:

Gambar 6.13 menunjukkan gambar asli dan hasil pemrosesan dengan perintah di atas.

Hasil pada Gambar 6.13(b) menunjukkan bahwa penerapan BHPF pada citra membuat latarbelakang menjadi hampir hilang, karena nilai intensitas reratanya hilang (menjadi nol).
6.10 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. Nilai a dan b itulah yang dicoba digunakan pada program berikut.
| Program : hfe.m |
function F = hfe(berkas, d0, n)
% HFE Digunakan untuk melaksanakan pemfilteran
% pada kawasan frekuensi menggunakan BHPF
% dan menerapkan HFE (High frequency emphasis).
% Masukan:
% berkas - nama citra
% d0 - menentukan frekuensi ambang
% n - menentukan faktor n
% Keluaran:
% F - citra yang telah difilter
Fs = double(rgb2gray (imread(berkas)));
[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 ambang
Hlr = 1 ./ (1 + (D ./ ambang) .^(2 * n)); % Lolos-rendah
Hlt = 1 - Hlr; % Lolos-tinggi
% Proses HFE
Hfe = 0.5 + 2 * Hlt;
% Transformasi via FFT dengan zero padding
Ff = fft2(Fs, p, q);
% Pemfilteran
G = Hfe .* Ff;
% Transformasi balik
F = real(ifft2(G));
F = uint8(F(1:a, 1:b));
Program Matlab di atas digunakan untuk melakukan pemfilteran pada gambar menggunakan filter High Pass dan High Frequency Emphasis (HFE). Berikut adalah penjelasan singkat mengenai tiap baris program tersebut:
- Function declaration, dengan masukan berupa nama file gambar, frekuensi ambang (d0), dan faktor n.
- Membaca gambar menggunakan imread() dan mengubahnya menjadi grayscale dengan rgb2gray().
- Memperoleh ukuran citra (a dan b).
- Menentukan ukuran baru (p dan q) untuk perluasan citra menggunakan fungsi nextpow2().
- Menentukan jangkauan frekuensi u dan v menggunakan fungsi 0:(p-1) dan 0:(q-1).
- Hitung indeks untuk meshgrid dengan mencari nilai yang lebih besar dari q/2 dan p/2 menggunakan fungsi find() dan mengurangkan nilainya dengan q dan p.
- Peroleh array meshgrid dengan menggunakan fungsi meshgrid().
- Hitung jarak D(v,u) menggunakan fungsi sqrt().
- Menentukan nilai n jika n tidak disebutkan dalam input.
- Hitung frekuensi ambang (ambang) menggunakan d0 dan p.
- Hitung filter BHPF menggunakan persamaan Hlr dengan fungsi .^ untuk operasi pangkat.
- Hitung filter Lolos-tinggi (Hlt) dengan mengurangkan 1 dengan Hlr.
- Hitung filter HFE dengan persamaan Hfe.
- Transformasi gambar menggunakan FFT dengan zero padding menggunakan fungsi fft2().
- Pemfilteran dengan mengalikan filter Hfe dengan hasil transformasi FFT pada gambar asli.
- Transformasi balik menggunakan ifft2().
- Konversi nilai tipe data menjadi uint8 dengan menggunakan fungsi uint8().
- Potong citra yang telah difilter menggunakan F(1:a,1:b).
- Selesai.
Contoh penggunaan fungsi hfe:

Gambar 6.14 menunjukkan gambar asli dan hasil pemrosesan di atas.

Terlihat bahwa terjadi penonjolan citra tanpa menghilangkan latarbelakang/background.