BAB 11
Restorasi Citra
Setelah bab ini berakhir, diharapkan pemakai memahami berbagai hal berikut yang berhubungan dengan restorasi citra dan mampu mempraktikkannya.
Restorasi citra
Derau dalam citra
Jenis derau
Penghilangan derau
Penghilangan derau di kawasan frekuensi
Filter inversi
Filter Wiener
Ukuran keberhasilan penghilangan derau
11.1 Pengantar Restorasi Citra
Istilah restorasi mempunyai perbedaan makna dengan peningkatan citra.
Peningkatan citra (image enhancement) merupakan istilah yang menyatakan usaha untuk membuat gambar agar lebih baik dari sudut pandang pengolahnya. Hal ini dilakukan misalnya melalui pengubahan kontras dan kecerahan. Berbeda dengan peningkatan citra, restorasi citra merupakan proses untuk membuat citra yang kualitasnya turun akibat adanya tambahan derau agar menjadi mirip dengan keadaan aslinya. Itulah sebabnya, pembahasan restorasi akan dimulai dengan pembahasan derau.
11.2 Derau dalam Citra
Derau sesungguhnya adalah komponen dalam citra yang tidak dikehendaki. Dalam praktik, kehadiran derau tidak dapat dihindari. Sebagai contoh, derau Gaussian biasa muncul pada sebarang isyarat. Derau putih (white noise) biasa menyertai pada siaran televisi yang berasal dari stasiun pemancar yang lemah. Derau butiran biasa muncul dalam film-film fotografi. Derau yang dinamakan ‘garam dan merica’ sering mewarnai citra. Derau garam berwarna putih dan derau garam berwarna hitam. Gambar 11.1 menunjukkan efek derau dalam isyarat satu-dimensi.
Isyarat asli
Derau
Isyarat asli + derau
Gambar 11.1 Derau pada isyarat satu dimensi
Derau dapat dikelompokkan menjadi empat kelas (Acharya dan Ray, 2005).
1. Derau tambahan (additive noise): Derau ini biasa muncul karena sensor yang bekerja tidak sempurna dan memberikan isyarat tambahan terdistribusi Gaussian, yang tidak bergantung pada isyarat asli. Isyarat yang dihasilkan dapat dinyatakan secara matematis seperti berikut:
𝑔(. ) = 𝑓(. ) + 𝑑(. ) (11.1)
Dalam hal ini, g(.) menyatakan isyarat yang telah terkena derau, f(.) menyatakan citra asli, dan d(.) menyatakan derau.
2. Derau perkalian (multiplicative noise): Derau perkalian biasa terjadi pada filem fotografi. Deraunya biasa disebut sebagai derau bercak (speckle noise).
Secara matematis, isyarat yang terkena derau perkalian dapat ditulis seperti berikut:
𝑔(. ) = 𝑓(. ) ∗ 𝑑(. ) (11.2)
Dalam hal ini, g(.) menyatakan isyarat yang telah terkena derau, f(.) menyatakan citra asli, dan d(.) menyatakan derau.
3. Derau impuls (impulse noise): Sensor ataupun saluran data terkadang memberikan derau berbentuk biner (0 atau 1). Derau seperti itu dimodelkan sebagai berikut:
𝑔(. ) = (1 − 𝑝) ∗ 𝑓(. ) + 𝑝 ∗ 𝑑(. ) (11.3)
Dalam hal ini, g(.) menyatakan isyarat yang telah terkena derau, f(.) menyatakan citra asli, d(.) menyatakan derau, dan p menyatakan parameter biner yang nilainya berupa 0 atau 1. Berdasarkan rumus di atas, isyarat asli akan hilang saat p bernilai 1.
4. Derau kuantisasi (quantization noise): Derau kuantisasi termasuk sebagai derau yang bergantung pada isyarat. Hal ini terjadi saat kuantisasi terhadap isyarat dilakukan sebelum dikonversi menjadi isyarat digital. Derau ini dapat mengakibatkan detail citra hilang.
11.3 Jenis Derau
Jenis derau yang umum bervariasi Gaussian atau impuls. Namun, berbagai mode derau yang lain terkadang dibicarakan dalam ranah pengolahan citra dengan tujuan untuk menurunkan kualitas citra untuk kepentingan khusus pengujian proses penghilangan derau.
11.3.1 Derau Gaussian
Derau Gaussian adalah model derau yang memiliki fungsi kerapatan probabilitas (probability density function / PDF) yang diberikan oleh kurva Gaussian. PDF yang mewakili sifat paling acak dalam bentuk satu dimensi seperti berikut:
𝑝(𝑧) = 1
√2𝜋 𝑒−(𝑧−𝜇)22𝜎2 (11.4)
Dalam hal ini, adalah nilai rerata dan adalah deviasi standar (atau akar varians) variabel random. PDF-nya ditunjukkan pada Gambar 11.2.
p(z)
+ z
-
1
√2𝜋𝜎
0,607
√2𝜋𝜎
Gambar 11.2 Fungsi kepadatan probabilitas derau Gaussian
Derau Gaussian dapat dilakukan dengan menggunakan fungsi pembangkit bilangan acak. Sebagai contoh, pada Octave terdapat fungsi bernama randn yang berguna untuk menghasilkan bilangan acak yang terdistribusi secara normal dengan nilai berkisar antara 0 dan 1. Nah, rumus untuk mendapatkan derau Gaussian yang acak dengan deviasi standar sebesar dan rerata sama dengan
adalah seperti berikut:
𝑑 = 𝑟𝑎𝑛𝑑𝑛 ∗ 𝜎 + 𝜇 (11.5)
Apabila berupa nol, rumus di atas dapat disederhanakan menjadi d = randn * .
Contoh penambahan derau pada citra berskala keabuan ditunjukkan pada fungsi drgaussian. Argumen pertama berupa citra berskala keabuan. Argumen kedua bersifat opsional dan menyatakan nilai deviasi standar. Nilai bawaannya berupa 1. Argumen ketiga bersifat opsional dan menyatakan nilai rerata. Nilai bawaannya berupa 0.
Program : drgaussian.m
function [G] = drgaussian(F, sigma, mu)
% DRGAUSSIAN Menghasilkan citra yang telah diberi derau
% menggunakan Gaussian.
% F = citra berskala keabuan
% sigma = standar deviasi fungsi Gaussian
% mu = rerata fungsi Gaussian
if nargin < 3
mu = 0; % Nilai bawaan mu end
if nargin < 2
sigma = 1; % Nilai bawaan deviasi standar end
[m, n] = size(F);
F = double(F);
for i=1 : m for j=1 : nc
derau = randn * sigma + mu;
G(i,j) = round(F(i, j) + derau);
if G(i,j) > 255 G(i,j) = 255;
elseif G(i,j) < 0 G(i,j) = 0;
end end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi drgaussian ditunjukkan di bawah ini.
>> Img = imread('C:\Image\innsbruck.png');
>> imshow(Img)
>> G = drgaussian(Img, 50); imshow(G)
>>
Pada contoh di atas, yang digunakan sebesar 50. Tiga contoh hasil penambahan derau Gaussian pada citra Innsbruck.png ditunjukkan pada Gambar 11.3.
(b) = 10
(c) = 25 (d) = 50
(a) Citra Innsbruck.png
Gambar 11.3 Derau Gaussian untuk tiga nilai deviasi standar ()
Cara seperti di atas berlaku untuk citra berskala keabuan. Kalau dikehendaki, derau Gaussian juga dapat diterapkan pada citra berwarna. Dalam hal ini, derau perlu ditambahkan ke komponen R, G, dan B masing-masing. Contoh penerapan derau Gaussian ditunjukkan pada Gambar 11.4.
(b) = 10
(c) = 150 (d) = 150
(a) Citra bangunan.png
Gambar 11.4 Derau Gaussian pada citra berwarna
Apabila tidak tersedia fungsi yang menghasilkan bilangan acak yang terdistribusi secara normal, fungsi pembangkit bilangan acak yang terdistribusi seragam dapat digunakan. Pada Octave dan MATLAB, tersedia fungsi seperti itu, yaitu rand. Adapun implementasinya seperti berikut.
Program : drgaussian2.m
function [G] = drgaussian2(F, sigma, mu)
% DRGAUSSIAN Menghasilkan citra yang telah diberi derau
% menggunakan Gaussian.
%
% Berdasarkan kode
% Harley R. Myler dan Arthur R. Weeks, 1993
%
% F = citra berskala keabuan
% sigma = standar deviasi fungsi Gaussian
% mu = rerata
if nargin < 3 mu = 0;
end
if nargin < 2 sigma = 10;
end
[m, n] = size(F);
F = double(F);
for i=1 : m for j=1 : n
derau = sqrt(-2 * sigma * sigma * log(1 - rand));
theta = rand * 1.9175345E-4 - 3.14159265;
derau = derau * cos(theta);
derau = derau + mu;
G(i,j) = round(F(i, j) + derau);
if G(i,j) > 255 G(i,j) = 255;
elseif G(i,j) < 0 G(i,j) = 0;
end end end
G = uint8(G);
Akhir Program
11.3.2 Derau Garam dan Merica (Salt & Pepper Noise)
Derau garam dan merica biasa dinamakan sebagai derau impuls positif dan negatif, derau tembakan, atau derau biner. Derau ini biasa disebabkan oleh gangguan yang tiba-tiba dan tajam pada proses perolehan isyarat citra. Bentuknya berupa bintik-bintik hitam atau putih di dalam citra. Gambar 11.5 menunjukkan contoh derau garam dan merica dengan berbagai nilai densitas derau. Derau garam dan merica, sering muncul pada citra yang diperoleh melalui kamera.
(a) Citra Innsbruck.png
(c) Probabilitas = 0,05 (d) Probabilitas = 0,2 (b) Probabilitas = 0,01
Gambar 11.5 Contoh derau garam dan merica untuk berbagai nilai probabilitas
Algoritma untuk membangkitkan derau garam dan merica dapat dilihat di bawah ini.
ALGORITMA 1.1 – Membangkitkan derau garam dan merica Masukan:
f : Citra berskala keabuan berukuran M x N
p : Probabilitas pembangkitan derau (0 s/d 1) Keluaran:
g : Citra yang telah ditambahi dengan derau derauImpuls(f, p):
1. Salin citra f ke g
2. FOR y 1 TO M FOR x 1 TO N
nilai_acak pembangkit_random IF nilai_acak < p / 2
g(y, x) 0 // merica (berwarna hitam) ELSE
IF nilai_acak > p / 2 AND nilai_acak <= p g(y, x) 255 // Garam (berwarna putih) END
END-IF END-FOR END-FOR 3. RETURN g
Skrip untuk membuat derau impuls ditunjukkan di bawah ini.
Program : drimpuls.m
function [G] = drimpuls(F, probabilitas)
% DRIMPULS Menghasilkan citra yang telah diberi derau
% menggunakan fungsi impuls.
% F = citra berskala keabuan
% probabilitas = Probabilitas kemunculan derau
% (0 s/d 1)
if nargin < 2
probabilitas = 0.05; % Nilai bawaan end;
if probabilitas < 0 || probabilitas > 1
error('Nilai probabilitas harus antara 0 s/d 1');
end
[m, n] = size(F);
G = double(F);
for i=1 : m for j=1 : n
nilai_acak = rand;
if nilai_acak <= probabilitas / 2 G(i,j) = 0;
elseif (nilai_acak > probabilitas / 2) && ...
(nilai_acak <= probabilitas) G(i,j) = 255;
end end
end
G = uint8(G);
Akhir Program
Contoh untuk menambahkan derau impuls pada citra:
>> Img = imread('C:\Image\innsbruck.png');
>> imshow(Img)
>> G = drimpuls(Img, 0.005); imshow(G)
>> imshow(Img)
>>
11.3.3 Derau Eksponensial
Derau eksponensial (terkadang dinamakan derau eksponensial negatif) merupakan jenis derau yang dihasilkan oleh laser yang koheren ketika citra diperoleh. Oleh karena itu, derau ini sering disebut sebagai bercak laser (Myler and Weeks, 1993). PDF-nya berupa
𝑝(𝑧) = {𝑎𝑒−𝑎𝑧, 𝑢𝑛𝑡𝑢𝑘 0 ≤ 𝑧 < ~
0, 𝑧 < 0 (11.6)
Dalam hal ini, z adalah nilai aras keabuan I dan a>0. Reratanya berupa 𝜇 =1
𝑎 (11.7)
dan varians berupa 𝜎2 = 1
𝑎2 (11.8)
Adapun bentuk PDF dapat dilihat pada Gambar 11.16.
p(z)
z 1
𝑎
Gambar 11.6 Fungsi kepadatan probabilitas derau eksponensial negatif
Pembangkit derau eksponensial dilakukan dengan menggunakan rumus (Gonzalez, dkk., 2004):
𝑑 = −1
𝑎ln (1 − 𝑟𝑎𝑛𝑑) (11.9)
Dalam hal ini, rand adalah pembangkit bilangan acak yang bersifat seragam.
Implementasinya dapat dilihat di bawah ini.
Program : dreksponensial.m
function [G] = dreksponensial(F, a)
% DREKSPONENSIAL Menghasilkan citra yang telah diberi derau
% menggunakan fungsi eksponensial negatif.
%
% Berdasarkan kode
% Rafael C. Gonzales, Richard E. Woods, dan
% Steven L. Eddins, 2004
%
% F = citra berskala keabuan
% varians = varians yang dikehendaki
if nargin ~= 2
error('Penggunaan: dreksponensial(F, a)');
end
if a <= 0
error('Parameter berupa sebarang bilangan > 0');
end
[m, n] = size(F);
F = double(F);
G = zeros(m, n);
for i=1 : m for j=1 : n
derau = -1/a * log(1 - rand);
G(i,j) = round(F(i,j) + derau);
if G(i,j) > 255 G(i,j) = 255;
end end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi dreksponensial:
>> Img = imread('C:\Image\innsbruck.png');
>> G = dreksponensial(Img, 100); imshow(G)
>>
Beberapa contoh hasil penerapan derau eksponensial negatif dapat dilihat pada Gambar 11.17.
(a) Citra Innsbruck.tif
(c) a = 0,07 (d) a = 0,01
(b) a = 0,1
Gambar 11.7 Contoh derau eksponensial negatif
11.3.4 Derau Gamma
Derau gamma (atau kadang disebut Erlang) merupakan efek penapisan lolos-rendah terhadap citra yang mengandung derau eksponensial sebagai hasil pengambilan citra yang teriluminasi oleh laser yang koheren (Myler dan Weeks, 1993). PDF derau Gamma didefinisikan sebagai berikut (Gonzalez dan Woods, 2002):
𝑝(𝑥) = 𝑎𝑏𝑥𝑏 −1
(𝑏−1) !𝑒−𝑎𝑥 (11.10)
Dalam hal ini, x adalah nilai aras keabuan, a>0, b berupa bilangan bulat positif, dan tanda ! menyatakan faktorial. Rerata dan varians berupa:
𝜇 = 𝑏
𝑎2 (11.11)
dan
𝜎2 = 𝑏
𝑎2 (11.12)
p(x)
(b-1)/a x 𝐾
𝐾 =0,607𝑎(𝑏 − 1)𝑏−1
(𝑏 − 1)! 𝑒−(𝑏−1)
Gambar 11.8 Fungsi kepadatan probabilitas derau Gamma
Pembangkit bilangan acak untuk membangkitkan derau gamma berupa (Gonzalez, dkk., 2004):
𝑥 = 𝐸1+ 𝐸2+ ⋯ + 𝐸𝑏 (11.13)
Dalam hal ini, E adalah bilangan random eksponensial dengan parameter a.
Implementasinya dapat dilihat berikut ini.
Program : drgamma.m
function [G] = drgamma(F, a, b)
% DRGAMMA Menghasilkan citra yang telah diberi derau
% menggunakan fungsi Gamma.
%
% Berdasarkan
% Rafael C. Gonzales, Richard E. Woods, dan
% Steven L. Eddins, 2004
%
% F = citra berskala keabuan
% a dan b = argumen untuk menentukan bentuk kurva
% a > 0 dan b bilangan bulat positif
if nargin ~= 3
error('Penggunaan: drgamma(F, a, b)');
end
if (a <= 0) || (a ~= round(a))
error('Argumen kedua harus berupa integer > 0');
end
if b < 1 || (b ~= round(b))
error('Argumen ketiga harus berupa integer > 0');
end
[m, n] = size(F);
alpha = b;
varians = b / (a * a);
p = sqrt(varians * a ) / 2.0;
F = double(F);
for i=1 : m for j=1 : n k = -1 / a;
derau = 0;
for p=1 : b
derau = derau + k * log(1 - rand);
end
G(i,j) = round(F(i,j)+derau);
if G(i,j) > 255 G(i,j) = 255;
end end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi drgamma:
>> Img = imread('C:\Image\innsbruck.png');
>> G = drgamma(Img, 1,20); imshow(G)
>>
Beberapa contoh hasil penerapan derau gamma dapat dilihat pada Gambar 11.9.
(a) Citra Innsbruck.png
(c) a = 4, b = 120 (d) a = 1, b = 50
(b) a = 1, b = 20
Gambar 11.9 Contoh derau gamma 11.3.4 Derau Rayleigh
Derau Rayleigh mempunyai PDF seperti berikut:
𝑝(𝑥) = 𝑓(𝑥) = {
2
𝑏(𝑧 − 𝑎)𝑒−(𝑧−𝑎)2/𝑏, 𝑧 ≥ 𝑎
0, 𝑧 < 0 (11.14)
Dalam hal ini, x adalah nilai aras keabuan. Rerata dihitung dengan menggunakan rumus
𝜇 = √𝜋/(2𝑎) (11.15)
dan varians berupa
𝜎2 = 𝑏(4−𝜋)
4 (11.16)
Bentuk PDF-nya dapat dilihat pada Gambar 11.10. Derau Rayleigh biasa muncul pada jangkauan radar dan citra bergerak (Myler dan Weeks, 1993).
p(x)
x
0,607 2
𝑏
𝑎 + 𝑏
2
Gambar 11.10 Fungsi kepadatan probabilitas derau Rayleigh
Pembangkit bilangan acak diperoleh melalui (Gonzales, dkk., 2004):
𝑧 = 𝑎 + √𝑏 ln (1 − 𝑟𝑎𝑛𝑑) (11.17)
Implementasi untuk membangkitkan derau Rayleigh dapat dilihat di bawah ini.
Program : drrayleigh.m
function [G] = drrayleigh(F, a, b)
% DRRAYLEIGH Menghasilkan citra yang telah diberi derau
% menggunakan fungsi Rayleigh.
%
% Berdasarkan kode
% Rafael C. Gonzales, Richard E. Woods, dan
% Steven L. Eddins, 2004
%
% F = citra berskala keabuan
% a dan b = paramater untuk menentukan fungsi Rayleigh
if nargin ~= 3
error('Penggunaan: drrayleigh(F, a, b)');
end
if a <= 0 || b <= 0
error('Parameter a atau b berupa sebarang bilangan > 0');
end
[m, n] = size(F);
F = double(F);
G = zeros(m, n);
for i=1 : m for j=1 : n
derau = a + sqrt(-b * log(1 - rand));
G(i,j) = round(F(i,j) + derau);
if G(i,j) > 255 G(i,j) = 255;
end end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi drrayleigh:
>> Img = imread('C:\Image\innsbruck.png');
>> G = drrayleigh(Img, 10, 90); imshow(G)
>>
Beberapa contoh hasil penerapan derau Rayleigh dapat dilihat pada Gambar 11.11.
(a) Citra Innsbruck.png
(c) a = 1, b = 300 (d) a = 10, b = 490
(b) a = 10, b = 90
Gambar 11.11 Contoh derau Rayleigh
11.3.6 Derau Uniform
Derau uniform yaitu dengan peluang sama tinggi memiliki PDF seperti berikut:
𝑝(𝑥) = {
1
𝑏−𝑎, 𝑗𝑖𝑘𝑎 𝑎 ≤ 𝑥 ≤ 𝑏
𝑥, 𝑢𝑛𝑡𝑢𝑘 𝑙𝑎𝑖𝑛𝑛𝑦𝑎 (11.18)
Rerata pada fungsi tersebut berupa 𝜇 =𝑎 +𝑏
2 (11.19)
Varians-nya berupa 𝜎2= (𝑏−𝑎)2
12 (11.20)
Bentuk PDF ditunjukkan pada Gambar 11.12.
p(x)
x 1
𝑏 − 𝑎
𝑎 𝑏
Gambar 11.12 Fungsi kepadatan probabilitas derau uniform
Pembangkit bilangan acak dapat dihitung melalui rumus (Gonzalez, dkk., 2004):
𝑧 = 𝑎 + (𝑏 − 𝑎) ∗ 𝑟𝑎𝑛𝑑 (11.21)
Implementasi untuk membangkitkan derau uniform dapat dilihat di bawah ini.
Program : druniform.m
function [G] = druniform(F, a, b)
% DRRAYLEIGH Menghasilkan citra yang telah diberi derau
% uniform.
%
% Berdasarkan kode
% Rafael C. Gonzales, Richard E. Woods, dan
% Steven L. Eddins, 2004
%
% F = citra berskala keabuan
% a dan b = paramater untuk menentukan fungsi Rayleigh
if nargin ~= 3
error('Penggunaan: drrayleigh(F, a, b)');
end
if a <= 0 || b <= 0
error('Parameter a atau b berupa sebarang bilangan > 0');
end
[m, n] = size(F);
F = double(F);
G = zeros(m, n);
for i=1 : m for j=1 : n
derau = a + (b-a) * rand;
G(i,j) = round(F(i,j) + derau);
if G(i,j) > 255 G(i,j) = 255;
elseif G(i,j) < 0 G(i,j) = 0;
end end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi druniform:
>> Img = imread('C:\Image\innsbruck.png');
>> G = druniform(Img, 1800, 0); imshow(G)
>>
Beberapa contoh hasil penerapan derau uniform dapat dilihat pada Gambar 11.13.
(a) Citra Innsbruck.png
(c) a = 10, b = 50 (d) a = 10, b = 100
(b) a = 10, b = 30
Gambar 11.13 Contoh derau uniform
11.3.7 Derau Periodis
Derau periodis biasa terjadi karena interferensi listrik maupun elektromekanis selama citra diakuisisi. Derau ini biasanya berbentuk sinusoidal.
Sifat periodis dapat berbentuk statisioner yaitu memiliki amplitudo, frekuensi, dan fase yang tetap, tetapi dapat juga nonstasioner dengan nilai amplitudo, frekuensi, dan fase berubah di sepanjang area citra.
(a) Citra pantai.png
(c) a = 10, bx = -3, by = 4 (d) a = 20, bx = 10, by = 10 (b) a = 10, bx = 3, by = 4
Gambar 11.14 Citra dengan derau berupa gelombang sinus
Gambar 11.14 menunjukkan contoh citra yang telah diberi tambahan derau periodis berbentuk sinus. Tambahan derau seperti itu dapat dilakukan dengan menggunakan fungsi drperiodik. Implementasi fungsi tersebut dapat dilihat di bawah ini.
Program : drperiodik.m
function [G] = drperiodik(F, a, bx, by)
% DRPERIODIK Menghasilkan citra yang teklah ditambahi
% derau periodis.
%
% F = Citra berskala keabuan
% b = penegas derau (1, 2, 3, ...)
% ax dan ay menentukan kemiringan derau
if nargin < 4
a = 3; bx = 3; by = 5;
end
[m, n] = size(F);
for i=1:m for j=1:n
X(i,j) = j;
Y(i,j) = i;
end end
derau = a * sin(X/bx + Y/by) + 1;
G = uint8(double(F) + derau);
Akhir Program
Contoh penggunaan fungsi drperiodik:
>> Img = imread('C:\Image\pantai.png');
>> G = drperiodik(Img, 20, 10, 10); imshow(G)
>>
Contoh berikut menggunakan pemanggilan fungsi drperiodik dua arah:
>> Img = imread('C:\image\absam.png');
>> G = drperiodik(Img,10,1,50000);
>> G = drperiodik(G,10,50000,1); imshow(G)
>>
Gambar 11.15 Hasil pengenaan drperiodik dua arah
11.4 Penghilangan Derau
Derau yang ditambahkan ke dalam citra umumnya memiliki spektrum frekuensi yang lebih tinggi daripada komponen citra (Pratt, 2001). Oleh karena itu, filter lolos-rendah dapat digunakan untuk menghilangkan derau.
Secara prinsip, penghilangan derau dapat dilakukan dengan pendekatan yang linear ataupun nonlinear. Penghilangan derau secara linear dapat dilakukan baik pada kawasan spasial maupun frekuensi. Termasuk pemrosesan pada kawasan spasial yaitu penggunaan filter lolos-rendah (Pratt, 2001) ataupun filter rerata aritmetik, filter rerata harmonik, dan filter rerata kontraharmonik (Gonzalez dan Woods, 2002). Pada kawasan frekuensi, filter seperti homomorfik ataupun filter lolos-rendah Butterworth dapat digunakan (Pratt, 2001).
11.4.1 Filter Lolos-Rendah
Penghilangan derau dengan filter lolos-rendah umumnya di ranah spasial dilakukan dengan menggunakan cadar (biasa disebut tanggapan impuls)
berukuran 3x3. Contoh ditunjukkan pada Gambar 11.16. Pada cadar tersebut, semua koefisien telah dinormalisasi sehingga total nilai koefisien adalah 1. Cadar pada Gambar 11.16(b) dan 11.16(c) adalah contoh cadar yang memiliki tanggapan impuls seperti berikut:
𝐻 = [
1 𝑏 1
𝑏 𝑏2 𝑏
1 𝑏 1
] (11.22)
𝐻 =1
9[
1 1 1 1 1 1 1 1 1
] (a)
𝐻 = 1
10[
1 1 1 1 2 1 1 1 1
] (b)
𝐻 = 1
16[
1 2 1 2 4 2 1 2 1
] (c)
Gambar 11.16 Cadar filter lolos-rendah
Contoh pengenaan filter lolos-rendah pada citra yang telah diberi derau ditunjukkan pada Gambar 11.17. Pelaksanaan penapisan dapat dilakukan dengan melakukan konvolusi antara citra dan cadar. Contoh untuk melakukan operasi penghilangan derau Gaussian dengan menggunakan cadar filter lolos-rendah ditunjukkan berikut ini.
>> Img = imread('C:\Image\boneka.png');
>> H = [1 1 1; 1 1 1; 1 1 1] / 9
H =
0.1111 0.1111 0.1111 0.1111 0.1111 0.1111 0.1111 0.1111 0.1111
>> G = drgaussian(Img, 5);
>> K = uint8(konvolusi(G,H)); imshow(K)
>>
Contoh hasil ditunjukkan pada Gambar 11.17(b).
(a) Citra boneka.png yang telah diberi derau Gaussian
(b) 1
9[
1 1 1 1 1 1 1 1 1 ]
(c) 1
10[
1 1 1 1 2 1 1 1 1 ]
(d) 1
16[
1 2 1 2 4 2 1 2 1 ]
Gambar 11.17 Contoh efek filter lolos-rendah pada citra boneka yang mengandung derau Gaussian 11.4.2 Filter Rerata Aritmetik
Filter rerata aritmetik (arithmetic mean filter) dilakukan dengan melakukan perhitungan rerata nilai pada suatu jendela berukuran m x n dan
hasilnya digunakan sebagai nilai piksel pada citra keluaran. Dengan demikian, jika g menyatakan citra yang terkena derau dan 𝑓̂ adalah citra yang deraunya telah dihilangkan, hubungan kedua fungsi tersebut dapat ditulis menjadi
𝑓̂(𝑦, 𝑥) = 1
𝑚𝑛∑(𝑝,𝑞)∈𝑆 𝑔(𝑝, 𝑞)
𝑦𝑥 (11.23)
Filter ini cocok untuk menghilangkan derau uniform dan Gaussian, tetapi akan sedikit mengaburkan citra.
Dalam praktik, pendekatan rerata di atas dapat dilakukan melalui konvolusi antar g dan cadar H ataupun tanpa konvolusi. Dalam hal ini, semua koefisien dalam cadar H bernilai 1
𝑚𝑛. Filter rerata aritmetik tidak lain adalah filter pemerataan yang dibahas di Bagian 4.3.2. Gambar 11.18 menunjukkan gambaran perhitungan untuk memperoleh nilai rerata yang diberikan ke 𝑓̂(𝑦, 𝑥). Adapun Gambar 11.19 menunjukkan contoh citra yang telah diberi derau dan hasil pemrosesan dengan rerata aritmetik.
7 5
3 2
1 4
7 6 7
5
g 𝑓̂
2+6+7+4+1+3+7+5+7
9 = 42
9 = 4,6667 ≈ 5
y y
x x
Gambar 11.18 Contoh pemrosesan dengan filter rerata aritmetik
Contoh berikut merupakan perwujudan untuk melakukan penapisan dengan filter rerata aritmetik.
Program : filarithmean.m
function [G] = filarithmean(F, ukuran)
% FILARITHMEAN Melakukan penghilangan derau dengan
% menggunakan filter rerata aritmetik
% F = Citra berskala keabuan
% ukuran = ukuran jendela
% G = Citra hasil pemrosesan
if nargin < 2 ukuran = 3;
end
[m, n] = size(F);
setengah = floor(ukuran / 2);
F = double(F);
G = zeros(m-2*setengah, n-2*setengah);
for i=1+setengah : m-setengah for j=1+setengah: n-setengah jum = 0;
for p = -setengah : setengah for q = -setengah : setengah jum = jum + F(i+p, j+q);
end end
G(i-setengah, j-setengah) = jum / (ukuran * ukuran);
end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi filarithmean:
>> Img = imread('C:\Image\pantai.png');
>> G = drgaussian(Img, 10);
>> K = filarithmean(G); imshow(K);
>>
Ukuran jendela dapat ditentukan secara bebas dan terarah, misalnya, seperti berikut:
>> K = filarithmean(G, 5);
Pada contoh di atas, ukuran jendela adalah 5 x 5.
Efek pererataan dengan filter rerata aritmetik diperlihatkan pada Gambar 11.19 dan Gambar 11.20. Gambar 11.20 menunjukkan bahwa filter rerata aritmetik gagal mengatasi derau merica jika ukuran jendela yang digunakan kecil.
(a) Citra pantai.png yang telah diberi derau Gaussian dengan = 10
(c) Filter rerata aritmetika 5 x 5 (d) Filter rerata aritmetika 9 x 9 (b) Filter rerata aritmetika 3 x 3
Gambar 11.19 Contoh efek filter rerata aritmetik pada citra yang telah diberi derau Gaussian
(a) Citra pantai.png yang telah diberi derau garam dan merica, p = 0,01
(c) Filter rerata aritmetika 5 x 5 (d) Filter rerata aritmetika 9 x 9 (b) Filter rerata aritmetika 3 x 3
Gambar 11.20 Contoh efek filter rerata aritmetik pada citra yang telah diberi derau garam dan merica 11.4.3 Filter Rerata Harmonik
Filter rerata harmonik (harmonic mean filter), yang termasuk dalam golongan filter nonlinear, biasa digunakan untuk mengatasi derau Gaussian. Pada derau garam dan merica, filter ini dapat digunakan untuk menghilangkan derau garam, tetapi akan gagal kalau diterapkan pada derau merica (Gonzalez dan Woods, 2002).
Operasi dengan filter ini dilakukan dengan menggunakan rumus
𝑓̂(𝑦, 𝑥) = 𝑚𝑛
∑ 1
𝑔(𝑝,𝑞) (𝑝,𝑞)∈𝑆𝑦𝑥
(11.24)
Sebagai contoh, perhitungan dengan rumus di atas ditunjukkan pada Gambar 11.21.
7 5
3 2
1 4
7 6 7
3
g 𝑓̂
9
1 2 + 1
6 + 1
7 + 1
4 + 1
1 + 1
3 + 1
7 + 1
5 +1
7
= 3,1266 ≈ 3
x x
y y
Gambar 11.21 Contoh perhitungan dengan filter rerata harmonik
Contoh berikut merupakan perwujudan untuk melakukan penapisan dengan filter rerata harmonik.
Program : filharmonik.m
function [G] = filharmonik(F, ukuran)
% FILHARMONIK Melakukan penghilangan derau dengan
% menggunakan filter rerata harmonik
% F = Citra berskala keabuan
% ukuran = ukuran jendela
% G = Citra hasil pemrosesan
if nargin < 2 ukuran = 3;
end
[m, n] = size(F);
setengah = floor(ukuran / 2);
F = double(F);
G = zeros(m-2*setengah, n-2*setengah);
for i=1+setengah : m-setengah
for j=1+setengah: n-setengah jum = 0;
for p = -setengah : setengah for q = -setengah : setengah jum = jum + 1 / F(i+p, j+q);
end end
G(i-setengah, j-setengah) = (ukuran * ukuran) / jum;
end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi filharmonik:
>> Img = imread('C:\Image\pantai.png');
>> G = drgaussian(Img, 10);
>> K = filharmonik(G); imshow(K);
>>
Ukuran jendela dapat ditentukan, misalnya, seperti berikut:
>> K = filharmonik(G, 5);
Pada contoh di atas, ukuran jendela adalah 5 x 5.
Efek filter rerata harmonik diperlihatkan pada Gambar 11.22 dan Gambar 11.23. Gambar 11.23 menunjukkan bahwa filter rerata harmonik tidak dapat mengatasi derau merica. Bintik warna putih dapat dihilangkan, tetapi bintik warna hitam justru lebih ditonjolkan.
(a) Citra kartun.tif yang telah diberi derau Gaussian, = 10
(c) Filter rerata harmonik 5 x 5 (d) Filter rerata harmonik 9 x 9 (b) Filter rerata harmonik 3 x 3
Gambar 11.22 Contoh efek filter rerata harmonik pada citra yang diberi derau Gaussian
(a) Citra kartun.png yang telah diberi derau garam dan merica, p = 0,01
(c) Filter rerata harmonik 5 x 5 (d) Filter rerata harmonik 9 x 9 (b) Filter rerata harmonik 3 x 3
Gambar 11.23 Contoh efek filter rerata harmonik pada citra yang diberi derau garam dan merica 11.4.4 Filter Rerata Kontraharmonik
Penapisan dengan filter rerata kontraharmonik (contraharmonic mean filter) dilaksanakan dengan menggunakan rumus berikut:
𝑓̂(𝑦, 𝑥) = ∑ 𝑔(𝑝,𝑞)
(𝑝,𝑞)∈𝑆𝑦𝑥 𝑄+1
∑(𝑝,𝑞)∈𝑆𝑦𝑥 𝑔(𝑝,𝑞 )𝑄 (11.25)
Dalam hal ini, Q dinamakan orde filter.
Filter rerata kontraharmonik cocok digunakan untuk menghilangkan derau garam dan merica, tetapi tidak dapat dilakukan sekaligus. Dalam hal ini, nilai Q positif berguna untuk menghilangkan derau merica dan nilai Q negatif berguna
untuk membuang derau garam (Gonzalez dan Woods, 2002). Sebagai contoh, perhitungan pada filter rerata kontraharmonik ditunjukkan pada Gambar 11.24.
7 5
3 2
1 4
7 6 7
6
g f̂
22+62+72+42+12+39+72+52+72 2+6+7+4+1+3+7+5+7 =238
42 = 5,6667 ≈ 6
y y
x x
Q=1
Gambar 11.24 Ilustrasi perhitungan dengan filter rerata kontraharmonik
Contoh berikut merupakan perwujudan untuk melakukan penapisan dengan filter rerata kontraharmonik.
Program : filkontra.m
function [G] = filkontra(F, ukuran, orde)
% FILKONTRA Melakukan penghilangan derau dengan
% menggunakan filter rerata kontraharmonik
% F = Citra berskala keabuan
% ukuran = ukuran jendela
% orde = orde filter
% G = Citra hasil pemrosesan
if nargin < 2 ukuran = 3;
end
if nargin < 3 orde = 2;
end
[m, n] = size(F);
setengah = floor(ukuran / 2);
F = double(F);
G = zeros(m-2*setengah, n-2*setengah);
for i=1+setengah : m-setengah for j=1+setengah: n-setengah atas = 0;
bawah = 0;
for p = -setengah : setengah for q = -setengah : setengah
atas = atas + F(i+p, j+q)^orde;
bawah = bawah + F(i+p, j+q)^(orde-1);
end end
G(i-setengah, j-setengah) = atas / bawah;
end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi filkontra:
>> Img = imread('C:\Image\boneka.png');
>> G = drgaussian(Img, 5);
>> K = filkontra(G,3); imshow(K);
>>
Ukuran jendela dapat ditentukan. Misalnya, seperti berikut:
>> K = filkontra(G, 5);
Pada contoh di atas, ukuran jendela adalah 5 x 5.
Efek pererataan dengan filter rerata kontraharmonik diperlihatkan pada Gambar 11.25 dan Gambar 11.26. Pada Gambar 11.26, salah satu derau garam atau merica dapat dihilangkan dengan mengatur nilai orde filter berupa bilangan positif atau negatif.
(a) Citra boneka.png yang telah diberi derau Gaussian, = 10
(c) Filter rerata kontraharmonik 5 x 5 Orde = 2
(d) Filter rerata kontraharmonik 3 x 3 Orde = 10
(b) Filter rerata kontraharmonik 3 x 3 Orde = 2
Gambar 11.25 Contoh efek filter rerata kontraharmonik pada citra boneka yang diberi derau Gaussian
(a) Citra boneka.png yang telah diberi derau garam dan merica, p =0,01
(c) Filter rerata kontraharmonik 3 x 3 Orde = -2 (menghilangkan garam)
(b) Filter rerata kontraharmonik 3 x 3 Orde = 2 (Menghilangkan merica)
Gambar 11.26 Contoh efek filter rerata kontraharmonik pada citra boneka yang diberi derau garam dan merica 11.4.5 Filter Rerata Yp
Filter rerata Yp (Yp mean filter) adalah jenis filter nonlinear yang didefinisikan sebagai berikut (Myler dan Weeks, 1993):
𝑓̂(𝑦, 𝑥) = √∑(𝑝,𝑞)∈𝑆𝑦𝑥 𝑔(𝑝,𝑞)𝑄 𝑚 𝑛 1/𝑄
(11.26)
Dalam hal ini, parameter Q menentukan orde filter, m dan n menyatakan ukuran jendela. Filter ini berguna untuk menghilangkan derau Gaussian.
Contoh berikut merupakan perwujudan untuk melakukan penapisan dengan filter rerata Yp.
Program : filyp.m
function [G] = filyp(F, ukuran, orde)
% FILYP Melakukan penghilangan derau dengan
% menggunakan filter rerata Yp
% F = Citra berskala keabuan
% ukuran = ukuran jendela
% orde = orde filter
% G = Citra hasil pemrosesan
if nargin < 2 ukuran = 3;
end
if nargin < 3 orde = 2;
end
[m, n] = size(F);
setengah = floor(ukuran / 2);
F = double(F);
G = zeros(m-2*setengah, n-2*setengah);
for i=1+setengah : m-setengah for j=1+setengah: n-setengah jum = 0;
for p = -setengah : setengah for q = -setengah : setengah
jum = jum + F(i+p, j+q)^orde / (ukuran * ukuran);
end end
G(i-setengah, j-setengah) = jum ^ (1/orde);
end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi filyp:
>> Img = imread('C:\Image\innsbruck.png');
>> G = drgaussian(Img, 10);
>> K = filyp(G,3,2); imshow(K);
>>
Ukuran jendela dapat ditentukan, misalnya seperti berikut:
>> K = filyp(G, 5);
Pada contoh di atas, ukuran jendela adalah 5 x 5.
Efek pererataan dengan filter rerata Yp diperlihatkan pada Gambar 11.27.
(a) Citra innsbruck.png yang telah diberi derau Gaussian
(c) Filter rerata Yp 5 x 5, Orde = 5 (d) Filter rerata Yp 9 x 9, Orde = -5 (b) Filter rerata Yp 3 x 3, Orde = 2
Gambar 11.27 Contoh efek filter rerata Yp pada citra yang diberi derau Gaussian 11.4.6 Filter Median
Sebagaimana telah dijelaskan pada Bagian 4.3.3, filter median dapat dipakai untuk menghilangkan derau dalam citra. Filter ini menggunakan nilai
median piksel-piksel di dalam jendela sebagai keluaran 𝑓̂. Jadi, filter median dapat ditulis sebagai berikut:
𝑓̂(𝑦, 𝑥) = 𝑚𝑒𝑑𝑖𝑎𝑛(𝑝,𝑞 )∈𝑆
𝑦𝑥(𝑔(𝑝, 𝑞)) (11.27)
Ilustrasi filter median ditunjukkan pada Gambar 11.28.
7 5
3 2
1 4
7 6 7
5
g f̂
1, 2, 3, 4, 5, 6, 7, 7, 7 1 2 3 4 5 6 7 8 9
y y
x x
Pengurutan
Indeks
Median (di tengah) Gambar 11.28 Contoh filter median
Filter median cocok dipakai untuk menghilangkan derau impuls dan derau eksponensial negatif. Contoh diperlihatkan pada Gambar 11.29.
(a) Citra innsbruck.png yang telah diberi derau garam dan merica, = 10
(c) Filter median 5 x 5 (d) Filter median 9 x 9 (b) Filter median 3 x 3
Gambar 11.29 Efek penghilangan derau impuls menggunakan filter median
Contoh berikut merupakan perwujudan untuk melakukan penapisan dengan filter median.
Program : filmed.m
function [G] = filmed(F, ukuran)
% FILMED Melakukan penghilangan derau dengan
% menggunakan filter median.
% F = Citra berskala keabuan
% ukuran = ukuran jendela
% orde = orde filter
% G = Citra hasil pemrosesan
if nargin < 2 ukuran = 3;
end
[m, n] = size(F);
setengah = floor(ukuran / 2);
F = double(F);
G = zeros(m-2*setengah, n-2*setengah);
Nilai = zeros(1,ukuran * ukuran);
for i=1+setengah : m-setengah for j=1+setengah: n-setengah indeks = 1;
for p = -setengah : setengah for q = -setengah : setengah Nilai(indeks) = F(i+p, j+q);
indeks = indeks + 1;
end end
indeks = indeks - 1; % jumlah data
% Urutkan data pada array Nilai for p = 2: indeks
x = Nilai(p);
% Sisipkan x ke dalam data[1..p-1]
q = p - 1;
ketemu = 0;
while ((q >= 1) && (~ketemu)) if (x < Nilai(q))
Nilai(q+1) = Nilai(q);
q = q - 1;
else
ketemu = 1;
end
Nilai(q+1) = x;
end end
% Gunakan nilai median
G(i-setengah, j-setengah) = …
Nilai(floor(ukuran * ukuran/2) + 1);
end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi filmed:
>> Img = imread('C:\Image\innsbruck.png');
>> G = drimpuls(Img, 0.01); imshow(G)
>> K = filmed(G); imshow(K);
>>
Ukuran jendela dapat ditentukan seperti berikut:
>> K = filmed(G, 5);
Pada contoh di atas, ukuran jendela adalah 5 x 5.
Contoh filter median pada citra yang tidak diberi derau dapat dilihat pada Gambar 11.30. Tampak bahwa tekstur agak melembut. Sebagai akibatnya, detail pada citra agak tersamarkan.
(a) Citra boneka.png
(b) Filter median 3 x 3
Gambar 11.30 Efek filter median pada citra yang tidak diberi derau
11.4.7 Filter Max
Filter max atau filter maksimum adalah filter yang mencari nilai tertinggi pada jendela dan menggunakannya sebagai nilai untuk citra keluaran. Rumusnya sebagai berikut:
𝑓̂(𝑦, 𝑥) = 𝑚𝑎𝑥(𝑝,𝑞 )∈𝑆
𝑦𝑥(𝑔(𝑝, 𝑞)) (11.28)
Filter max berguna untuk mendapatkan bagian cerah pada citra. Sebagai akibatnya, dengan menggunakan filter ini, derau merica dapat disingkirkan.
Sebagai contoh, perhitungan pada filter max diberikan pada Gambar 11.31.
7 5
3 2
1 4
7 6 7
7
g f̂
7
1 2 3 4 5 6 7 8 9
y y
x x
Bilangan terbesar
Gambar 11.31 Ilustrasi filter max
Contoh berikut merupakan perwujudan untuk melakukan penapisan dengan filter max.
Program : filmax.m
function [G] = filmax(F, ukuran)
% FILMAX Melakukan penghilangan derau dengan
% menggunakan filter max.
% F = Citra berskala keabuan
% ukuran = ukuran jendela
% orde = orde filter
% G = Citra hasil pemrosesan
if nargin < 2 ukuran = 3;
end
[m, n] = size(F);
setengah = floor(ukuran / 2);
G = zeros(m-2*setengah, n-2*setengah);
for i=1+setengah : m-setengah for j=1+setengah: n-setengah maks = 0;
for p = -setengah : setengah for q = -setengah : setengah if F(i+p,j+q) > maks maks = F(i+p,j+q);
end end end
G(i-setengah, j-setengah) = maks;
end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi filmax:
>> Img = imread('C:\Image\innsbruck.png');
>> G = drimpuls(Img, 0.01);
>> K = filmax(G); imshow(K);
>>
Ukuran jendela dapat ditentukan seperti berikut:
>> K = filmax(G, 5);
Pada contoh di atas, ukuran jendela adalah 5 x 5.
Efek filter max terhadap citra yang mengandung derau garam dan merica diperlihatkan pada Gambar 11.32. Penerapan filter max terhadap citra yang tidak diberi efek derau ditunjukkan pada Gambar 11.33.
(a) Citra innsbruck.png yang telah diberi derau garam dan merica, = 10
(c) Filter max 5 x 5 (d) Filter i 9 x 9
(b) Filter max 3 x 3
Gambar 11.32 Efek filter max pada citra yang diberi derau impulsif (garam dan merica)
(a) Citra boneka.png
(b) Filter max 3 x 3 Warna hitam berkurang
Gambar 11.33 Efek filter max pada citra yang tidak diberi derau
11.4.8 Filter Min
Filter min atau filter minimum adalah filter yang mencari nilai terendah pada jendela dan menggunakannya sebagai nilai untuk citra keluaran. Rumusnya sebagai berikut:
𝑓̂(𝑦, 𝑥) = 𝑚𝑖𝑛(𝑝,𝑞 )∈𝑆
𝑦𝑥(𝑔(𝑝, 𝑞)) (11.29)
Filter min berguna untuk mendapatkan bagian tergelap dalam citra. Sebagai hasilnya, dengan menggunakan filter ini, derau garam dapat disingkirkan. Sebagai contoh, perhitungan pada filter min ditunjukkan pada Gambar 11.34.
7 5
3 2
1 4
7 6 7
1
g f̂
1
1 2 3 4 5 6 7 8 9
y y
x x
Bilangan terkecil
Gambar 11.34 Ilustrasi filter min
Contoh berikut merupakan perwujudan untuk melakukan penapisan dengan filter min.
Program : filmin.m
function [G] = filmin(F, ukuran)
% FILMIN Melakukan penghilangan derau dengan
% menggunakan filter min.
% F = Citra berskala keabuan
% ukuran = ukuran jendela
% orde = orde filter
% G = Citra hasil pemrosesan
if nargin < 2 ukuran = 3;
end
[m, n] = size(F);
setengah = floor(ukuran / 2);
G = zeros(m-2*setengah, n-2*setengah);
for i=1+setengah : m-setengah for j=1+setengah: n-setengah terkecil = 255;
for p = -setengah : setengah for q = -setengah : setengah if terkecil > F(i+p,j+q) terkecil = F(i+p,j+q);
end end end
G(i-setengah, j-setengah) = terkecil;
end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi filmin:
>> Img = imread('C:\Image\boneka.png');
>> K = filmin(Img); imshow(K);
>>
Hasilnya ditunjukkan pada Gambar 11.35.
Ukuran jendela dapat ditentukan seperti berikut:
>> K = filmin(G, 5);
(a) Citra boneka.tif
(b) Filter min 3 x 3 Warna hitam bertambah
Gambar 11.35 Efek filter min pada citra yang tidak diberi derau
11.4.9 Filter Titik-Tengah
Filter titik-tengah (midpoint filter) adalah filter yang mencari nilai tengah pada jendela dan menggunakannya sebagai nilai keluaran. Filter cocok untuk menangani derau Gaussian ataupun uniform. Rumusnya sebagai berikut:
𝑓̂(𝑦, 𝑥) = 𝑚𝑎𝑥(𝑝,𝑞)∈𝑆𝑦𝑥(𝑔(𝑝,𝑞 ))+𝑚𝑖𝑛(𝑝,𝑞)∈𝑆𝑦𝑥(𝑔(𝑝,𝑞 ))
2 (11.30)
Sebagai contoh, perhitungan pada filter titik tengah ditunjukkan pada Gambar 11.36.
7 5
3 2
1 4
7 6 7
4
g f̂
y y
x x
Maksimum = 7 Minimum = 1
Titik tengah = (maksimum + minimum) / 2 = 4
Gambar 11.36 Ilustrasi filter titik tengah
Contoh berikut merupakan perwujudan untuk melakukan penapisan dengan filter titik tengah.
Program : filmid.m
f function [G] = filmid(F, ukuran)
% FILMID Melakukan penghilangan derau dengan
% menggunakan filter titik tengah.
% F = Citra berskala keabuan
% ukuran = ukuran jendela
% orde = orde filter
% G = Citra hasil pemrosesan
if nargin < 2 ukuran = 3;
end
[m, n] = size(F);
setengah = floor(ukuran / 2);
G = zeros(m-2*setengah, n-2*setengah);
for i=1+setengah : m-setengah for j=1+setengah: n-setengah terkecil = 255;
terbesar = 0;
for p = -setengah : setengah for q = -setengah : setengah if terkecil > F(i+p,j+q) terkecil = F(i+p,j+q);
end
if terbesar < F(i+p,j+q) terbesar = F(i+p,j+q);
end end end
G(i-setengah, j-setengah) = round(...
(terbesar + terkecil) / 2);
end end
G = uint8(G);
Akhir Program
Contoh penggunaan fungsi filmid:
>> Img = imread('C:\Image\innsbruck.png');
>> G = drgaussian(Img, 10);
>> K = filmid(G,3,2); imshow(K);
>>
Ukuran jendela dapat ditentukan seperti berikut:
>> K = filmid(G, 5);
Pada contoh di atas, ukuran jendela adalah 5 x 5.
Efek filter titik tengah diperlihatkan pada Gambar 11.37.
(a) Citra innsbruck.png yang telah diberi derau Gaussian, = 10
(c) Filter titik tengah 5 x 5 (d) Filter titik tengah 9 x 9 (b) Filter titik tengah 3 x 3
Gambar 11.37 Contoh efek filter titik tengah
11.5 Penghilangan Derau di Kawasan Frekuensi
Derau periodis dapat dihilangkan atau dikurangi dengan menggunakan penapisan di kawasan frekuensi. Dalam hal ini, filter yang dapat digunakan yaitu band-reject, band-pass, dan notch (Gonzalez dan Woods, 2002). Namun, dari ketiga filter tersebut, filter notch mempunyai karakteristik yang menarik, karena
dapat dipakai untuk menghapus derau periodis pada citra. Filter notch berguna untuk menolak atau meloloskan frekuensi-frekuensi pada suatu frekuensi pusat.
Filter ini sebenarnya adalah filter band-reject yang memiliki pita sempit (bentuk filter band-reject ditunjukkan pada Gambar 11.38).
Amplitudo
Frekuensi
Amplitudo
Frekuensi
(b) Filter band-reject (a) Filter band-pass
Gambar 11.38 Filter band-reject dan filter band-pass
Derau yang bersifat berulang seringkali terlihat sebagai bintik yang cerah pada citra kawasan frekuensi dibandingkan pada citra aslinya. Sebagai contoh dapat dilihat pada Gambar 11.39(d), yang ditandai dengan lingkaran merah. Nah, apabila bintik-bintik seperti itu dihilangkan, derau pun akan tereduksi. Hal itu ditunjukkan pada Gambar 11.39(e).
(a) Citra absam.png
(c) Citra diberi derau periodis (d) Bintik cerah (b) Spektrum citra absam.png
(e) Hasil penapisan (f) Bintik cerah dihapus
Gambar 11.39 Ilustrasi penghilangan derau periodis di kawasan frekuensi Fungsi bernama filnotch berikut berguna untuk mendapatkan fungsi transfer yang akan melakukan penghapusan pada frekuensi tertentu.