Anda di halaman 1dari 78

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

498

Pengolahan Citra Teori dan Aplikasi

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

Isyarat asli + derau

Derau

Gambar 11.1 Derau pada isyarat satu dimensi

Restorasi Citra

499

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.

500

Pengolahan Citra Teori dan Aplikasi

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:
() =

()2
22

(11.4)

Dalam hal ini, adalah nilai rerata dan adalah deviasi standar (atau akar
varians) variabel random. PDF-nya ditunjukkan pada Gambar 11.2.

Restorasi Citra

501

p(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.

502

Pengolahan Citra Teori dan Aplikasi

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)
>>

Restorasi Citra

503

Pada contoh di atas, yang digunakan sebesar 50. Tiga contoh hasil penambahan
derau Gaussian pada citra Innsbruck.png ditunjukkan pada Gambar 11.3.

(a) Citra Innsbruck.png

(c) = 25

(b) = 10

(d) = 50

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.

504

Pengolahan Citra Teori dan Aplikasi

(a) Citra bangunan.png

(c) = 150

(b) = 10

(d) = 150

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;

Restorasi Citra

505

end
if nargin < 2
sigma = 10;
end
[m, n] = size(F);
F = double(F);
for i=1 : m
for j=1 : n
derau =
theta =
derau =
derau =

sqrt(-2 * sigma * sigma * log(1 - rand));


rand * 1.9175345E-4 - 3.14159265;
derau * cos(theta);
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.

506

Pengolahan Citra Teori dan Aplikasi

(a) Citra Innsbruck.png

(c) Probabilitas = 0,05

(b) Probabilitas = 0,01

(d) Probabilitas = 0,2

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

Restorasi Citra

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

507

508

Pengolahan Citra Teori dan Aplikasi

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


1

2 = 2
Adapun bentuk PDF dapat dilihat pada Gambar 11.16.

(11.8)

Restorasi Citra

509

p(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

510

%
%
%
%

Pengolahan Citra Teori dan Aplikasi

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.

Restorasi Citra

511

(a) Citra Innsbruck.tif

(c) a = 0,07

(b) a = 0,1

(d) a = 0,01

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)!

(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:

512

Pengolahan Citra Teori dan Aplikasi

= 2

(11.11)

dan

2 = 2

(11.12)

p(x)

(b-1)/a

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.

Restorasi Citra

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

513

514

Pengolahan Citra Teori dan Aplikasi

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.

(b) a = 1, b = 20

(a) Citra Innsbruck.png

(c) a = 4, b = 120

(d) a = 1, b = 50

Gambar 11.9 Contoh derau gamma


11.3.4 Derau Rayleigh
Derau Rayleigh mempunyai PDF seperti berikut:

Restorasi Citra

515

() = () = {

2 /

( ) ()

(11.14)

0, < 0

Dalam hal ini, x adalah nilai aras keabuan. Rerata dihitung dengan menggunakan
rumus
= /(2)

(11.15)

dan varians berupa


2 =

(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)
2
0,607

+
2

Gambar 11.10 Fungsi kepadatan probabilitas derau Rayleigh

Pembangkit bilangan acak diperoleh melalui (Gonzales, dkk., 2004):

516

Pengolahan Citra Teori dan Aplikasi

= + 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:

Restorasi Citra

517

>> 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

(b) a = 10, b = 90

(d) a = 10, b = 490

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)

518

Pengolahan Citra Teori dan Aplikasi

Rerata pada fungsi tersebut berupa


=

(11.19)

Varians-nya berupa
2 =

()2

(11.20)

12

Bentuk PDF ditunjukkan pada Gambar 11.12.


p(x)

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.

Restorasi Citra

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)

519

520

Pengolahan Citra Teori dan Aplikasi

>>

Beberapa contoh hasil penerapan derau uniform dapat dilihat pada Gambar 11.13.

(b) a = 10, b = 30

(a) Citra Innsbruck.png

(c) a = 10, b = 50

