BAB IV : IMPLEMENTASI
4.1 Implementasi Algoritma Wang-Zhang
Implementasi algoritma Wang-Zhang digunakan untuk melakukan penipisan citra aksara Jawa. Berikut ini adalah pseudocode dari algoritma Wang-Zhang yang dijadikan acuan untuk membuat program penipisan citra aksara Jawa.
Inisialisasi, yaitu melakukan penghitungan jumlah contour loop(m), nilai first, dan nilai prev.
Implementasi mencari nilai m Mencari nilai m:
Mencari jumlah karakter
1. input matrix Q. set nilai daerah=-1. Jumlah_karakter=0 2. cek apakah ada piksel obyek (hitam) pada citra masukan
2.a jika ya, ubah tiap piksel obyek (hitam) dengan daerah. daerah = daerah-1 2.b jika tidak jumlah =0
3. cek apakah ada piksel obyek (hitam) lainnya
3.a jika ya, tandai tiap piksel obyek(hitam) dengan daerah. daerah = daerah-1 3.b jika tidak lakukan langkah 5
4. lakukan langkah 3 sampai tidak ada piksel obyek(hitam) 5 jumlah_karakter= (nilai daerah pada citra) -1
Mencari nilai komponen obyek
1. set nilai daerah = -1. Set komponen_obyek=0 2. cek apakah ada piksel putih pada citra obyek
2.a jika ya, ubah nilai obyek(putih) tersebut dengan daerah. daerah=daerah - 1 2.b jika tidak komponen_obyek=0
3. cek apakah ada piksel obyek (putih) lainnya
3.a jika ya, tandai tiap piksel obyek(putih) dengan daerah. daerah = daerah-1 3.b jika tidak lakukan langkah 5
4. lakukan langkah 3 sampai tidak ada piksel obyek(hitam) 5 komponen _obyek= (nilai daerah pada citra) -1
m=jumlah_karakter(komponen _obyek-1)
Implementasi mencari nilai first dan prev implementasi first(i,j)
1. input matrix Q
2. cari piksel obyek(hitam) pertama di matrix Q 3. set i=koordinat x dr piksel pertama
4 set j= koordinat y dr piksel pertama
Implementasi prev(i,j) 1 inisial first(i,j)
2. cek apakah nilai Q(i-1,j+1) == obyek 2.a jika ya prev(i-1,j+1)
2.b jika tidak lakukan langkah 3 3 cek apakah nilai Q(i-1,j) == obyek
3.a jika ya prev(i-1,j)
3.b jika tidak lakukan langkah 4 4 cek apakah nilai Q(i-1,j-1) == obyek
4.a jika ya prev(i-1,j-1)
4.b jika tidak lakukan langkah 5 5 cek apakah nilai Q(i,j-1) == obyek
3.a jika ya prev(i,j-1)
3.b jika tidak lakukan langkah 6 6 cek apakah nilai Q(i+1,j-1) == obyek
3.b jika tidak lakukan langkah 7 7 cek apakah nilai Q(i+1,j) == obyek
3.a jika ya prev(i+1,j)
3.b jika tidak lakukan langkah 8 8 cek apakah nilai Q(i+1,j+1) == obyek
3.a jika ya prev(i+1,j+1)
3.b jika tidak lakukan langkah 9 9 prev(i,j+1)
Implementasi successor
1. input matrix Q . Inisial first(i,j). set nilai p_x=I ; set nilai p_y=j; 2. inisial prev(i,j). set nilai x_x=I ; set nilai x_y=j;
3. cek apakah nilai p_x == x_x
3.1 Jika ya lakukan langkah 3.1.1, jika tidak lakukan langkah 3.1.2 3.1.1 cek apakah p_y > x_y, jika ya lakukan langkah 3.1.1.1
3.1.1.1 cek apakah Q(p_x-1, p_y-1) == obyek(hitam) 3.1.1.1.1 jika ya, z_x= p_x-1 ; z_y= p_y-1; 3.1.1.1.2 jika tidak, lakukan langkah 3.1.1.2 3.1.1.2 cek apakah Q(p_x-1, p_y) == obyek(hitam)
3.1.1.2.1 jika ya, z_x= p_x-1 ; z_y= p_y; 3.1.1.2.2 jika tidak, lakukan langkah 3.1.1.3
3.1.1.3 cek apakah Q(p_x-1, p_y+1) == obyek(hitam) 3.1.1.3.1 jika ya, z_x= p_x-1 ; z_y= p_y+1;
3.1.1.3.2 jika tidak, lakukan langkah 3.1.1.4
3.1.1.4 cek apakah Q(p_x, p_y+1) == obyek(hitam) 3.1.1.4.1 jika ya, z_x= p_x ; z_y= p_y+1;
3.1.1.4.2 jika tidak, lakukan langkah 3.1.1.5
3.1.1.5 cek apakah Q(p_x+1, p_y+1) == obyek(hitam) 3.1.1.5.1 jika ya, z_x= p_x+1 ; z_y= p_y+1;
3.1.1.5.2 jika tidak, lakukan langkah 3.1.1.6
3.1.1.6 cek apakah Q(p_x+1, p_y) == obyek(hitam) 3.1.1.6.1 jika ya, z_x= p_x+1 ; z_y= p_y;
3.1.1.6.2 jika tidak, lakukan langkah 3.1.1.7
3.1.1.7 cek apakah Q(p_x+1, p_y-1) == obyek(hitam) 3.1.1.7.1 jika ya, z_x= p_x+1 ; z_y= p_y-1;
3.1.1.7.2 jika tidak, lakukan langkah 3.1.1.8 3.1.1.8 z_x= p_x; z_y= p_y-1;
3.1.2 lakukan langkah 3.1.2.1
3.1.2.1 cek apakah Q(p_x+1,p_y+1)==obyek(hitam) 3.1.2.1.1 jika ya z_x= p_x+1 ; z_y = p_y+1 ;
3.1.2.1.2 jika tidak lakukan langkah 3.1.2.2 3.1.2.2 cek apakah Q(p_x+1,p_y)==obyek(hitam)
3.1.2.2.1 jika ya z_x= p_x+1 ; z_y = p_y ; 3.1.2.2.2 jika tidak lakukan langkah 3.1.2.3 3.1.2.3 cek apakah Q(p_x+1,p_y-1)==obyek(hitam)
3.1.2.3.1 jika ya z_x= p_x+1 ; z_y = p_y-1 ; 3.1.2.3.2 jika tidak lakukan langkah 3.1.2.4 3.1.2.4 cek apakah Q(p_x,p_y-1)==obyek(hitam)
3.1.2.4.1 jika ya z_x= p_x ; z_y = p_y-1 ; 3.1.2.4.2 jika tidak lakukan langkah 3.1.2.5 3.1.2.5 cek apakah Q(p_x-1,p_y-1)==obyek(hitam)
3.1.2.5.1 jika ya z_x= p_x-1 ; z_y = p_y-1 ; 3.1.2.5.2 jika tidak lakukan langkah 3.1.2.6 3.1.2.6 cek apakah Q(p_x+1,p_y)==obyek(hitam)
3.1.2.6.1 jika ya z_x= p_x+1 ; z_y = p_y; 3.1.2.6.2 jika tidak lakukan langkah 3.1.2.7 3.1.2.7 cek apakah Q(p_x-1,p_y+1)==obyek(hitam)
3.1.2.6.1 jika ya z_x= p_x-1 ; z_y = p_y+1; 3.1.2.6.2 jika tidak lakukan langkah 3.1.2.8 3.1.2.8 z_x= p_x ; z_y = p_y+1;
3.2 Jika tidak lakukan langkah 4 4. cek apakah p_x > x_x
4.1 Jika ya lakukan langkah 4.1.1
4.1.1 Cek apakah nilai p_y > x_y, jika ya lakukan langkah 4.1.1.1, jika tidak 4.1.2
4.1.1.1 cek apakah Q(p_x-1,p_y)==obyek(hitam) 4.1.1.1.1 jika ya z_x= p_x-1 ; z_y = p_y; 4.1.1.1.2 jika tidak lakukan langkah 4.1.1.2 4.1.1.2 cek apakah Q(p_x-1,p_y+1)==obyek(hitam)
4.1.1.2.1 jika ya z_x= p_x-1 ; z_y = p_y+1; 4.1.1.2.2 jika tidak lakukan langkah 4.1.1.3 4.1.1.3 cek apakah Q(p_x,p_y+1)==obyek(hitam)
4.1.1.3.1 jika ya z_x= p_x ; z_y = p_y+1; 4.1.1.3.2 jika tidak lakukan langkah 4.1.1.4 4.1.1.4 cek apakah Q(p_x+1,p_y+1)==obyek(hitam)
4.1.1.4.1 jika ya z_x= p_x+1 ; z_y = p_y+1; 4.1.1.4.2 jika tidak lakukan langkah 4.1.1.5 4.1.1.5 cek apakah Q(p_x+1,p_y)==obyek(hitam)
4.1.1.5.1 jika ya z_x= p_x+1 ; z_y = p_y; 4.1.1.5.2 jika tidak lakukan langkah 4.1.1.6
4.1.1.6 cek apakah Q(p_x+1,p_y-1)==obyek(hitam) 4.1.1.6.1 jika ya z_x= p_x+1 ; z_y = p_y-1; 4.1.1.6.2 jika tidak lakukan langkah 4.1.1.7 4.1.1.7 cek apakah Q(p_x,p_y-1)==obyek(hitam)
4.1.1.7.1 jika ya z_x= p_x ; z_y = p_y-1; 4.1.1.7.2 jika tidak lakukan langkah 4.1.1.8 4.1.1.8 z_x= p_x-1 ; z_y = p_y-1;
4.1.2 cek apakah nilai p_x==x_y, jika ya lakukan langkah 4.1.2.1, jika tidak 4.1.3
4.1.2.1 cek apakah Q(p_x-1,p_y+1)==obyek(hitam) 4.1.2.1.1 jika ya z_x= p_x-1 ; z_y = p_y+1; 4.1.2.1.2 jika tidak lakukan langkah 4.1.2.2 4.1.2.2 cek apakah Q(p_x,p_y+1)==obyek(hitam)
4.1.2.2.1 jika ya z_x= p_x ; z_y = p_y+1; 4.1.2.2.2 jika tidak lakukan langkah 4.1.2.3 4.1.2.3 cek apakah Q(p_x+1,p_y+1)==obyek(hitam)
4.1.2.3.1 jika ya z_x= p_x+1 ; z_y = p_y+1; 4.1.2.3.2 jika tidak lakukan langkah 4.1.2.4 4.1.2.4 cek apakah Q(p_x+1,p_y)==obyek(hitam)
4.1.2.4.1 jika ya z_x= p_x+1 ; z_y = p_y; 4.1.2.4.2 jika tidak lakukan langkah 4.1.2.5 4.1.2.5 cek apakah Q(p_x+1,p_y-1)==obyek(hitam)
4.1.2.5.1 jika ya z_x= p_x+1 ; z_y = p_y-1; 4.1.2.5.2 jika tidak lakukan langkah 4.1.2.6 4.1.2.6 cek apakah Q(p_x,p_y-1)==obyek(hitam)
4.1.2.6.1 jika ya z_x= p_x ; z_y = p_y-1; 4.1.2.6.2 jika tidak lakukan langkah 4.1.2.7 4.1.2.7 cek apakah Q(p_x-1,p_y-1)==obyek(hitam)
4.1.2.7.1 jika ya z_x= p_x-1 ; z_y = p_y-1; 4.1.2.7.2 jika tidak lakukan langkah 4.1.2.8 4.1.2.8 z_x= p_x-1 ; z_y = p_y;
4.1.3 lakukan langkah 4.1.3.1
4.1.3.1 cek apakah Q(p_x,p_y+1)==obyek(hitam) 4.1.3.1.1 jika ya z_x= p_x ; z_y = p_y+1; 4.1.3.1.2 jika tidak lakukan langkah 4.1.3.2 4.1.3.2 cek apakah Q(p_x+1,p_y+1)==obyek(hitam)
4.1.3.2.1 jika ya z_x= p_x+1 ; z_y = p_y+1; 4.1.3.2.2 jika tidak lakukan langkah 4.1.3.3 4.1.3.3 cek apakah Q(p_x+1,p_y)==obyek(hitam)
4.1.3.3.1 jika ya z_x= p_x+1 ; z_y = p_y; 4.1.3.3.2 jika tidak lakukan langkah 4.1.3.4 4.1.3.4 cek apakah Q(p_x+1,p_y-1)==obyek(hitam)
4.1.3.4.1 jika ya z_x= p_x+1 ; z_y = p_y-1; 4.1.3.4.2 jika tidak lakukan langkah 4.1.3.5 4.1.3.5 cek apakah Q(p_x-1,p_y-1)==obyek(hitam)
4.1.3.5.1 jika ya z_x= p_x-1 ; z_y = p_y-1; 4.1.3.5.2 jika tidak lakukan langkah 4.1.3.6 4.1.3.6 cek apakah Q(p_x-1,p_y)==obyek(hitam)
4.1.3.6.1 jika ya z_x= p_x-1 ; z_y = p_y; 4.1.3.6.2 jika tidak lakukan langkah 4.1.3.7 4.1.3.7 z_x= p_x-1 ; z_y = p_y+1;
4.2 Jika tidak lakukan langkah 5 5 cek apakah nilai p_y < x_y
5.1 Jika ya lakukan langkah 5.1.1
5.1.1 cek apakah Q(p_x+1,p_y)==obyek(hitam) 5.1.1.1 jika ya z_x= p_x +1; z_y = p_y;
5.1.1.2 jika tidak lakukan langkah 5.1.2 5.1.2 cek apakah Q(p_x+1,p_y-1)==obyek(hitam)
5.1.2.1 jika ya z_x= p_x +1; z_y = p_y-1; 5.1.2.2 jika tidak lakukan langkah 5.1.3 5.1.3 cek apakah Q(p_x,p_y-1)==obyek(hitam)
5.1.3.1 jika ya z_x= p_x; z_y = p_y-1;
5.1.3.2 jika tidak lakukan langkah 5.1.4 5.1.4 cek apakah Q(p_x-1,p_y-1)==obyek(hitam)
5.1.4.1 jika ya z_x= p_x -1; z_y = p_y-1; 5.1.4.2 jika tidak lakukan langkah 5.1.5 5.1.5 cek apakah Q(p_x-1,p_y)==obyek(hitam)
5.1.5.1 jika ya z_x= p_x -1; z_y = p_y;
5.1.5.2 jika tidak lakukan langkah 5.1.6 5.1.6 cek apakah Q(p_x-1,p_y+1)==obyek(hitam)
5.1.6.1 jika ya z_x= p_x -1; z_y = p_y+1; 5.1.6.2 jika tidak lakukan langkah 5.1.7 5.1.7 cek apakah Q(p_x,p_y+1)==obyek(hitam)
5.1.7.1 jika ya z_x= p_x ; z_y = p_y+1;
5.1.7.2 jika tidak lakukan langkah 5.1.8 5.1.8 z_x= p_x +1; z_y = p_y+1;
5.2 cek apakah p_y == x_y jika ya lakukan langkah 5.2.1 , jika tidak langkah 5.3
5.2.1 cek apakah Q(p_x+1,p_y-1)==obyek(hitam) 5.2.1.1 jika ya z_x= p_x +1; z_y = p_y-1;
5.2.1.2 jika tidak lakukan langkah 5.2.2 5.2.2 cek apakah Q(p_x,p_y-1)==obyek(hitam) 5.2.2.1 jika ya z_x= p_x ; z_y = p_y-1;
5.2.2.2 jika tidak lakukan langkah 5.2.3 5.2.3 cek apakah Q(p_x-1,p_y-1)==obyek(hitam) 5.2.3.1 jika ya z_x= p_x -1; z_y = p_y-1;
5.2.3.2 jika tidak lakukan langkah 5.2.4 5.2.4 cek apakah Q(p_x-1,p_y)==obyek(hitam) 5.2.4.1 jika ya z_x= p_x -1; z_y = p_y;
5.2.4.2 jika tidak lakukan langkah 5.2.5 5.2.5 cek apakah Q(p_x-1,p_y+1)==obyek(hitam) 5.2.5.1 jika ya z_x= p_x -1; z_y = p_y+1;
5.2.5.2 jika tidak lakukan langkah 5.2.6 5.2.6 cek apakah Q(p_x,p_y+1)==obyek(hitam) 5.2.6.1 jika ya z_x= p_x ; z_y = p_y+1;
5.2.6.2 jika tidak lakukan langkah 5.2.7 5.2.7 cek apakah Q(p_x+1,p_y+1)==obyek(hitam) 5.2.7.1 jika ya z_x= p_x +1; z_y = p_y+1;
5.2.7.2 jika tidak lakukan langkah 5.2.8 5.2.8 z_x= p_x +1; z_y = p_y;
5.3 lakukan langkah 5.3.1
5.3.1 cek apakah Q(p_x,p_y-1)==obyek(hitam) 5.3.1.1 jika ya z_x= p_x ; z_y = p_y-1;
5.3.1.2 jika tidak lakukan langkah 5.3.2 5.3.2 cek apakah Q(p_x-1,p_y-1)==obyek(hitam) 5.3.2.1 jika ya z_x= p_x-1 ; z_y = p_y-1;
5.3.2.2 jika tidak lakukan langkah 5.3.3 5.3.3 cek apakah Q(p_x-1,p_y)==obyek(hitam) 5.3.3.1 jika ya z_x= p_x ; z_y = p_y;
5.3.3.2 jika tidak lakukan langkah 5.3.4 5.3.4 cek apakah Q(p_x,p_y+1)==obyek(hitam) 5.3.4.1 jika ya z_x= p_x ; z_y = p_y+1;
5.3.4.2 jika tidak lakukan langkah 5.3.5 5.3.5 cek apakah Q(p_x+1,p_y+1)==obyek(hitam) 5.3.5.1 jika ya z_x= p_x +1; z_y = p_y+1;
5.3.5.2 jika tidak lakukan langkah 5.3.6 5.3.6 cek apakah Q(p_x+1,p_y)==obyek(hitam) 5.3.1.1 jika ya z_x= p_x+1 ; z_y = p_y;
5.3.7 z_x= p_x+1 ; z_y = p_y-1;
Implementasi algoritma Wang-Zhang 1 Input Q = array citra biner
2 Inisialisasi, yaitu menghitung jumlah contour loop (m), g=1, titik first, titik prev, h_k=1
3 Jika h_k=1, maka lakukan langkah 4. Jika tidak proses penipisan berhenti 4 Jika nilai g==1, maka nilai g di set =1,dan jika nilai g==0, maka nilai g di set
=1
5 Set k = 1, selama nilai k lebih kecil sama dengan jumlah contour loop(m) lakukan langkah 6, jika tidak kembali ke langkah 3
6 Set p=first, x=prev, h_k=0
7 Untuk semua piksel pada contour loop m lakukan langkah 7.1 s/d 7.5. jika semua piksel sudah tereksekusi kembali ke langkah 5
7.1 Cari nilai successor(z) dari p. nilai x diset dengan nilai p 7.2 Hitung nilai Bp, atau jumlah 8-tetangga dari p yang “on”
7.3 Hitung nilai Ap, yaitu jumlah piksel tetangga dari p dari piksel “on” ke “off”
7.4 Hitung nilai Cp
7.5 Uji nilai g, apakah bernilai 0 atau 1. Jika bernilai 0 lakukan langkah 7.5.1, jika bernilai 1 lakukan langkah 7.5.2
7.5.1 jika Bp bernilai lebih besar dari 1 dan kurang dari 7 dan Ap =1, atau Cp =1 dan p[2] + p[4] * p[0] * p[6] = 0 maka lakukan langkah 7.5.1.a, jika tidak lakukan langkah 7.5.1.b
a lakukan penghapusan piksel p pada citra Q. nilai h_k di + 1, menuju langkah 7.6
b menuju langkah 7
7.5.2 jika Bp bernilai lebih besar dari 1 dan kurang dari 7 dan Ap =1, atau Cp =1 dan p[0] + p[6] * p[2] * p[4] = 0 maka lakukan langkah 7.5.2.a, jika tidak lakukan langkah 7.5.2.b
a lakukan penghapusan piksel p pada citra Q. nilai h[k] di + 1, menuju langkah 7.6
b menuju langkah 7.6
7.6 posisi p diisi dengan nilai z, lakukan langkah 7.1