• Tidak ada hasil yang ditemukan

Implementasi Algoritma Wang-Zhang

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

Dokumen terkait