(d) a = 10, b = 100

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.

Restorasi Citra

(a) Citra pantai.png

(c) a = 10, bx = -3, by = 4

521

(b) a = 10, bx = 3, by = 4

(d) a = 20, bx = 10, by = 10

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

522

Pengolahan Citra Teori dan Aplikasi

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)
>>

Restorasi Citra

523

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)

524

Pengolahan Citra Teori dan Aplikasi

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
= [ 2
1

1
]
1

(11.22)

1
1
= 9 [1
1

1
1
1

1
1]
1

(a)

1
1
= 10 [1
1

1
2
1

1
1]
1

(b)

1
[2
16
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

Restorasi Citra

>> G = drgaussian(Img, 5);


>> K = uint8(konvolusi(G,H)); imshow(K)
>>

Contoh hasil ditunjukkan pada Gambar 11.17(b).

525

526

Pengolahan Citra Teori dan Aplikasi

(a) Citra boneka.png yang telah


diberi derau Gaussian

1
[
1
9
1

1
1
1

1
1]
1

(c)

1
[1
10
1

1
2
1

1
1]
1

(d)

1
[
2
16
1

2
4
2

1
2]
1

(b)

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

Restorasi Citra

527

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

. 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.

g
x

2+6+7+4+1+3+7+5+7
9

42
9

= 4,6667 5

Gambar 11.18 Contoh pemrosesan dengan filter rerata aritmetik

Contoh berikut merupakan perwujudan untuk melakukan penapisan dengan


filter rerata aritmetik.

528

Pengolahan Citra Teori dan Aplikasi

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:

Restorasi Citra

529

>> 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

(b) Filter rerata aritmetika 3 x 3

(d) Filter rerata aritmetika 9 x 9

Gambar 11.19 Contoh efek filter rerata aritmetik


pada citra yang telah diberi derau Gaussian

530

Pengolahan Citra Teori dan Aplikasi

(a) Citra pantai.png yang telah diberi


derau garam dan merica, p = 0,01

(c) Filter rerata aritmetika 5 x 5

(b) Filter rerata aritmetika 3 x 3

(d) Filter rerata aritmetika 9 x 9

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)

Restorasi Citra

531

Sebagai contoh, perhitungan dengan rumus di atas ditunjukkan pada Gambar


11.21.

g
x

1
+
6

1
+
7

9
1
2

1 1 1 1 1 1
+ + + + + +
4 1 3 7 5 7

= 3,1266 3

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

532

Pengolahan Citra Teori dan Aplikasi

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.

Restorasi Citra

533

(a) Citra kartun.tif yang telah diberi


derau Gaussian, = 10

(b) Filter rerata harmonik 3 x 3

(c) Filter rerata harmonik 5 x 5

(d) Filter rerata harmonik 9 x 9

Gambar 11.22 Contoh efek filter rerata harmonik


pada citra yang diberi derau Gaussian

534

Pengolahan Citra Teori dan Aplikasi

(a) Citra kartun.png yang telah diberi


derau garam dan merica, p = 0,01

(b) Filter rerata harmonik 3 x 3

(c) Filter rerata harmonik 5 x 5

(d) Filter rerata harmonik 9 x 9

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

Restorasi Citra

535

untuk membuang derau garam (Gonzalez dan Woods, 2002). Sebagai contoh,
perhitungan pada filter rerata kontraharmonik ditunjukkan pada Gambar 11.24.

g
x

Q=1
22 +62 +72 +42 +12 +39 +72 +52 +72
2+6+7+4+1+3+7+5+7

238
42

= 5,6667 6

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);

536

Pengolahan Citra Teori dan Aplikasi

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.

Restorasi Citra

(a) Citra boneka.png yang telah diberi


derau Gaussian, = 10

(c) Filter rerata kontraharmonik 5 x 5


Orde = 2

537

(b) Filter rerata kontraharmonik 3 x 3


Orde = 2

(d) Filter rerata kontraharmonik 3 x 3


