Restorasi
Citra
498
sesungguhnya
citra
yang tidak
Isyarat asli
Derau
Restorasi Citra
499
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.
(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
()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
(11.5)
502
Program : drgaussian.m
Akhir Program
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.
(c) = 25
(b) = 10
(d) = 50
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
(c) = 150
(b) = 10
(d) = 150
Program : drgaussian2.m
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 =
Akhir Program
506
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
Program : drimpuls.m
507
508
end
G = uint8(G);
Akhir Program
(11.6)
Dalam hal ini, z adalah nilai aras keabuan I dan a>0. Reratanya berupa
1
(11.7)
2 = 2
Adapun bentuk PDF dapat dilihat pada Gambar 11.16.
(11.8)
Restorasi Citra
509
p(z)
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
510
%
%
%
%
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
Beberapa contoh hasil penerapan derau eksponensial negatif dapat dilihat pada
Gambar 11.17.
Restorasi Citra
511
(c) a = 0,07
(b) a = 0,1
(d) a = 0,01
() =
(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
= 2
(11.11)
dan
2 = 2
(11.12)
p(x)
(b-1)/a
( 1)!
(11.13)
Restorasi Citra
Program : drgamma.m
Akhir Program
513
514
Beberapa contoh hasil penerapan derau gamma dapat dilihat pada Gambar 11.9.
(b) a = 1, b = 20
(c) a = 4, b = 120
(d) a = 1, b = 50
Restorasi Citra
515
() = () = {
2 /
( ) ()
(11.14)
0, < 0
Dalam hal ini, x adalah nilai aras keabuan. Rerata dihitung dengan menggunakan
rumus
= /(2)
(11.15)
(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
516
= + ln(1 )
(11.17)
Akhir Program
Restorasi Citra
517
Beberapa contoh hasil penerapan derau Rayleigh dapat dilihat pada Gambar 11.11.
(c) a = 1, b = 300
(b) a = 10, b = 90
() = {
(11.18)
518
(11.19)
Varians-nya berupa
2 =
()2
(11.20)
12
Pembangkit bilangan acak dapat dihitung melalui rumus (Gonzalez, dkk., 2004):
= + ( )
(11.21)
Restorasi Citra
Program : druniform.m
Akhir Program
519
520
>>
Beberapa contoh hasil penerapan derau uniform dapat dilihat pada Gambar 11.13.
(b) a = 10, b = 30
(c) a = 10, b = 50
periodis
biasa
terjadi
karena
interferensi
listrik
maupun
Restorasi Citra
521
(b) a = 10, bx = 3, by = 4
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
522
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
Restorasi Citra
523
524
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
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)
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
525
526
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)
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
hasil
g
x
2+6+7+4+1+3+7+5+7
9
42
9
= 4,6667 5
528
Program : filarithmean.m
Akhir Program
Ukuran jendela dapat ditentukan secara bebas dan terarah, misalnya, seperti
berikut:
Restorasi Citra
529
530
(,)
1
(,)
(11.24)
Restorasi Citra
531
g
x
1
+
6
1
+
7
9
1
2
1 1 1 1 1 1
+ + + + + +
4 1 3 7 5 7
= 3,1266 3
532
Akhir Program
Restorasi Citra
533
534
(, ) =
(,) (,)+1
(,) (,)
(11.25)
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
536
Akhir Program
Restorasi Citra
537
538
(, ) =
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
Akhir Program
540
>>
Restorasi Citra
541
(11.27)
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)
Filter median cocok dipakai untuk menghilangkan derau impuls dan derau
eksponensial negatif. Contoh diperlihatkan pada Gambar 11.29.
542
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
G = uint8(G);
Akhir Program
Restorasi Citra
545
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
(, ) = (,) ((, ))
(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
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
548
(d) Filter i 9 x 9
Restorasi Citra
549
Gambar 11.33 Efek filter max pada citra yang tidak diberi derau
550
(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
Restorasi Citra
%
%
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
551
552
Gambar 11.35 Efek filter min pada citra yang tidak diberi derau
Restorasi Citra
553
(, ) =
(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
554
Akhir Program
Restorasi Citra
555
556
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
Frekuensi
Frekuensi
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
558
Program : filnotch.m
Akhir Program
Restorasi Citra
559
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
>>
Program : filterper.m
560
CitraBerderau = drperiodik(CitraBerderau,10,100000,-1);
% Tampilkan citra yang berderau
figure, imshow(CitraBerderau);
%
r
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
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:
562
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)
= 1 0
(11.32)
= 1 0
(11.33)
Restorasi Citra
563
= 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
(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)
564
>> 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
566
Program : inversi.m
Akhir Program
Fungsi inversi memerlukan fungsi lain yaitu fillrb, yang kodenya seperti
berikut.
Restorasi Citra
567
Program : fillrb.m
Akhir Program
(11.37)
568
(11.38)
= [((, ) (, ))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)
Restorasi Citra
569
Program : filwien.m
Akhir Program
570
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
Restorasi Citra
571
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
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)!
1
/
( 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