Orde = 10

Gambar 11.25 Contoh efek filter rerata kontraharmonik


pada citra boneka yang diberi derau Gaussian

538

Pengolahan Citra Teori dan Aplikasi

(a) Citra boneka.png yang telah diberi


derau garam dan merica, p =0,01

(b) Filter rerata kontraharmonik 3 x 3


Orde = 2 (Menghilangkan merica)

(c) Filter rerata kontraharmonik 3 x 3


Orde = -2 (menghilangkan garam)

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.

Restorasi Citra

539

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);

540

Pengolahan Citra Teori dan Aplikasi

>>

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

(b) Filter rerata Yp 3 x 3, Orde = 2

(c) Filter rerata Yp 5 x 5, Orde = 5

(d) Filter rerata Yp 9 x 9, Orde = -5

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

Restorasi Citra

541

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.

g
x

Pengurutan
1, 2, 3, 4, 5, 6, 7, 7, 7
1 2 3 4 5 6 7 8 9

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.

542

Pengolahan Citra Teori dan Aplikasi

(a) Citra innsbruck.png yang telah diberi


derau garam dan merica, = 10

(b) Filter median 3 x 3

(c) Filter median 5 x 5

(d) Filter median 9 x 9

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

Restorasi Citra

543

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

544

Pengolahan Citra Teori dan Aplikasi

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.

Restorasi Citra

545

(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:

546

Pengolahan Citra Teori dan Aplikasi

(, ) = (,) ((, ))

(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.
f

g
x

Bilangan
terbesar

7
1 2 3 4 5 6 7 8 9

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);

Restorasi Citra

547

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.

548

Pengolahan Citra Teori dan Aplikasi

(a) Citra innsbruck.png yang telah diberi


derau garam dan merica, = 10

(c) Filter max 5 x 5

(b) Filter max 3 x 3

(d) Filter i 9 x 9

Gambar 11.32 Efek filter max pada citra yang diberi


derau impulsif (garam dan merica)

Restorasi Citra

549

(a) Citra boneka.png


Warna hitam
berkurang

(b) Filter max 3 x 3

Gambar 11.33 Efek filter max pada citra yang tidak diberi derau

550

Pengolahan Citra Teori dan Aplikasi

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.

g
x

Bilangan
terkecil

1
1 2 3 4 5 6 7 8 9

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

Restorasi Citra

%
%

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);

551

552

Pengolahan Citra Teori dan Aplikasi

(a) Citra boneka.tif


Warna hitam
bertambah

(b) Filter min 3 x 3

Gambar 11.35 Efek filter min pada citra yang tidak diberi derau

Restorasi Citra

553

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:

(, ) =

(,) ((,))+(,) ((,))

(11.30)

Sebagai contoh, perhitungan pada filter titik tengah ditunjukkan pada Gambar
11.36.

g
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

554

Pengolahan Citra Teori dan Aplikasi

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);
>>

Restorasi Citra

555

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

(b) Filter titik tengah 3 x 3

(c) Filter titik tengah 5 x 5

(d) Filter titik tengah 9 x 9

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

556

Pengolahan Citra Teori dan Aplikasi

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

Amplitudo

Amplitudo

filter band-reject ditunjukkan pada Gambar 11.38).

Frekuensi

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).

Restorasi Citra

557

(a) Citra absam.png

(b) Spektrum citra absam.png

(c) Citra diberi derau periodis

(d) Bintik cerah

(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.

558

Pengolahan Citra Teori dan Aplikasi

Program : filnotch.m

function H = filnotch(a, b, d0, x, y, n)


% FILNOTCH Digunakan untuk memperoleh fungsi transfer
%
filter notch
%
Masukan:
%
a = tinggi
%
b = lebar
%
d0 - menentukan frekuensi yang akan dihapus
%
n = orde filter
%
Keluaran:
%
H - Fungsi transfer filter notch
% ----------------------------------------------% Menentukan n kalau n tidak disebutkan
if nargin < 6
n = 1;
end
% Menentukan jangkauan frekuensi u dan v
u = 0:(a - 1);
v = 0:(b - 1);
% Hitung indeks untuk meshgrid
idx = find(u > b/2);
u(idx) = u(idx) - b;
idy = find(v > a/2);
v(idy) = v(idy) - a;
% Peroleh array meshgrid
[V, U] = meshgrid(v, u);
% Hitung jarak D(v,u)
D = sqrt(V.^2 + U.^2);
% Hitung fungsi transfer filter lolos-rendah
%
dengan menggunakan Butterworth
Hlpf = 1./(1 + (D./d0) .^ (2*n));
% Peroleh fungsi transfer filter lolos-tinggi
Hhpf = 1 - Hlpf;
% Lakukan penggeseran secara melingkar
H = circshift(Hhpf, [y-1 x-1]);

Akhir Program

Restorasi Citra

559

Contoh penggunaan fungsi filnotch:


>> filnotch(5,5,10,1, 160)
ans =
0.009901

0.019608

0.047619

0.047619

0.019608

0.038462

0.047619

0.074074

0.074074

0.047619

0.038462

0.047619

0.074074

0.074074

0.047619

0.009901

0.019608

0.047619

0.047619

0.019608

0.000000

0.009901

0.038462

0.038462

0.009901

>>

Pada contoh di atas,


ukuran fungsi transfer yang dihasilkan berukuran 5x5 (nilai aktual berupa
ukuran citra yang telah diperluas di bagian kanan dan bawah);
radius frekuensi sebesar 10;
posisi x sebesar 1 dan posisi y sebesar 160, yang menyatakan pusat
frekuensi.

Dengan berbekal filter notch, penghapusan derau periodis dilakukan dengan


cara seperti yang ditunjukkan pada skrip berikut.

Program : filterper.m

% FILTERPER Mengurangi derau periodis.


%
Spesifik pada citra absam dengan
%
tambahan derau seperti terlihat di bawah ini.
close all;
Img = imread('C:\Image\absam.png');
[a, b] = size(Img);
% Kenakan derau vertikal dan horizontal
CitraBerderau = drperiodik(Img,10,1,10000000);

560

Pengolahan Citra Teori dan Aplikasi

CitraBerderau = drperiodik(CitraBerderau,10,100000,-1);
% Tampilkan citra yang berderau
figure, imshow(CitraBerderau);
%
r
p
q

Menentukan ukuran baru untuk perluasan citra


= nextpow2(2 * max(a, b));
= 2 ^ r;
= p;

% Buat filter notch


H1 = filnotch(p, q,
H2 = filnotch(p, q,
H3 = filnotch(p, q,
H4 = filnotch(p, q,

10,
10,
10,
10,

1, 165);
165, 1);
1, 860);
862, 1);

% Hitung FFT
F = fft2(double(CitraBerderau),p,q);
% Kenakan keempat filter notch
F_frek = F .* H1 .* H2 .* H3 .* H4;
% Ubah ke kawasan spasial
F_hasil = real(ifft2(F_frek));
% Buang tambahan pada baris dan kolom
F_hasil = F_hasil(1:size(CitraBerderau,1), ...
1:size(CitraBerderau,2));
figure, imshow(F_hasil,[]);
% Tampilkan citra berderau
Fc=fftshift(F);
Fcf=fftshift(F_frek);
% Menampikan spektrum citra asli dan citra hasil penapisan
S1=log(1+abs(Fc));
S2=log(1+abs(Fcf));
figure, imshow(S1,[])
figure, imshow(S2,[])

Akhir Program

Kunci penghilangan derau periodis terletak pada kode berikut:


H1 = filnotch(p, q, 10, 1, 165);
H2 = filnotch(p, q, 10, 165, 1);
H3 = filnotch(p, q, 10, 1, 860);
H4 = filnotch(p, q, 10, 862, 1);

Restorasi Citra

561

Dalam hal ini, p dan q menyatakan tinggi dan lebar citra setelah diperluas.
Berdasarkan keempat fungsi transfer tersebut, konvolusi pada kawasan frekuensi
dilakukan melalui:
F_frek = F .* H1 .* H2 .* H3 .* H4;
Nah, yang menjadi perhatian di sini adalah: Bagaimana menentukan nilai
koordinat frekuensi pada H1 hingga H4? Jawabannya, pusat frekuensi masingmasing diperoleh dengan menentukan letak bintik cerah yang ditandai dengan
lingkaran merah pada Gambar 11.39(d). Untuk menentukan lokasi frekuensi
tersebut, peranti pada jendela yang dihasilkan imshow dapat dimanfaatkan.
Caranya, pada MATLAB, letakkan penunjuk mouse ke ikon yang ditunjukkan
pada Gambar 11.40. Selanjutnya, klik pada bintik cerah yang lokasinya ingin
diketahui. Langkah ini akan memunculkan tampilan semacam berikut:

. Lalu, catatlah nilai X dan Y-nya. Kemudiaan, lakukan


pula pencatatan frekuensi (0,0) yang terletak di tengah. Catat pula nilai X dan Ynya. Pada Octave, letakkan penunjuk mouse pada bintik cerah. Dengan sendirinya,
nilai X dan Y ditampilkan di bagian bawah.

562

Pengolahan Citra Teori dan Aplikasi

Gambar 11.40 Ikon untuk memulai pencarian lokasi bintik cerah

Perhitungan

selanjutnya

yang

perlu

dilakukan

adalah

dengan

memperhatikan letak kuadran dari bintik cerah. Perhatikan Gambar 11.41. Apabila
bintik cerah berada di Kuadran I, perhitungan untuk mendapatkan pusat frekuensi
sebagai berikut:
= 1 0,

= 1 +

(11.31)

Perhitungan untuk mendapatkan pusat frekuensi di kuadran II sebagai berikut:


= 1 0,

= 1 0

(11.32)

Perhitungan untuk mendapatkan pusat frekuensi di kuadran III sebagai berikut:


= 1 +

= 1 0

(11.33)

Restorasi Citra

563

Perhitungan untuk mendapatkan pusat frekuensi pada kuadran IV sebagai berikut:


= 1 +

= 1 +

(11.34)

Kuadran IV

Kuadran I
(x4,y4)

(x4,y3)

Kuadran III

Frekuensi
(0,0)

(x0,y0) Kuadran II
p

(x2,y2)

(x1,y1)
Bintik cerah

Gambar 11.41 Kuadran penentuan pusat frekuensi bintik cerah


11.6 Filter Inversi
Sebagaimana telah diketahui, pada kawasan frekuensi, suatu citra ditapis
dengan menggunakan rumus seperti berikut:
= .

(11.35)

Dalam hal ini, G adalah hasil penapisan pada DFT, F adalah DFT citra asal, dan H
adalah DFT filter. Secara matematis, Persamaan 11.35 dapat ditulis menjadi
= /

(11.36)

Persamaan di atas menyatakan bahwa apabila G dan H diketahui, F dapat


dihitung. Namun, dalam praktik, apakah persamaan seperti itu bermakna? Untuk
mengetahui jawabannya, cobalah untuk mempraktikkan perintah-perintah berikut:

564

Pengolahan Citra Teori dan Aplikasi

>> inversi('C:\Image\pantai.png',0.3);
>>

Angka 0.3 pada perintah di atas dipakai untuk mengatur ambang frekuensi pada
penapisan dengan filter lolos-rendah Butterworth. Hasilnya ditunjukkan pada
Gambar 11.42. Gambar 11.42(c) menunjukkan bahwa dengan menggunakan filter
inversi dimungkinkan untuk mendapatkan citra asli dengan hasil yang bagus.
Namun, jika ambang frekuensi diubah menjadi 0,1, hasilnya menjadi tidak cocok
lagi (Gambar 11.42(e)) meskipun citra hasil penapisan lolos-rendah masih terlihat
bagus. Hal inilah yang mengisyaratkan bahwa penggunaan filter inversi terlalu
riskan. Kegagalan seperti pada Gambar 11.42(e) terjadi manakala terdapat
elemen-elemen di dalam matriks Butterworth yang bernilai sangat kecil.
Karena bersifat sebagai pembagi, nilai yang sangat kecil akan menimbulkan hasil
berupa nilai yang sangat besar, yang akan mendominasi keluaran.

Restorasi Citra

565

(a) Citra pantai.png

(b) Hasil penapisan dengan ambang


frekuensi = 0,3

(c) Hasil filter inversi gambar b

(d) Hasil penapisan dengan ambang


frekuensi = 0,15

(e) Hasil filter inversi gambar d

Gambar 11.42 Gambaran filter inversi

Perlu diketahui, kode fungsi inversi adalah seperti berikut.

566

Pengolahan Citra Teori dan Aplikasi

Program : inversi.m

function [Fb] = inversi(berkas, d)


% INVERSI Digunakan untuk melihat efek inversi
%
penapisan citra pada kawasan frekuensi.
%
Argumen berkas adalah nama berkas yang diuji,
%
sedangkan d menentukan ambang frekuensi.
Img=imread(berkas);
[a,b] = size(Img);
%
r
p
q

Peroleh ukuran untuk kepentingan perluasan citra


= nextpow2(2 * max(a, b));
= 2 ^ r;
= p;

% Proses untuk memperoleh citra yang ditapis


Ff = fft2(Img,p,q);
H = fillrb(Img, d, 2);
Fh = Ff .* H;
Fa = abs(ifft2(Fh));
Fa=uint8(255*mat2gray(Fa));
Fa = Fa(1:a, 1:b);
% Menggunakan citra yang ditapis untuk kepentingan inversi
Fi = fft2(Fa,p,q) ./ H;
Fb = abs(ifft2(Fi));
Fb=uint8(255*mat2gray(Fb));
Fb = Fb(1:a, 1:b);
% Tampilkan citra asli dan hasil pemrosesan
close all;
figure, imshow(Img);
figure, imshow(Fa);
figure, imshow(Fb);

Akhir Program

Fungsi inversi memerlukan fungsi lain yaitu fillrb, yang kodenya seperti
berikut.

Restorasi Citra

567

Program : fillrb.m

function H=fillrb(F, d0, n)


% FILLRB Digunakan untuk membentuk fungsi transfer
%
filter lolos-rendah Butterworth.
%
F = citra berskala keabuan
%
d0 = ambang frekuensi (0 s/d 1)
%
n = orde filter
[a, b] = size(F);
%
r
p
q

%Peroleh ukuran citra

Menentukan ukuran baru untuk perluasan citra


= nextpow2(2 * max(a, b));
= 2 ^ r;
= 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
H = exp(-(D.^2) ./ (2 * ambang ^ 2));

Akhir Program

11.7 Filter Wiener


Contoh pada filter inversi di depan mengabaikan derau. Apabila derau
disertakan, Persamaan 11.35 perlu diubah menjadi
= . +

(11.37)

568

Pengolahan Citra Teori dan Aplikasi

dengan D adalah derau. Selanjutnya, persamaan di atas dapat ditulis menjadi

(11.38)

Persamaan di atas menunjukkan bahwa persoalan untuk mendapatkan citra asli


tidak hanya melibatkan permasalahan pembagian dengan filter H tetapi juga
permasalahan untuk mengatasi derau. Kenyataannya, derau dapat membuat filter
inversi tidak berguna manakala derau mendominasi keluaran.
Untuk mengurangi sensitivitas derau pada filter inversi, berbagai
pendekatan untuk melakukan restorasi citra telah dilakukan. Secara umum,
pendekatan tersebut dinamakan sebagai filter least square. Salah satu filter yang
tergolong sebagai filter least square yaitu filter Wiener atau terkadang disebut
sebagai filter minimum mean square error.
Filter Wiener yang diusulkan pertama kali oleh N. Wiener pada tahun 1942
dilaksanakan dengan meminimumkan kesalahan kuadrat rerata antara citra ideal
dan citra terestorasi. Apabila f adalah citra ideal dan f adalah citra terestorasi,
kesalahan kuadrat reratanya berupa
1

= [((, ) (, ))2 ]
=1 =1((, ) (, )) (11.39)

dengan M adalah tinggi citra dan N adalah lebar citra. Solusi atas problem di atas
dikenal dengan nama filter Wiener. Dalam kawasan frekeuensi, solusi untuk filter
Wiener berupa (McAndrew, 2004):
2

|(,)|
1
(, ) [(,) |(,)|2 +] (, )

(11.40)

dengan K adalah suatu konstanta. Nilai konstanta tersebut dipakai untuk


melakukan hampiran terhadap derau. Sebagai contoh, jika varians (2) derau
diketahui, K dapat diisi dengan 2. Jika varians tidak diketahui, nilai K harus
dicoba-coba untuk mendapatkan hasil yang terbaik.

Restorasi Citra

569

Di Octave, Persamaan 11.40 dapat dihitung dengan mudah. Contoh


ditunjukkan pada skrip berikut.

Program : filwien.m

function [Fb] = filwien(berkas, d, k)


% FILWIEN Digunakan untuk melihat efek filter Wiener
%
Argumen berkas adalah nama berkas yang diuji,
%
d menentukan ambang frekuensi, dan k adalah
%
kosntanta.
Img=imread(berkas);
[a,b] = size(Img);
%
r
p
q

Peroleh ukuran untuk kepentingan perluasan citra


= nextpow2(2 * max(a, b));
= 2 ^ r;
= p;

% Proses untuk memperoleh citra yang ditapis


Ff = fft2(Img,p,q);
H = fillrb(Img, d, 2);
Fh = Ff .* H;
Fa = abs(ifft2(Fh));
Fa = uint8(255*mat2gray(Fa));
Fa = Fa(1:a, 1:b);
% Menggunakan citra yang ditapis untuk kepentingan inversi
Fi = fft2(Fa,p,q) .* abs(H).^2 ./ (abs(H) .^ 2 + k) ./ H;
Fb = abs(ifft2(Fi));
Fb = uint8(255*mat2gray(Fb));
Fb = Fb(1:a, 1:b);
% Tampilkan citra asli dan hasil pemrosesan
close all;
figure, imshow(Img);
figure, imshow(Fa);
figure, imshow(Fb);

Akhir Program

Skrip di atas adalah hasil modifikasi atas inversi.m. Perbedaan pertama


terletak pada keberadaan argumen k. Perbedaan kedua terletak pada pernyataan
Fi = fft2(Fa,p,q) .* abs(H).^2 ./ (abs(H) .^ 2 + k) ./ H;

570

Pengolahan Citra Teori dan Aplikasi

Pernyataan di atas adalah implementasi Persamaan 11.40.


Contoh penggunaan fungsi filwien ditunjukkan di bawah ini:
>> filwien('C:\Image\pantai.png',0.17, 1);

Perhatikan bahwa dengan menggunakan nilai 0.17, filter inversi gagal melakukan
restorasi, tetapi filter Wiener dapat melakukan restorasi.
11.8 Ukuran Keberhasilan Penghilangan Derau
Pengamatan baik tidaknya suatu pendekatan untuk melakukan restorasi
citra biasa dilakukan dengan menggunakan mata. Namun, cara seperti itu bersifat
subjektif. Agar biasa diukur secara kuantitatif, keberhasilan penghilangan derau
dapat dilakukan dengan menggunakan
1

2
=
=1 =1( (, ) (, ))

(11.41)

Dalam hal ini, fa adalah citra sebelum terkena derau dan fb adalah citra yang telah
direstorasi. Semakin kecil nilai MSE, kinerja restorasi citra semakin baik.
Contoh berikut adalah implementasi untuk menghitung MSE.

Program : msecitra.m

function [nilai] = msecitra(F1, F2)


% MSECITRA Digunakan untuk menghitung MSE (mean square error)
%
citra F1 dan F2.
[a1, b1] = size(F1);
[a2, b2] = size(F2);
if (a1 == a2) || (b1 == b2)
Fa = double(F1); Fb = double(F2);
else
deltaA = abs(a1-a2);
deltaB = abs(b1-b2);
if rem(deltaA,2)==1 || rem(deltaB,2)==1

Restorasi Citra

571

error('Ukuran kedua citra tidak cocok');


end
deltaA = abs(floor((a1-a2) / 2));
deltaB = abs(floor((b1-b2) / 2));
if (a1-a2 > 0) && (b1-b2 > 0)
m = a2; n = b2;
Fa = double(F1(1+deltaA:a1-deltaA,
1+deltaB:b1-deltaB));
Fb = double(F2);
else
m = a1; n = b1;
Fa = double(F1);
Fb = double(F2(1+deltaA:a2-deltaA,
1+deltaB:b2-deltaB));
end
end
nilai = 0;
for i=1 : m
for j=1 : n
nilai = nilai + (Fa(i,j) - Fb(i,j))^2;
end
end
nilai = nilai / (m * n);

Akhir Program

Berikut adalah contoh untuk menghitung MSE citra asli dan citra hasil restorasi:
>> Img = imread('C:\Image\pantai.png');
>> G = drgaussian(Img,3,10);
>> K = filarithmean(G,3);
>> msecitra(Img,K)
ans = 140.39
>>

Contoh di atas digunakan untuk merestorasi citra pantai.png yang dikenai derau
Gaussian dengan jendela 3 x 3 dan = 10. Selanjutnya, citra yang ternau derau
tersebut ditapis dengan filter rerata aritmetik. Hasilnya (K) dibandingkan dengan
citra asli (Img).

572

Pengolahan Citra Teori dan Aplikasi

Latihan
1. Jelaskan perbedaan antara peningkatan citra dengan restorasi citra.
2. Sebutkan empat jenis derau menurut kelas dan berikan penjelasan secara
singkat masing-masing.
3. Gambarkan fungsi kerapatan probabilitas untuk derau-derau berikut.
(a) Derau Gaussian
(b) Derau eksponensial negatif
(c) Derau Gamma
(d) Derau Raylight
4. Apa yang disebut dengan derau-derau berikut?
(a) Derau Garam dan Merica
(b) Derau periodis.
5. Gonzalez dan Wood mendefinisikan derau Gamma sebagai berikut
() =

(1)!

Adapun Myler dan Weeks mendefinisikan sebagai:


() =

1
/
( 1)!

Tunjukkan bahwa kedua rumus tersebut sebenarnya sama saja.


6. Jelaskan bahwa derau eksponensial merupakan bentuk khusus untuk derau
Gamma, yakni jika b = 1.

Restorasi Citra

573

7. Tunjukkan bahwa pernyataan berikut benar, Filter Wiener tidak lain adalah
filter inversi jika K pada Persamaan 11.40 berupa nol. Buktikan pula dengan
memberikan nilai K sama dengan nol pada saat menguji filtrwien.
8. Berikan derau Gaussian pada citra boneka.png dengan = 10 dan ukuran
jendela 3 x 3. Kemudian, cobalah hilangkan derau dengan menggunakan filter
median, max, min, titik tengah, rerata aritmetik, dan rerata Yp. Manakah yang
terbaik berdasarkan ukuran MSE?
9. Jelaskan bahwa pemanggilan
msecitra(Img,K)
dan
msecitra(K,Img)
memberikan hasil yang sama.

574

Pengolahan Citra Teori dan Aplikasi

Anda mungkin juga menyukai