SlideShare a Scribd company logo
1 of 62
Download to read offline
BAB 8
Operasi
pada Citra Biner

Dengan berakhirnya bab ini, diharapkan pembaca dapat
memahami berbagai hal berikut dan kemudian dapat
mencoba untuk mengimplementasikannya.
 Pengantar operasi biner
 Representasi bentuk
 Ekstraksi tepi objek
 Mengikuti kontur
 Kontur internal
 Rantai kode
 Perimeter
 Luas
 Diameter
 Fitur menggunakan perimeter, luas, dan diameter
 Pusat massa dan fitur menggunakan pusat massa
 Fitur dispersi
 Pelabelan objek
288

Pengolahan Citra, Teori dan Aplikasi

8.1 Pengantar Operasi Biner
Beberapa pemrosesan citra mengacu pada citra biner. Sebagai contoh,
dengan menggunakan citra biner, perbandingan panjang dan lebar objek dapat
diperoleh. Di depan juga telah dibahas aplikasi citra biner pada morfologi.
Namun, tentu saja masih banyak operasi lain yang memanfaatkan citra biner.
Beberapa contoh diulas dalam bab ini.
8.2 Representasi Bentuk
Fitur suatu objek merupakan karakteristik yang melekat pada objek. Fitur
bentuk merupakan suatu fitur yang diperoleh melalui bentuk objek dan dapat
dinyatakan melalui kontur, area, dan transformasi, sebagaimana ditunjukkan pada
Gambar 8.1. Fitur bentuk biasa digunakan untuk kepentingan identifikasi objek.
Sebagai contoh, rasio kebulatan dipakai sebagai salah satu fitur pada identifikasi
tanaman (Wu, dkk., 2007) dan Polar Fourier Transform (PFT) dapat dipakai
untuk identifikasi daun (Kadir, dkk., 2011).
Representasi
bentuk

Kontur





Area





Kode rantai
Hampiran poligon
…

Rasio kebulatan
Transformasi jarak
…

Transformasi





Transformasi
Fourier
Transformasi PFT
…

Gambar 8.1 Representasi bentuk
8.3 Ekstraksi Tepi Objek
Tepi objek pada citra biner dapat diperoleh melalui algoritma yang dibahas
oleh Davis (1990). Pemrosesan dilakukan dengan menggunakan 8-ketetanggaan.
Sebagai penjelas, lihatlah Gambar 8.2. Piksel P

mempuyai 8 tetangga yang

dinyatakan dengan P0 hingga P7. Adapun algoritma tertuang pada Algoritma 8.1.
Operasi pada Citra Biner

289

P3

P2

P1

P4

P

P0

P5

P6

P7

Gambar 8.2 Piksel dan 8 piksel tetangga
ALGORITMA 8.1 – Memperoleh tepi objek
Masukan:
 f (m,n): Citra masukan berupa citra biner berukuran m baris
dan n kolom
Keluaran:
 g (m, n): Hasil citra yang berisi tepi objek
FOR q  2 to m-1
FOR p  2 to n-1
p0  f(q, p+1)
p1  f(q-1, p+1)
p2  f(q-1, p)
p3  f(q-1, p-1)
p4  f(q, p-1)
p5  f(q+1, p-1)
p6  f(q+1, p)
p7  f(q+1, p+1)
sigma  p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7
IF sigma = 8
g(q, p)  0
ELSE
g(q, p)  f(q, p)
END-IF
END-FOR
END-FOR
290

Pengolahan Citra, Teori dan Aplikasi

Algoritma 8.1 mengasumsikan bahwa semua piksel pada kolom
pertama, kolom, terakhir, baris pertama, dan baris terakhir tidak
ada yang bernilai 1. Apabila ada kemungkinan bahwa piksel pada
posisi tersebut ada yang bernilai satu, perlu dibentuk larik baru
yang berukuran (m+2) x (n+2), yang mencakup seluruh nilai f dan
dengan bagian tepi larik berisi 0.

Perwujudan skrip berdasarkan algoritma di depan dapat dilihat berikut ini.
Program : tepibiner.m

function [G] = tepibiner(F)
% TEPIBINER Berguna untuk mendapatkan tepi objek
%
pada citra biner
[jum_baris, jum_kolom] = size(F);
G = zeros(jum_baris, jum_kolom);
for q = 2 : jum_baris - 1
for p = 2 : jum_kolom - 1
p0 = F(q, p+1);
p1 = F(q-1, p+1);
p2 = F(q-1, p);
p3 = F(q-1, p-1);
p4 = F(q, p-1);
p5 = F(q+1, p-1);
p6 = F(q+1, p);
p7 = F(q+1, p+1);
sigma = p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7;
if sigma == 8
G(q, p) = 0;
else
G(q, p) = F(q, p);
end
end
end

Akhir Program
Operasi pada Citra Biner

Contoh penggunaan fungsi tepibiner dapat dilihat di bawah ini.
>> Img = imread('C:Imagedaun_bin.png'); 
>> G = tepibiner(Img); 
>> imshow(G) 
>>

Hasilnya ditunjukkan pada Gambar 8.3.

Gambar 8.3 Tepi objek yang diperoleh melalui tepibiner.m

291
292

Pengolahan Citra, Teori dan Aplikasi

Jika objek berlubang, kontur bagian dalam juga akan dibuat oleh
fungsi tepibiner. Contoh:



8.4 Mengikuti Kontur
Mengikuti kontur (contour following) merupakan suatu metode yang
digunakan untuk mendapatkan tepi objek. Terkait dengan hal itu, terdapat istilah
kontur eksternal dan kontur internal. Gambar 8.4 memberikan ilustrasi tentang
perbedaan kedua jenis kontur tersebut. Terlihat bahwa piksel yang menjadi bagian
kontur eksternal (ditandai dengan huruf E) terletak di luar objek, sedangkan piksel
yang menjadi bagian kontur internal terletak di dalam objek itu sendiri.

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0
0
0

1

1

1

1

1

0

0

0

0

1

1

1

1

1

0

0

0

1

1

1

1

1

0

0

1

1

1

1

0

0

1

1

1

0

0

0

0

0

0

0

0

0
0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0
0
0

1

1

1

1

1

0

0

0

0

0

1

1

1

1

1

0

0

0

0

0

0

1

1

1

1

1

0

0

1

0

0

0

0

1

1

1

1

1

0

0

1

1

0

0

0

0

1

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Kontur
eksternal

Kontur
internal

Gambar 8.4 Kontur eksternal dan kontur internal
Operasi pada Citra Biner

293

Istilah kontur identik dengan batas (boundary). Itulah sebabnya,
fitur yang berhubungan dengan kontur acapkali dinamakan
deskriptor batas.

Contoh pada Gambar 8.5 menunjukkan cara untuk memperoleh kontur
eksternal. Dengan menggunakan pendekatan 8-ketetanggaan, diperoleh hasil
sebagai berikut:

(3,2), (4,2), (5,2), (6,2), (7,2), (8,3), (8,4), (8,5), (8,6), (8,7), (7,8), (6,8), (5,8),
(4,8), (3,8), (2,7), (2,6), (2,4), (2,3)

Proses untuk mendapatkan titik awal (yaitu (3,1)) dilakukan dengan melakukan
pemindaian seperti yang diilustrasikan dalam Gambar 8.5. Setelah titik awal
ditemukan, penelusuran dilakukan seperti terlihat pada Gambar 8.5(b).
Penelusuran kontur berakhir setelah bertemu kembali dengan titik awal.

1

2

3

4

5

6

7

8

9

1

0

0

0

0

0

0

0

0

0

2

0

0

0

0

0

0

0

0

0

3

0

0

0
0
0

1

1

1

1

1

0

0

4

0

0

1

1

1

1

1

0

5

0

0

1

1

1

1

1

6

0

0

1

1

1

1

7

0

0

1

1

1

8

0

0

0

0

9

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0
0
0

1

1

1

1

1

0

0

0

0

0

1

1

1

1

1

0

0

0

0

0

0

1

1

1

1

1

0

0

1

0

0

0

0

1

1

1

1

1

0

0

1

1

0

0

0

0

1

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Titik awal

Kontur
eksternal

Gambar 8.5 Proses penelusuran kontur
294

Pengolahan Citra, Teori dan Aplikasi

Label yang digunakan pada penelusuran kontur ditunjukkan pada Gambar
8.6(a). Piksel tetangga yang diberi latarbelakang hitam merupakan tetangga yang
dijadikan acuan untuk mencari titik kedua yang akan menjadi bagian kontur.
Dengan cara seperti itu, piksel yang berada di atas piksel titik awal ataupun yang
berada di kanannya tidak mungkin menjadi piksel kedua yang merupakan bagian
kontur.
3

2

1

3

2

1

4

P

0

4

P

0

5

6

7

5

6

7

(a) Label tetangga untuk
penelusuran kontur

(b) Tetangga berwarna hitam
Sebagai basis pencarian titik kedua

Gambar 8.6 Label posisi tetangga dan pencarian tetangga
untuk menentukan bagian kedua pada kontur
Penelusuran untuk piksel-piksel berikutnya dilakukan dengan cara yang
khusus. Untuk kepentingan ini, diperlukan suatu pencatatan untuk mengetahui
arah posisi sekarang (C) terhadap posisi sebelum (P) dan berikutnya (N). Sebagai
contoh, dcp digunakan untuk mencatat arah posisi sekarang terhadap piksel
sebelumnya, dpc untuk mencatat arah posisi sebelum terhadap posisi sekarang,
dan dcn untuk mencatat arah posisi sekarang terhadap piksel berikutnya.
Berdasarkan keadaan pada Gambar 8.6(a), hubungan antara dcp dan dpc adalah
berkebalikan. Oleh karena itu, hubungan tersebut dapat ditabelkan seperti berikut.

Tabel 8.1 Hubungan antara dpc dan dcp
dcp
0
1
2
3
4
5
6
7

dcp =
kebalikan(dcp)
4
5
6
7
0
1
2
3
Operasi pada Citra Biner

295

Algoritma untuk mendapatkan hasil seperti yang telah dibahas dapat dilihat
di bawah ini (Costa & Cesar, 2001).
ALGORITMA 8.2 – Mengikuti kontur
Masukan:
 f (m,n): Citra masukan berukuran m baris dan n kolom berisi
kontur
Keluaran:
 e (n): kontur dengan n piksel
1.
Cari piksel pertama yang akan dijadikan sebagai kontur
melalui pemindaian dan disimpan di e[1].
2.
n  2 // Indeks kedua pada kontur e
3.
Cari piksel kedua yang menjadi bagian kontur dengan cara
yang telah dibahas dan diletakkan di piksel_berikutnya
4.
dcn  arah dari e[1] ke piksel kedua.
5.
WHILE (piksel_berikutnya  e[1]
e[n]  piksel_berikutnya
cari_piksel_berikutnya(e(n), dpc, piksel_berikutnya, dcn)
nn+1
END-WHILE

ALGORITMA 8.3: Memperoleh piksel berikutnya pada kontur
cari_piksel_berikutnya(pc , dpc, pb, dcn)
// pc = piksel sekarang
// dpc = arah piksel sebelumnya ke piksel sekarang
// pb = piksel berikutnya yang akan dihasilkan oleh fungsi
// dcn = arah piksel sekarang ke piksel berikutnya
dcp  kebalikan(dpc)
FOR r  0 TO 6
dE  MOD(dcp + r, 8) // Arah eksternal
dI  MOD(dcp + r + 1, 8); // Arah internal
pE  peroleh_piksel_berikutnya(pc, dE)
pI  peroleh_piksel_berikutnya(pc, dI)
IF adalah_latarbelakang(pE) AND adalah_objek(pI)
pb  pE
dcn  dE
296

Pengolahan Citra, Teori dan Aplikasi

END-IF
END-FOR

ALGORITMA 8.4: Memperoleh piksel berikutnya
peroleh_piksel_berikutnya(pc, d)
// pc = piksel sekarang
// d = arah piksel berikutnya
// Nilai balik: piksel berikutnya
XP  [1, 1, 0, -1, -1, -1, 0, 1];
YP  [0, -1, -1, -1, 0, 1, 1, 1];
cx  bagian x dari pc + XP(d+1);
cy  bagian y dari pc + YP(d+1);

Implementasi metode “mengikuti kontur” ditunjukkan berikut ini.
Program : get_contour.m

function [Kontur] = get_contour(BW)
% GET_CONTOUR Berfungsi untuk memperoleh kontur eksternal
%
dari suatu citra biner BW
%
Hasil berupa Kontur yang berisi pasangan X dan Y dari setiap
%
piksel yang menyusun kontur. Kolom 1 menyatakan Y dan
%
kolom 2 menyatakan X
% Peroleh kontur
% Proses rantai kode
% Arah sebelumnya ke sekarang
DPC = [0, 1, 2, 3, 4, 5, 6, 7];
% Arah sekarang ke sebelumnya
DCP = [4, 5, 6, 7, 0, 1, 2, 3];
% Arah 0
1
2
3
4
5 6 7
%
terhadap posisi sekarang
XP =
[1, 1, 0, -1, -1, -1, 0, 1];
YP =
[0, -1, -1, -1, 0, 1, 1, 1];
% Peroleh titik awal
[tinggi, lebar] = size(BW);
Operasi pada Citra Biner

297

% Cari titik awal
x1 = 1;
y1 = 1;
selesai = false;
for baris = 1 : tinggi
for kolom = 1 :lebar
if BW(baris, kolom) == 1
y1 = baris;
x1 = kolom-1;
selesai = true;
Kontur(1,1) = y1;
Kontur(1,2) = x1;
break;
end
end
if selesai
break;
end
end
% Proses piksel kedua
for i = 4 : 7
if BW(y1+YP(i+1), x1+XP(i+1)) == 0
dcn = i; % Arah sekarang ke sesudahnya
break;
end
end
yberikut = y1 + YP(dcn+1);
xberikut = x1 + XP(dcn+1);
indeks = 2; % Indeks kedua
% Proses peletakan piksel kedua dan seterusnya
%
ke array Kontur
while (yberikut ~= Kontur(1,1)) || (xberikut ~= Kontur(1,2))
Kontur(indeks,1) = yberikut;
Kontur(indeks,2) = xberikut;
dpc = dcn; % Arah sebelum ke sekarang diisi
% dengan arah sekarang ke berikutnya
% Cari piksel berikutnya
for r = 0 : 7
dcp = DCP(dpc+1);
de = rem(dcp+r, 8);
di = rem(dcp+r+1, 8);
cxe
cye
cxi
cyi

=
=
=
=

Kontur(indeks,2)
Kontur(indeks,1)
Kontur(indeks,2)
Kontur(indeks,1)

+
+
+
+

XP(de+1);
YP(de+1);
XP(di+1);
YP(di+1);

if (BW(cye, cxe) == 0) && (BW(cyi, cxi) == 1)
yberikut = cye;
xberikut = cxe;
break;
298

Pengolahan Citra, Teori dan Aplikasi

end
end
% Naikkan indeks
indeks = indeks + 1;
end

Akhir Program

Contoh untuk menguji fungsi get_contour:
>> Daun = imread('c:imagedaun_bin.png'); 
>> C = get_contour(Daun); 
>>

Dengan cara seperti itu, C berisi data piksel yang menjadi kontur citra biner
daun_bin.png.
Untuk membuktikan bahwa C berisi kontur daun, berikan kode seperti
berikut:
>> D = zeros(size(Daun)); 
>> for p=1:length(C) 
D(C(p,1), C(p,2)) = 1; 
end 
>> imshow(D) 

Pertama-tama, perintah
D = zeros(size(Daun)); 

digunakan untuk membentuk matriks berukuran sama dengan citra Daun dan
seluruhnya diisi dengan nol. Selanjutnya,
>> for p=1:length(C) 
D(C(p,1), C(p,2)) = 1; 
Operasi pada Citra Biner

299

end 
>>

digunakan untuk membuat matriks D yang sesuai dengan nilai-nilai koordinat
pada larik C diisi dengan angka 1. Dengan demikian, D merekam kontur yang
tercatat pada C. Gambar 8.7 menunjukkan hasil imshow(D).

Gambar 8.7 Gambar kontur yang diperoleh
melalui get_contour
300

Pengolahan Citra, Teori dan Aplikasi

8.5 Kontur Internal
Salah satu cara untuk mendapatkan kontur internal yang telah diurutkan
menurut letak piksel, yaitu dengan memanfaatkan algoritma pelacakan kontur
Moore. Algoritma ini antara lain digunakan pada peta topografik digital (Pradha,
dkk., 2010).

ALGORITMA 8.5 – Memperoleh kontur internal dengan
pelacakan kontur Moore
Masukan:
 f (m,n): Citra masukan berukuran m baris dan n kolom
Keluaran:
 kontur (s): Larik yang berisi piksel-piksel kontur sebanyak s
1. Dapatkan piksel terkiri dan teratas yang bernilai 1.
Selanjutnya, posisi piksel dicatat pada b0 dan posisi untuk
memperoleh piksel berikutnya dicatat pada c0, yang mulamula diisi dengan 4 (arah barat pada Gambar 8.8(d)).
2. Periksa 8 tetangga b0 searah jarum jam dimulai dari c0.
Piksel pertama yang bernilai 1 dicatat pada b1. Adapun
posisi yang mendahului b1 dicatat pada c1.
3. kontur(1)  b0, kontur(2)  b1, jum  2
4. b  b1 dan c  c1
5. WHILE true
a. Cari piksel pada 8 tetangga yang pertama kali
bernilai 1 dengan pencarian dimulai dari arah c
dengan menggunakan pola arah jarum jam.
b. Catat posisi piksel tersebut ke b.
c. Catat posisi yang mendahului piksel tersebut ke
c.
d. Tambahkan b sebagai bagian kontur:
jum  jum + 1
kontur(jum)  b
e. IF b = b0
Keluar dari WHILE
END-IF
END-WHILE
Algoritma di atas akan membuat indeks pertama dan indeks terakhir pada
kontur berisi nilai yang sama yaitu b0. Jika dikehendaki untuk tidak
Operasi pada Citra Biner

301

menyertakan nilai yang sama pada bagian akhir larik kontur, elemen tersebut
tinggal diabaikan saja.
Untuk memahami proses kerja pada algoritma Moore, perhatikan Gambar
8.8. Gambar 8.8(a) menyatakan keadaan objek pada citra. Piksel yang bernilai 1
menyatakan bagian objek dan yang bernilai 0 adalah bagian latarbelakang. Pada
contoh tersebut, pelacakan akan dimulai pada posisi (2,2), yaitu piksel bagian
objek yang terletak paling kiri dan paling atas. Adapun titik pencarian untuk
piksel kedua dimulai di arah barat atau arah kiri piksel (2,2) tersebut. Pencarian
dilakukan searah jarum jam. Pada langkah pertama, diperoleh piksel pada posisi
(2,3). Pencarian berikutnya akan dimulai di posisi (1,3), yaitu yang ditandai
dengan bulatan. Pada pencarian kedua, piksel yang didapat, yaitu posisi (2,4),
dengan titik pencarian berikutnya dimulai di posisi (1,4). Pada pencarian ketiga,
piksel yang didapat adalah pada (2,5), dengan titik pencarian berikutnya dimulai
di posisi (1,5). Pada pencarian keempat, piksel yang didapat yaitu (3,5), dengan
titik pencarian berikutnya dimulai di posisi (3,6). Jika langkah seperti itu terus
diulang, suatu ketika akan diperoleh piksel yang sama dengan piksel yang pertama
kali menjadi bagian kontur. Saat itulah proses untuk melacak kontur diakhiri.
Semua langkah yang terjadi untuk contoh Gambar 8.8(a) ditunjukkan pada
Gambar 8.8(b). Penomoran arah pencarian ditunjukkan pada Gambar 8.8(d),
sedangkan hasil kontur diperlihatkan pada Gambar 8.8(c).
302

Pengolahan Citra, Teori dan Aplikasi

1

2

3

4

5

1

0

0

0

0

0

0

1

1

1

1

0

3

0

0

1

1

1

0

4

0

1

1

1

0

0

5

0

0

1

1

1

0

6

0

0

0

0

0

3

0

2

2

1

6

0

1

1

1

1

1

1

1

1

1

1

1

1

4

1

Objek

(a)

(b)

0

0

0

0

0

0

0

1

1

1

1

0

0

0

1

0

1

1

0

1

0

0

0

0

1

1

1

0

0

0

0

0

0

3

0

0

Piksel objek paling
kiri dan paling atas
sebagai titik awal
pelacakan

0

2

1

4
Kontur

(c)

5

0
6

7

(d)

Gambar 8.8 Penjelasan pelacakan kontur dengan
menggunakan Algoritma Moore
Implementasi algoritma Moore ditunjukkan berikut ini.

Program : inbound_tracing.m

function [Kontur] = inbound_tracing(BW)
% INBOUND_TRACING Memperoleh kontur yang telah terurutkan
%
dengan menggunakan algoritma pelacakan kontur Moore
[jum_baris, jum_kolom] = size(BW);
% Peroleh piksel awal
selesai = false;
for p = 1 : jum_baris
for q = 1 : jum_kolom
if BW(p, q) == 1
b0.y = p;
Operasi pada Citra Biner

b0.x = q;
selesai = true;
break;
end
end
if selesai
break;
end
end
c0 = 4; % Arah barat
% Periksa 8 tetangga dan cari piksel pertama yang bernilai 1
for p = 1 : 8
[dy, dx] = delta_piksel(c0);
if BW(b0.y + dy, b0.x + dx) == 1
b1.y = b0.y + dy;
b1.x = b0.x + dx;
c1 = sebelum(c0);
break;
else
c0 = berikut(c0);
end
end
Kontur=[];
Kontur(1, 1)
Kontur(1, 2)
Kontur(2, 1)
Kontur(2, 2)

=
=
=
=

b0.y;
b0.x;
b1.y;
b1.x;

%Kontur
n = 2; % Jumlah piksel dalam kontur
b = b1;
c = c1;
% Ulang sampai berakhir
while true
for p = 1 : 8
[dy, dx] = delta_piksel(c);
if BW(b.y + dy, b.x + dx) == 1
b.y = b.y + dy;
b.x = b.x + dx;
c = sebelum(c);
n = n + 1;
Kontur(n, 1) = b.y;
Kontur(n, 2) = b.x;
break;
else
c = berikut(c);
end

303
304

Pengolahan Citra, Teori dan Aplikasi

end
% Kondisi pengakhir pengulangan
if (b.y == b0.y) && (b.x == b0.x)
break;
end
end
return
function [b] = berikut(x)
if x == 0
b = 7;
else
b = x - 1;
end
function [s] = sebelum(x)
if x == 7
s = 0;
else
s = x + 1;
end
if s < 2
s = 2;
elseif s < 4
s = 4;
elseif s < 6
s = 6;
else
s = 0;
end
function [dy, dx] = delta_piksel(id)
if id == 0
dx = 1; dy = 0;
elseif id == 1
dx = 1; dy = -1;
elseif id == 2
dx = 0; dy = -1;
elseif id == 3
dx = -1; dy = -1;
elseif id == 4
dx = -1; dy = 0;
elseif id == 5
dx = -1; dy = 1;
elseif id == 6
dx = 0; dy = 1;
elseif id == 7
dx = 1; dy = 1;
end

Akhir Program
Operasi pada Citra Biner

305

Contoh penggunaan inbound_tracing :
>> D = [ 0 0 0 0 0 0
0 1 1 1 1 0
0 0 1 1 1 0
0 1 1 1 0 0
0 0 1 1 1 0
0 0 0 0 0 0 ]; 
>> P = inbound_tracing(D) 
P =
2

2

2

3

2

4

2

5

3

5

4

4

5

5

5

4

5

3

4

2

3

3

2

2

>>

Perhatikan, elemen pertama dan terakhir pada P sama.
8.6 Rantai Kode
Rantai kode (code chain) merupakan contoh representasi kontur yang
mula-mula diperkenalkan oleh Freeman pada tahun 1961. Representasi bentuk
dilakukan dengan menggunakan pendekatan 8-ketetanggan. Kode rantai setiap
306

Pengolahan Citra, Teori dan Aplikasi

tetangga piksel dinyatakan dengan sebuah angka sebagaimana terlihat pada
Gambar 8.9.

3

2

4
5

1
0

6

7

Gambar 8.9 Arah rantai kode beserta kodenya

Untuk mempermudah perolehan kode rantai piksel yang menjadi tetangga
suatu piksel, perlu pembuatan indeks yang dapat dihitung melalui rumus berikut:
𝑖𝑛𝑑𝑒𝑘𝑠 = 3 ∆𝑦 + ∆𝑥 + 5

(8.1)

Dalam hal ini, ∆𝑥 menyatakan selisih nilai kolom dua piksel yang bertetangga dan
∆𝑦 menyatakan selisih nilai baris dua piksel yang bertetangga. Hubungan kode
rantai dan indeks pada Persamaan 8.1 tersaji pada Tabel 8.2.

Tabel 8.2 Indeks dan kode rantai dua piksel yang bertetangga
∆𝑥

∆𝑦

0

+1

6

8

0

-1

2

2

-1

+1

5

7

-1

-1

3

1

+1

+1

7

9

+1

-1

1

3

-1

0

4

4

Kode Rantai

Indeks = 3 ∆𝑦 + ∆𝑥 + 5

Kode untuk memperoleh kode rantai dapat dilihat berikut ini.
Operasi pada Citra Biner

307

Program : chain_code.m

function [kode_rantai,
% CHAIN_CODE Digunakan
%
kode rantai dari
%
misalnya melalui
% Kode
Kode =

xawal, yawal] = chain_code(U)
untuk mendapatkan titik awal (x, y) dan
kontur U yang datanya telah terurutkan
get_contour

1
2
3
4
5
6
7
8
9
['3', '2', '1', '4', '0', '0', '5', '6', '7' ];

xawal = U(1,2);
yawal = U(1,1);
kode_rantai = '';
for p=2: length(U)
deltay = U(p, 1) - U(p-1, 1);
deltax = U(p, 2) - U(p-1, 2);
indeks = 3 * deltay + deltax + 5;
kode_rantai = strcat(kode_rantai, Kode(indeks));
end

Akhir Program

Contoh penggunaan fungsi chain_code:
>> Daun = imread('c:imagedaun_bin.png'); 
>> C = inbound_tracing(Daun); 
>> [kode, x, y] = chain_code(C) 
kode =
007067565666666666665666666666666666666666666766676676676667666766
767666767666676676667666766676667676766667666766666676670676766666
676666766667666676666667667667677676776776776777677767777777676766
677677767776767677677676767676706767776767677676767676776767676767
667667676766766676676767667666766666543434333343343233433333433333
443333333333323233323323342333333433334334333434234434344344444444
445555655656665656666566666656666666666666666666666666666666666666
666666676567666666666666667666666666667666666666676666666666667666
666666666676666666666666766667666766666676666766766767666766766676
666706666766666666666666666666656664566656656665665656565656656566
656666666666666666766666444343233332332332233323333323333333333333
333233334333333233323232323232222322222232221231222222212222121212
212121212122122221221212221222222212222222222222222220122222222222
222222212222212222222222222212222222222222221222222222222223222221
222222222222222222222222222222222212322222222222222222322222223222
323234233343444545554555456455555555556555655655665656566656566566
566656565656656656565645656565656566566656565554533322322322322322
223222223222222322322132222221222221222121221221212122121212121221
212212222212222122212211212121120121211121111211110111111111111211
221112121221211221221222212122122212212221122122122212221212212122
308

Pengolahan Citra, Teori dan Aplikasi

012211212122212121121221221212121212112121221212122221222222222222
22222232222222222100001
x = 131
y = 8
>>

Fungsi show_contour berikut digunakan untuk menguraikan kembali
kode rantai menjadi koordinat piksel dan kemudian menggambarkan konturnya.
Program : show_contour.m

function show_contour(x, y, rantai_kode)
% SHOW_CONTOUR Contoh untuk menggambar kontur
%
melalui rantai kode
%
Masukan fungsi ini adalah hasil
%
fungsi chain_code
%
0
1
2
3
4
5
6
7
Dx = [ +1, +1, 0, -1, -1, -1, 0, +1];
Dy = [ 0, -1, -1, -1, 0, +1, +1, +1];
U = zeros(1,2);
U(1,1) = y;
U(1,2) = x;
for p=2: length(rantai_kode)
bilangan = rantai_kode(p) - 48;
posx = U(p-1, 2) + Dx(bilangan + 1);
posy = U(p-1, 1) + Dy(bilangan + 1);
U(p, 1) = posy;
U(p, 2) = posx;
end
% Membentuk gambar kontur
maks_x = max(U(p,2));
maks_y = max(U(p,1));
D = zeros(maks_y, maks_x);
for p=1: length(U)
D(U(p,1), U(p,2)) = 1;
end
imshow(D);

Akhir Program
Operasi pada Citra Biner

309

Dengan mendasarkan kode yang dihasilkan melalui get_counter, dapat
dilakukan pengujian seperti berikut:
>> show_contour(x,y,kode)
>>

Dengan cara begitu, gambar kontur daun ditampilkan kembali.
Kode rantai digunakan pada beberapa penelitian, antara lain untuk
pencocokan kurva (Yu, dkk., 2010) dan pengenalan huruf Arab/Farsi (Izakian,
dkk., 2008). Namun, representasi kode rantai sebenarnya memiliki kelemahan
sebagai berikut (Levner, 2002).
1. Kode cenderung panjang.
2. Sensitif terhadap distorsi dan segmentasi yang tidak sempurna.
3. Sangat bergantung pada penyekalaan ataupun rotasi.

Levner menguraikan secara kasar langkah-langkah yang perlu dilakukan untuk
menghilangkan ketergantungan terhadap rotasi dan penyekalaan.
8.7 Perimeter
Perimeter atau keliling menyatakan panjang tepi suatu objek. Ilustrasinya
dapat dilihat pada Gambar 8.10. Perimeter dapat diperoleh dengan menggunakan
algoritma berikut.
ALGORITMA 8.6 – Estimasi perimeter
Masukan:


f (M,N): Citra masukan berukuran M baris dan N kolom

Keluaran:


perimeter

1. Peroleh citra biner.
2. Kenakan algoritma deteksi tepi.
3. Perimeter  jumlah piksel pada tepi objek hasil langkah 2.
310

Pengolahan Citra, Teori dan Aplikasi

Perimeter
daun

Luas daun

Gambar 8.10 Perimeter dan luas daun
Contoh berikut menunjukkan cara menghitung perimeter dengan
menggunakan pendekatan di atas.

Program : perim1.m

function hasil = perim1(BW)
% PERIM1 Untuk menghitung perimeter suatu objek pada
%
BW (citra biner)
%
hasil menyatakan hasil perhitungan perimeter
U = inbound_tracing(BW);
hasil = length(U) - 1;

Akhir Program
Operasi pada Citra Biner

311

Pada skrip di atas, -1 diberikan mengingat elemen pertama dan terakhir U
sebenarnya berisi nilai yang sama. Itulah sebabnya, jumlah piksel pada kontur
perlu dikurangi satu.
Contoh pengujian fungsi perim1:
>> Img = imread('C:Imagedaun_bin.png'); 
>> perim1(Img) 
ans = 1409
>>

Algoritma estimasi perimeter di depan memberikan hasil yang baik ketika
tepi objek terhubung dengan 4-ketetanggaan, tetapi tidak tepat kalau terhubung
menurut 8-ketetanggaan (Costa & Cesar, 2001). Hal itu terjadi karena jarak antara
dua piksel tidak bersifat konstan (dapat berupa 1 atau √2) pada 8-ketetanggaan,
sedangkan jarak selalu 1 pada 4-ketetanggaan. Ilustrasi mengenai jarak antarpiksel
dapat dilihat pada Gambar 8.11.

1

1

1

1

1

1

1

1

1

1
1

Jarak 1

1

Jarak √2

Gambar 8.11 Jarak antarpiksel pada 8-ketetanggaan

Apabila tepi objek diproses dengan menggunakan rantai kode (dibahas
pada Subbab 8.4), perimeter dapat diperkirakan dengan menggunakan rumus:
𝑃 = 𝑁 𝑒 + 𝑁 𝑜 √2

(8.2)
312

Pengolahan Citra, Teori dan Aplikasi

dengan Ne menyatakan jumlah kode genap dan No menyatakan jumlah kode
ganjil. Contoh berikut menunjukkan penggunaan cara seperti itu.

Program : perim2.m

function hasil = perim2(BW)
% PERIM2 Untuk menghitung perimeter suatu objek pada
%
BW (citra biner) dengan menggunakan
%
chain code
%
%
hasil menyatakan hasil perhitungan perimeter
U = inbound_tracing(BW);
kode_rantai = chain_code(U);
jum_genap = 0;
jum_ganjil = 0;
for p=1: length(kode_rantai)
kode = kode_rantai(p);
if (kode == '0') || (kode == '2') || (kode == '4') || ...
(kode == '6') || (kode == '8')
jum_genap = jum_genap + 1;
else
jum_ganjil = jum_ganjil + 1;
end
end
hasil = jum_genap + jum_ganjil * sqrt(2);

Akhir Program

Contoh:
>> Daun = imread('C:Imagedaun_bin.png'); 
>> perim2(Daun) 
ans = 1605.8
>>
Operasi pada Citra Biner

313

8.8 Luas
Cara sederhana untuk menghitung luas suatu objek adalah dengan cara
menghitung jumlah piksel pada objek tersebut. Algoritmanya sebagai berikut.

ALGORITMA 8.7 – Menghitung luas objek
Masukan:


f (m,n): Citra masukan berukuran M baris dan N kolom

Keluaran:


luas

luas  0
FOR p = 1 to m
FOR j = 1 to n
IF piksel(p, q) dalam objek
luas  luas + 1
END-IF
END-FOR
END-FOR

Contoh berikut adalah implementasi algoritma di atas.
Program : luas.m

function hasil = luas(BW)
% LUAS Untuk menghitung luas citra BW (citra biner)
[tinggi, lebar] = size(BW);
hasil = 0;
for p = 1 : tinggi
for q = 1 : lebar
if BW(p, q) == 1
hasil = hasil + 1;
end
end
314

Pengolahan Citra, Teori dan Aplikasi

end

Akhir Program

Contoh:
>> D = [ 0 0 0 0 0 0
0 1 1 1 1 0
0 0 1 1 1 0
0 1 1 1 0 0
0 0 1 1 1 0
0 0 0 0 0 0 ]; 
>> luas(D) 
ans =

13

>>
>> Daun = imread('c:imagedaun_bin.png'); 
>> luas(Daun) 
ans =

31862

>>

Pendekatan yang lain untuk menghitung luas suatu objek dilakukan
melalui kode rantai (Putra, 2010). Perhitungannya sebagai berikut:


Kode 0: Area = Area + Y



Kode 1: Area = Area + (Y + 0.5)



Kode 2: Area = Area + 0



Kode 3: Area = Area – (Y + 0,5)



Kode 4: Area = Area - Y



Kode 5: Area = Area – (Y + 0,5)



Kode 6: Area = Area + 0



Kode 7: Area = Area + (Y + 0,5)
Operasi pada Citra Biner

Contoh

pada

315

Gambar

8.12

mempunyai

kode

rantai

berupa

0770764554341234201. Perhitungan luas dijabarkan dalam Tabel 8.3. Luasnya
adalah ∑ 𝐴𝑟𝑒𝑎= 22,5.

1

2

3

4

5

6

7

8

9

10

9
8
7
6
5
4
3
2
1

Gambar 8.12 Objek dengan rantai kode
berupa 0770764554341234201

Tabel 8.3 Perhitungan luas objek melalui rantai kode
Kode pada
Rantai Kode
0
7
7
0
7
6
4
5
5
4
3
4
1
2

Ordinat (Y)

Luas

8
8
7
6
6
5
4
4
3
2
2
3
3
4

8
7,5
6,5
6
5,5
0
-4
-3,5
-2,5
-2
-2,5
-2
-2,5
0
316

Pengolahan Citra, Teori dan Aplikasi

Kode pada
Rantai Kode
3
4
2
0
1

Ordinat (Y)

Luas

5
6
6
7
7

-5,5
-6
0
7
7,5

Berikut adalah contoh skrip yang digunakan untuk melakukan perhitungan
dengan cara di depan.

Program : luas2.m

function hasil = luas2(BW)
% LUAS2 Untuk menghitung luas citra BW (citra biner)
%
melalui kode rantai
[tinggi, lebar] = size(BW);
U = inbound_tracing(BW);
kode_rantai = chain_code(U);
hasil = 0;
for p=1: length(kode_rantai)
kode = kode_rantai(p);
y = tinggi + 1 -U(p);
switch kode
case '0'
hasil = hasil
case '1'
hasil = hasil
case '3'
hasil = hasil
case '4'
hasil = hasil
case '5'
hasil = hasil
case {'2','6'}
hasil = hasil
case '7'
hasil = hasil
end
end

Akhir Program

+ y;
+ y + 0.5;
- y - 0.5;
- y;
- y + 0.5;
;
+ y - 0.5;
Operasi pada Citra Biner

317

Contoh penggunaan fungsi luas2:
>> X = [
0 0 0 0 0 0 0 0 0 0 
0 0 0 1 1 0 0 0 0 0 
0 1 1 1 1 1 0 0 0 0 
0 1 1 1 1 1 1 1 0 0 
0 0 0 1 1 1 1 1 1 0 
0 0 0 1 1 1 1 1 1 0 
0 0 1 1 1 1 1 0 0 0 
0 0 0 0 1 1 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 ]; 
>> luas2(X) 
ans =

22.5000

>>
8.9 Diameter
Diameter adalah jarak terpanjang antara dua titik dalam tepi objek. Hal itu
dapat dihitung dengan menggunakan metode “Brute force” (Costa dan Cesar,
2001). Algoritmanya sebagai berikut.
ALGORITMA 8.8 – Estimasi diameter bentuk
Masukan:


f (m,n): Citra masukan berukuran m baris dan n kolom

Keluaran:


diameter

1. U  tepi objek (misalnya melalui morfologi)
2. c  jumlah elemen U
3. jarak_maks  0
318

Pengolahan Citra, Teori dan Aplikasi

4. FOR p1 TO c-1
FOR qp+1 TO c
IF | U(p) – U(q) | > jarak_maks
jarak_maks  | U(p) – U(q) |
piksel1  p
piksel2  q
END-IF
END-FOR
END-FOR
5. diameter  jarak_maks

Pada algoritma di atas, piksel1 dan piksel2 mencatat posisi dua piksel yang
memiliki jarak terpanjang.
Contoh implementasi algoritma tersebut diberikan berikut ini. Dalam hal
ini, fungsi peroleh_diameter memerlukan citra biner sebagai masukan dan
memberikan nilai balik berupa panjang objek, dan dua piksel yang mewakili nilai
panjang tersebut.

Program : peroleh_diameter.m

function [diameter, x1, y1, x2, y2] = peroleh_diameter(BW)
% PEROLEH_DIAMETER Digunakan untuk menghitung panjang objek
%
pada citra BW (citra biner).
%
Hasil:
%
diameter : panjang objek
%
x1, y1, x2, y2 : menyatakan dua titik yang
%
mewakili panjang tersebut
U = get_contour(BW);
n = length(U);
jarak_maks = 0;
piksel1 = 0;
piksel2 = 0;
for p=1 : n-1
for q=p+1 : n
jarak = sqrt((U(p,1)-U(q,1)) ^ 2 + (U(p,2)-U(q,2)) ^ 2);
Operasi pada Citra Biner

319

if jarak > jarak_maks
jarak_maks = jarak;
piksel1 = p;
piksel2 = q;
end
end
end
y1
x1
y2
x2

=
=
=
=

U(piksel1,
U(piksel1,
U(piksel2,
U(piksel2,

1);
2);
1);
2);

diameter = jarak_maks;

Akhir Program

Contoh penggunaan fungsi peroleh_diameter diberikan di bawah
ini:
>> Daun = imread('c:imagedaun_bin.png'); 
>> [d,x1,y1,x2,y2] = peroleh_diameter(Daun); 
>> d
d =

515.1641

>> X = [x1,x2] 
X =
144

131

>> Y = [y1,y2]; 
>> line(X,Y, 'Color','r') 
>>

Hasil dalam bentuk gambar diperlihatkan pada Gambar 8.13.
320

Pengolahan Citra, Teori dan Aplikasi

Gambar 8.13 Garis merah menyatakan diameter daun

Berdasarkan diameter yang telah dibahas, lebar objek dapat diperoleh.
Sebagai contoh, perhatikan Gambar 8.14. Pada contoh tersebut, lebar adalah garis
terpanjang yang menghubungkan dua

piksel di tepi objek yang tegak lurus

terhadap panjang maksimum pada objek. Setelah dua titik dengan jarak terpanjang
diperoleh, gradien garis yang melalui kedua piksel tersebut dihitung dengan
menggunakan rumus:
(𝑦 −𝑦 )

𝑔𝑟𝑎𝑑1 = (𝑥2 −𝑥1 )
2

1

(8.3)
Operasi pada Citra Biner

321

Selanjutnya, garis yang tegak lurus dengan garis dengan gradien sebesar grad1
mempunyai gradien sebesar:

𝑔𝑟𝑎𝑑2 = −

1

(8.4)

𝑔𝑟𝑎𝑑1

Persoalan berikutnya adalah mencari jarak terbesar antara dua piksel pada kontur
daun yang mempunyai gradien sama dengan grad2. Namun, dalam praktiknya
toleransi sebesar 10% perlu diberikan karena sangat sulit untuk mendapatkan garis
yang tepat sama dengan grad2, terutama kalau objek berukuran kecil.

panjang

lebar
Gambar 8.14 Panjang dan lebar objek

Implementasi perhitungan panjang dan lebar objek dapat dilihat pada
program berikut.

Program : peroleh_lebar.m
322

Pengolahan Citra, Teori dan Aplikasi

function [panjang, lebar, x1, y1, x2, y2, x3, ...
y3, x4, y4] = peroleh_lebar(BW)
% PEROLEH_LEBAR Digunakan untuk memperoleh panjang dan
%
lebar objek yang terdapat pada
%
citra biner BW.
%
Hasil:
%
panjang = panjang objek
%
lebar = lebar objek
%
(x1,y1,x2,y2) = menyatakan posisi lebar objek
%
(x3,y3,x4,y4) = menyatakan posisi panjang objek
U = get_contour(BW);
n = length(U);
jarak_maks = 0;
piksel1 = 0;
piksel2 = 0;
for p=1 : n-1
for q=p+1 : n
jarak = sqrt((U(p,1)-U(q,1)) ^ 2 + ...
(U(p,2)-U(q,2)) ^ 2);
if jarak > jarak_maks
jarak_maks = jarak;
piksel1 = p;
piksel2 = q;
end
end
end
y1
x1
y2
x2

=
=
=
=

U(piksel1,
U(piksel1,
U(piksel2,
U(piksel2,

1);
2);
1);
2);

panjang = jarak_maks;
% Cari dua titik terpanjang yang tegak lurus dengan garis
terpanjang
maks = 0;
posx3 = -1;
posx4 = -1;
posy3 = -1;
posy4 = -1;
if (x1 ~= x2) && (y1 ~= y2)
% Kedua titik tidak pada kolom atau baris yang sama
grad1 = (y1 - y2) / (x1 - x2);
grad2 = -1/grad1;
for p=1:n-1
for q=p+1:n
x3 = U(p, 2);
x4 = U(q, 2);
pembagi = (x4
if pembagi ==
continue;
end;

y3 = U(p, 1);
y4 = U(q, 1);
- x3);
0

grad3 = (y4-y3)/(x4-x3);
Operasi pada Citra Biner

323

if abs(grad3-grad2) < 0.1 * abs(grad2)
jarak = sqrt((x3-x4)^2+(y3-y4)^2);
if jarak > maks
maks = jarak;
posx3
posx4
posy3
posy4

=
=
=
=

x3;
x4;
y3;
y4;

end
end
end
end
else
if (y1 == y2)
% kalau kedua titik pada baris yang sama
grad1 = 0;
grad2 = inf;
for p=1:n-1
for q=p+1:n
x3 = U(p,2); y3 = U(p, 1);
x4 = U(q,2); y4 = U(q, 1);
deltax = (x4 - x3);
if (deltax < 0.01) || (deltax > 0.01)
continue;
end;
jarak = sqrt((x3-x4)^2+(y3-y4)^2);
if jarak > maks
maks = jarak;
posx3
posx4
posy3
posy4

=
=
=
=

x3;
x4;
y3;
y4;

end
end
end
else
% kalau kedua titik pada kolom yang berbeda
grad1 = inf;
grad2 = 0;
for p=1:n-1
for q=p+1:n
x3 = U(p,2); y3 = U(p, 1);
x4 = U(q,2); y4 = U(q, 1);
deltay = (y3 - y4);
if (deltay < 1.0) || (deltay > 1.0)
continue;
end
jarak = sqrt((x4-x3)^2+(y4-y3)^2);
if jarak > maks
maks = jarak;
posx3 = x3;
324

Pengolahan Citra, Teori dan Aplikasi

posx4 = x4;
posy3 = y3;
posy4 = y4;
end
end
end
end
end
x3
y3
x4
y4

=
=
=
=

posx3;
posy3;
posx4;
posy4;

lebar = maks;

Akhir Program

Contoh penggunaan fungsi peroleh_lebar dapat dilihat di bawah ini:
>> close all; 
>> Daun = imread('C:Imagedaun_bin.png'); 
>> [d,l,x1,y1,x2,y2,x3,y3,x4,y4] =
peroleh_lebar(Daun); 
>> imshow(Daun); 
>> Xp = [x1 x2]; 
>> Yp = [y1 y2]; 
>> Xl = [x3 x4]; 
>> Yl = [y3 y4]; 
>> line(Xl,Yl, 'Color','r') 
>> line(Xp,Yp, 'Color','r') 

Hasilnya ditunjukkan pada Gambar 8.15.
Operasi pada Citra Biner

325

Gambar 8.15 Contoh yang menunjukkan
panjang dan lebar daun

8.10 Fitur Menggunakan Perimeter, Luas, dan Diameter
Fitur seperti perimeter, luas, dan diameter seperti yang telah dibahas tidak
dapat digunakan secara mandiri sebagai fitur identifikasi objek. Fitur seperti itu
dipengaruhi oleh ukuran objek. Nah, agar tidak bergantung penyekalaan, beberapa
fitur dapat diturunkan dari ketiga fitur tersebut. Contoh dapat dilihat di bawah ini.
 Kebulatan bentuk adalah perbandingan antara luas objek dan kuadrat
perimeter, yang dinyatakan dengan rumus seperti berikut:

𝑘𝑒𝑏𝑢𝑙𝑎𝑡𝑎𝑛( 𝑅) = 4𝜋

𝐴(𝑅)
𝑃 2(𝑅)

(8.5)
326

Pengolahan Citra, Teori dan Aplikasi

Hasilnya berupa nilai < 1. Nilai 1 menyatakan bahwa objek R berbentuk
lingkaran. Kadang fitur ini dinamakan kekompakan (Lee dan Chen, 2003).
Contoh dapat dilihat pada Gambar 18.16.
 Fitur alternatif yang menggunakan perbandingan antara luas dan perimeter
dapat dilihat berikut ini (Rangayyan, 2005).
𝑐𝑓 = 1 −

4𝜋𝐴

(8.6)

𝑃2

Berdasarkan rumus di atas, nilai kekompakan berkisar antara 0 sampai
dengan 1. Nilainya berupa nol kalau objek berbentuk lingkaran.
 Kerampingan bentuk adalah perbandingan antara lebar dengan panjang,
yang dinyatakan dengan rumus seperti berikut:

𝑘𝑒𝑟𝑎𝑚𝑝𝑖𝑛𝑔𝑎𝑛 =

𝑙𝑒𝑏𝑎𝑟
𝑝𝑎𝑛𝑗𝑎𝑛𝑔

(8.7)

dengan panjang adalah panjang objek dan lebar adalah lebar objek. Fitur
ini terkadang disebut sebagai rasio aspek (Wu, dkk., 2007). Dengan
menggunakan fitur ini, objek yang gemuk dan yang kurus dapat dibedakan
(lihat Gambar 8.17).
Operasi pada Citra Biner

Gambar 8.16 Kebulatan bentuk membedakan bentuk daun
yang kurus dan yang gemuk

Gambar 8.17 Kerampingan bentuk membedakan bentuk daun
yang kurus dan yang membulat
Berikut adalah contoh fungsi yang digunakan memperoleh kebulatan.

327
328

Pengolahan Citra, Teori dan Aplikasi

Program : peroleh_kebulatan.m

function rasio = peroleh_kebulatan(BW)
% PEROLEH_KEBULATAN Untuk memperoleh rasio kebulatan milik objek
%
yang terdapat pada citra biner BW
p = perim2(BW);
a = luas2(BW);
rasio = 4 * pi * a / (p^2);

Akhir Program

Contoh penggunaan fungsi peroleh_kebulatan:
>> Daun1 = imread('C:Imageadv.png'); 
>> peroleh_kebulatan(Daun1) 
ans = 0.28708
>> Daun2 = imread('C:Imageaw.png'); 
>> peroleh_kebulatan(Daun2) 
ans = 0.66130
>>

Adapun contoh berikut menunjukkan implementasi fungsi yang dipakai untuk
menghitung kerampingan objek.
Program : peroleh_kerampingan.m

function rasio = peroleh_kerampingan(BW)
% PEROLEH_KERAMPINGAN Untuk memperoleh rasio kerampingan
%
milik objek yang terdapat pada citra biner BW
[panjang, lebar] = peroleh_lebar(BW);
Operasi pada Citra Biner

329

rasio = lebar / panjang;

Akhir Program

Contoh penggunaan fungsi peroleh_kerampingan:
>> Daun1 = imread('C:Imageadv.png'); 
>> peroleh_kerampingan(Daun1) 
ans = 0.14605
>> Daun2 = imread('C:Imageaw.png'); 
>> peroleh_kerampingan(Daun2) 
ans = 0.76921
>>

8.11 Pusat Massa dan Fitur Menggunakan Pusat Massa
Pusat massa

atau sentroid (centroid) lazim ditemukan dengan

menggunakan nilai rerata koordinat setiap piksel yang menyusun objek.
Algoritmanya sebagai berikut.
ALGORITMA 8.9 – Estimasi diameter bentuk
Masukan:
 f (m,n): Citra masukan berukuran m baris dan n kolom
Keluaran:
 pusat_x dan pusat_y
1.
2.
3.
4.

pusat_x  0
pusat_y  0
luas  0
FOR q = 1 to m
FOR p = 1 to n
IF F(q, p) = 1
luas  luas + 1
pusat_x  pusat_x + p
pusat_y  pusat_y + q
END-IF
END-FOR
END-FOR

5. pusat_x  pusat_x / luas
330

Pengolahan Citra, Teori dan Aplikasi

6. pusat_y  pusat_y / luas
Berikut adalah implementasi untuk memperoleh pusat massa.

Program : centroid.m

function [pusat_x, pusat_y] = centroid(BW)
% CENTROID Untuk memperoleh pusat massa sebuah objek
%
yang terletak pada citra biner BW
[tinggi, lebar] = size(BW);
pusat_x = 0;
pusat_y = 0;
luas = 0;
for q = 1 : tinggi
for p = 1 : lebar
if BW(q, p) == 1
luas = luas + 1;
pusat_x = pusat_x + p;
pusat_y = pusat_y + q;
end
end
end
pusat_x = pusat_x / luas;
pusat_y = pusat_y / luas;

Akhir Program

Contoh penggunaan fungsi centroid:
>> Daun = imread('C:Imagedaun_bin.png'); 
>> [x, y] = centroid(Daun); 
>> imshow(Daun); 
>> [panjang, lebar] = size(Daun); 
>> line([0 lebar], [round(y) round(y)],’Color’,’b’) 
>> line([round(x) round(x)], [0 panjang],’Color’,’b’) 
>>
Operasi pada Citra Biner

331

Pada contoh di atas, line digunakan untuk membuat garis tegak dan garis datar
yang melewati pusat massa dan berwarna biru. Hasilnya dapat dilihat pada
Gambar 8.18.

Pusat massa

Gambar 8.18 Contoh untuk menunjukkan centroid

Pusat massa banyak digunakan untuk memperoleh fitur lebih lanjut.
Beberapa contoh dapat dilihat di bawah ini.
 Pusat massa untuk memperoleh fitur dispersi (dibahas pada Subbab 8.12).
 Menghitung jarak terpanjang antara pusat massa dan titik dalam kontur
(Dmax).
 Menghitung jarak terpendek antara pusat massa dan titik dalam kontur
(Dmin).
332

Pengolahan Citra, Teori dan Aplikasi

 Menghitung jarak rata-rata antara pusat massa dan titik dalam kontur
(Dmean).
 Histogram jarak antara pusat massa dan titik dalam kontur.
 Perbandingan:

𝐷 𝑚𝑎𝑥
𝐷 𝑚𝑖𝑛

,

𝐷 𝑚𝑎𝑥
𝐷 𝑚𝑒𝑎𝑛

,

𝐷 𝑚𝑖𝑛
𝐷 𝑚𝑒𝑎𝑛

Contoh program yang memanfaatkan beberapa fitur yang memanfaatkan
pusat massa dapat dilihat di bawah ini.

Program : pusat.m

function [] = pusat(BW)
% PUSAT Contoh untuk menguji beberapa fitur yang
%
menggunakan pusat massa. BW = Citra biner
[px, py] = centroid(BW);
U = inbound_tracing(BW);
U(length(U),:) = []; % Hapus elemen terakhir
rerata = 0;
terkecil = 99999999;
terbesar = 0;
jum_piksel = length(U);
for j = 1 : jum_piksel
panjang = sqrt((U(j,1)-py)^2 + (U(j,2)-px)^2);
rerata = rerata + panjang;
if panjang > terbesar
terbesar = panjang;
end
if panjang < terkecil
terkecil = panjang;
end
end
rerata = rerata / jum_piksel;
terbesar
terkecil
dmaxmin = terbesar / terkecil;
dmaxmean = terbesar / rerata;
dminmean = terkecil / rerata;
disp(sprintf('max/min = %f', dmaxmin));
disp(sprintf('max/mean = %f', dmaxmean));
disp(sprintf('min/mean = %f', dminmean));
Operasi pada Citra Biner

333

Akhir Program

Contoh pemakaian fungsi pusat:
>> Daun1 = imread('C:Imageadv.png'); 
>> Daun2 = imread('C:Imageaw.png'); 
>> pusat(Daun1) 
terbesar =

499.18

terkecil =

64.493

max/min = 7.740069
max/mean = 1.994929
min/mean = 0.257741
>>
>>

pusat(Daun2) 

terbesar =

137.58

terkecil =

79.565

max/min = 1.729221
max/mean = 1.399380
min/mean = 0.809255
>>

8.12 Fitur Dispersi
Untuk bentuk yang tidak teratur (atau biasa disebut bentuk tidak kompak),
Nixon dan Aguado (2002) menyarankan penggunaan fitur dispersi. Sebagai
contoh, terdapat tiga bentuk seperti terlihat pada Gambar 8.19. Penggunaan
kekompakan bentuk untuk objek pada Gambar 8.19(c) sebagai diskriminator tidak
tepat. Mereka menyarankan penggunaan dispersi pada bentuk yang tidak teratur,
karena dispersi sangat tepat untuk bentuk seperti itu.
334

Pengolahan Citra, Teori dan Aplikasi

(c) Teratur

(b) Teratur

(a) Tidak teratur

Gambar 8.19 Kekompakan objek pada berbagai bentuk

Berdasarkan definisi Chen di tahun 1995 (Nixon dan Aguado, 2002),
dispersi (atau juga disebut ketidakteraturan) diukur sebagai perbandingan panjang
chord utama terhadap area objek. Bila dinyatakan dalam rumus berupa seperti
berikut:
𝐼 ( 𝑆) =

π max(√(𝑥 𝑖 −𝑥̅ )2+(𝑦 𝑖 −𝑦 2)
̅)
A(S)

(8.8)

dengan (𝑥̅ , ̅) adalah titik pusat massa area A(S) dan A(S) sendiri menyatakan luas
𝑦
objek. Alternatif yang kedua, dispersi dinyatakan sebagai rasio radius maksimum
terhadap radius minimum, yang dinyatakan dengan rumus seperti berikut:

𝐼𝑅( 𝑆) =

max(√(𝑥 𝑖 −𝑥̅ )2+(𝑦 𝑖 −𝑦 2)
̅)
min(√(𝑥 𝑖 −𝑥̅ )2 +(𝑦 𝑖 −𝑦 2 )
̅)

(8.9)

Fungsi bernama dispersi berikut dapat digunakan untuk memperoleh
fitur kedua dispersi di depan.

Program : dispersi.m

function [d1, d2] = dispersi(BW)
% DISPERSI Contoh untuk menguji beberapa fitur yang
%
menggunakan pusat massa. BW = Citra biner
[px, py] = centroid(BW);
U = inbound_tracing(BW);
Operasi pada Citra Biner

335

U(length(U),:) = []; % Hapus elemen terakhir
rerata = 0;
terkecil = 99999999;
terbesar = 0;
jum_piksel = length(U);
for j = 1 : jum_piksel
panjang = sqrt((U(j,1)-py)^2 + (U(j,2)-px)^2);
rerata = rerata + panjang;
if panjang > terbesar
terbesar = panjang;
end
if panjang < terkecil
terkecil = panjang;
end
end
a = perim2(BW);
d1 = pi * terbesar / a;
d2 = terbesar / terkecil;

Akhir Program

Contoh pemakaian fungsi dispersi:
>> Daun1 = imread('C:Imageadv.png'); 
>> Daun2 = imread('C:Imageaw.png'); 
>> [d1, d2] = dispersi(Daun1) 
d1 =

0.78285

d2 =

7.7401

>> [d1, d2] = dispersi(Daun2) 
d1 = 0.57999
d2 = 1.7292
>>
8.13 Pelabelan Objek
Citra biner seringkali memperlihatkan sejumlah objek. Sebagai contoh,
perhatikan Gambar 8.20. Pada gambar tersebut terdapat 6 objek. Nah, bagaimana
336

Pengolahan Citra, Teori dan Aplikasi

membuat aplikasi yang dapat menghitung jumlah objek? Jawabannya adalah
melalui pelabelan objek.

Gambar 8.20 Citra dengan enam objek

Pelabelan
memberikan

terhadap

label

yang

objek
berbeda

sesungguhnya
(berupa

berupa

nomor)

pada

tindakan

untuk

setiap

objek.

Pemrosesannya dapat dilaksanakan pada citra biner. Ketentuan yang dilakukan
sebagai berikut:
0
𝐵( 𝑦, 𝑥 ) = { 1
2,3, …

𝑝𝑖𝑘𝑠𝑒𝑙 𝑙𝑎𝑡𝑎𝑟𝑏𝑒𝑙𝑎𝑘𝑎𝑛𝑔
𝑝𝑖𝑘𝑠𝑒𝑙 𝑙𝑎𝑡𝑎𝑟𝑑𝑒𝑝𝑎𝑛
𝑙𝑎𝑏𝑒𝑙 𝑜𝑏𝑗𝑒𝑘

(8.10)

Contoh berikut memberikan gambaran tentang hasil pelabelan citra biner di
Gambar 8.20.
Operasi pada Citra Biner

337

Gambar 8.21 Pelabelan pada citra biner

Objek yang diberi label akan terlihat jelas jika nilai nol dihilangkan. Hal seperti
itu terlihat pada Gambar 8.22.

Gambar 8.22 Objek-objek citra yang telah diberi label
338

Pengolahan Citra, Teori dan Aplikasi

Cara yang umum digunakan untuk melakukan pelabelan adalah melalui
metode pembanjiran (flood filling). Tiga cara untuk melakukan pembanjiran
dibahas oleh Burger & Burge (2008), yaitu sebagai berikut.
 Pembanjiran secara rekursif: Pendekatan ini dapat diterapkan dengan
bahasa pemrograman yang mendukung proses rekursif.
 Pembanjiran melalui Depth-first: Teknik ini memerlukan struktur data
tumpukan untuk melaksanakan pembanjiran.
 Pembanjiran melalui Breadth-first: Teknik ini memerlukan struktur data
antrian untuk melaksanakan pembanjiran.

Secara umum, proses pelabelan dilakukan melalui algoritma berikut.
ALGORITMA 8.10 – Melakukan pelabelan area pada citra
biner
Masukan:


f (M,N): Citra masukan berukuran M baris dan N kolom

Keluaran:


g (M, N): Hasil citra yang telah diberi label

1. g  f
2. label  2
3. FOR baris  1 TO M
4.
5.

FOR kolom  1 TO N
IF g(baris, kolom) = 1

6.

banjiri(g, baris, kolom, label)

7.

label  label + 1

8.
9.

END-IF
END-FOR

10. END-FOR
Operasi pada Citra Biner

339

11. RETURN g
Algoritma di atas melibatkan fungsi bernama banjiri. Fungsi tersebut akan
diwujudkan dengan tiga cara.
Dengan menggunakan pendekatan 4-ketetanggaan, pembanjiran secara
rekursif dapat dituangkan dalam bentuk algoritma seperti berikut.
ALGORITMA 8.11 – Pelabelan suatu area secara rekursif

banjiri(f, i, j, label):
Masukan:


f (M,N): Citra masukan berukuran M baris dan N kolom



i dan j menyatakan baris dan kolom sebagai biji pembanjiran
terhadap area



label menyatakan label untuk area

Keluaran:


f (M, N): Hasil citra yang telah diberi label

1. IF koordinat (i, j) berada dalam citra dan f(i, j) = 1
2.

f(i, j)  label

3.

banjiri( f, i-1, j, label)

4.

banjiri( f, i+1, j, label)

5.

banjiri( f, i, j-1, label)

6.

banjiri( f, i, j+1, label)

7. END-IF
Perhatikan bahwa fungsi banjiri memanggil empat fungsi banjiri. Keadaan
itulah yang menyatakan bahwa fungsi banjiri adalah fungsi rekursif (fungsi
yang memanggil dirinya sendiri).
Pembanjiran melalui depth-first (mendalam dulu) memiliki algoritma
seperti berikut.
340

Pengolahan Citra, Teori dan Aplikasi

ALGORITMA 8.12 – Pelabelan suatu area dengan pendekatan
mendalam dulu

banjiri(f, i, j, label):
Masukan:


f (M,N): Citra masukan berukuran M baris dan N kolom



i dan j menyatakan baris dan kolom sebagai biji pembanjiran
terhadap area



label menyatakan label untuk area

Keluaran:


f (M, N): Hasil citra yang telah diberi label

1. Menciptakan tumpukan kosong T
2. Menaruh koordinat (i,j) ke tumpukan sebagai biji (push(T, (i,j))
3. WHILE tumpukan T tidak kosong
4.

Mengambil sebuah elemen dari tumpukan T ( (y,x)  pop(T))

5.

IF koordinat (y, x) berada dalam citra dan f(i, j) = 1

6.

f(y, x)  label

7.

push(S, (y-1, x))

8.

push(S, (y+1, x))

9.

push(S, (y, x-1))

10.

push(S, (y, x+1))

11.

END-IF

12. END-WHILE

Untuk mewujudkan Algoritma 8.12, dibutuhkan struktur data bernama tumpukan
(stack). Di dalam struktur data tumpukan, push berguna untuk memasukkan data
ke dalam tumpukan, sedangkan pop digunakan untuk mengambil data dari
tumpukan. Perlu diketahui, tumpukan adalah struktur data yang mempunyai sifat
LIFO (Last-In First-Out). Artinya, data yang dimasukkan terakhir kali akan
diambil pertama kali.
Operasi pada Citra Biner

341

Adapun algoritma pembanjiran melalui breadth-first (melebar dulu)
berupa seperti berikut.
ALGORITMA 8.13 – Pelabelan suatu area dengan pendekatan melebar
dulu

banjiri(f, i, j, label):
Masukan:


f (M,N): Citra masukan berukuran M baris dan N kolom



i dan j menyatakan baris dan kolom sebagai biji pembanjiran
terhadap area



label menyatakan label untuk area

Keluaran:


f (M, N): Hasil citra yang telah diberi label

1. Menciptakan antrean kosong A
2. Menaruh koordinat (i,j) ke antrean sebagai biji (insert(A, (i,j))
3. WHILE antrean A tidak kosong
Mengambil sebuah elemen dari antrean A ( (y,x)  remove(A))
IF koordinat (y, x) berada dalam citra dan f(i, j) = 1
f(y, x)  label
insert(A, (y-1, x))
insert(A, (y+1, x))
insert(A, (y, x-1))
insert(A, (y, x+1))
END-IF
END-WHILE
4. RETURN f(M,N)

Untuk mewujudkan Algoritma 8.13, dibutuhkan struktur data bernama antrean
(queue). Di dalam struktur data antrean, insert berguna untuk memasukkan
data ke dalam antrean, sedangkan remove digunakan untuk mengambil data dari
342

Pengolahan Citra, Teori dan Aplikasi

antrean. Perlu diketahui, tumpukan adalah struktur data yang mempunyai sifat
FIFO (First-In First-Out). Artinya, data yang dimasukkan pertama kali akan
diambil pertama kali.
Berdasarkan ketiga jenis pendekatan pembanjiran tersebut, Burger &
Burge (2008) menyatakan bahwa hanya pembanjiran melalui breadth-first yang
secara praktis memberikan hasil yang terbaik. Pembanjiran secara rekursif
umumnysnya memiliki kendala terhadap penggunaan tumpukan (stack), yang
biasanya sangat terbatas pada bahasa pemrograman tertentu. Adapun pembanjiran
menggunakan depth-first mempunyai kelemahan pada eksekusi yang sangat lama.
Meski faktanya seperti itu, pembanjiran melalui breadth-first pun memakan waktu
yang sangat lama bila ukuran citra melebihi 50 x 50 piksel dan mengandung objek
yang berbentuk kompleks.

Itulah sebabnya, disarankan untuk mempelajari algoritma yang
lain, untuk mendapatkan komputasi yang efisien. Sebagai contoh,
pada Octave dan MATLAB terdapat fungsi bwlabel yang berguna
untuk melakukan pelabelan objek. Kode fungsi tersebut dapat
dipelajari untuk memungkinkan penulisan kode dengan bahasa
pemrograman yang lain.

Sebagai

contoh,

akan

diberikan

implementasi

menggunakan pendekatan breadth-first. Kodenya seperti berikut.
Program : labeli.m

function G = labeli(F)
% Memberi label pada area di dalam citra biner F
%
dengan menggunakan 4-ketetanggan
% Hasil berupa citra G
% Bentuk Antrean awal

algoritma

yang
Operasi pada Citra Biner

343

Maks_antre = 50000;
Antrean = cell(Maks_antre,1);
depan = 1;
belakang = 1;
G = double(F); % Agar bisa diisi dengan nilai selain 0 dan 1
[m, n] = size(G);
label = 2;
for i=1 : m
for j=1 : n
if G(i, j) == 1
% Kosongkan antrean
depan = 1;
belakang = 1;
% Bentuk simpul dan masukkan ke dalam antrean
simpul.y = i;
simpul.x = j;
if belakang == Maks_antre
if depan == 1
error('Kapasitas antrian penuh');
else
Antrean{obj.belakang} = simpul;
belakang = 1;
end
else
if belakang + 1 == depan
error('Kapasitas antrian penuh');
else
Antrean{belakang} = simpul;
belakang = belakang + 1;
end
end
while belakang ~= depan % Selama antrean tidak kosong
%Ambil dan hapus data pada Antrean
simpul = Antrean{depan};
if depan == 50000
depan = 1;
else
depan = depan + 1;
end
if simpul.x > 0 && simpul.x
simpul.y > 0 && simpul.y
G(simpul.y, simpul.x) ==
G(simpul.y, simpul.x) =

<= n && ...
<= m && ...
1
label;

x = simpul.x; y = simpul.y;
simpul.y = y-1; simpul.x = x;
% Sisipkan ke Antrean
if belakang == Maks_antre
if depan == 1
error('Kapasitas antrian penuh');
else
Antrean{obj.belakang} = simpul;
344

Pengolahan Citra, Teori dan Aplikasi

belakang = 1;
end
else
if belakang + 1 == depan
error('Kapasitas antrian penuh');
else
Antrean{belakang} = simpul;
belakang = belakang + 1;
end
end
simpul.y = y+1; simpul.x = x;
% Sisipkan ke Antrean
if belakang == Maks_antre
if depan == 1
error('Kapasitas antrian penuh');
else
Antrean{obj.belakang} = simpul;
belakang = 1;
end
else
if belakang + 1 == depan
error('Kapasitas antrian penuh');
else
Antrean{belakang} = simpul;
belakang = belakang + 1;
end
end
simpul.y = y; simpul.x = x-1;
% Sisipkan ke Antrean
if belakang == Maks_antre
if depan == 1
error('Kapasitas antrian penuh');
else
Antrean{obj.belakang} = simpul;
belakang = 1;
end
else
if belakang + 1 == depan
error('Kapasitas antrian penuh');
else
Antrean{belakang} = simpul;
belakang = belakang + 1;
end
end
simpul.y = y; simpul.x = x+1;
% Sisipkan ke Antrean
if belakang == Maks_antre
if depan == 1
error('Kapasitas antrian penuh');
else
Antrean{obj.belakang} = simpul;
belakang = 1;
end
else
if belakang + 1 == depan
error('Kapasitas antrian penuh');
Operasi pada Citra Biner

345

else
Antrean{belakang} = simpul;
belakang = belakang + 1;
end
end
end
end
label = label + 1;
end
end
end

Akhir Program

Contoh:
>> A = [
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0
0 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0
0 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0
0 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 0 0
0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]; 
>> B = labeli(A) 

Hasil B dapat dilihat pada Gambar 8.21.
346

Pengolahan Citra, Teori dan Aplikasi

 Latihan
1. Jelaskan bahwa fitur suatu objek dapat diperoleh melalui citra biner.
2. Apa yang dimaksud dengan kontur?
3. Pada CD yang tersedia bersama buku ini terdapat citra gambar bernama fork3.gif. Kenakan fungsi tepibiner terhadap citra tersebut untuk memperoleh
tepinya. Perlu diperhatikan, citra tersebut bukan berupa citra biner. Jika
perintah Anda benar, Anda akan memperoleh hasil seperti berikut:

4. Jelaskan perbedaan antara kontur internal dan kontur eksternal.
5. Gambarkan kontur eksternal untuk citra seperti berikut dengan menggunakan:
(a) 4-ketetanggaan
(b) 8-ketetanggaan.

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0
0
0

1

1

1

0

0

0

0

0

0

1

1

1

1

1

0

0

0

0

0

1

1

1

0

0

0

0

0

1

1

1

1

0

0

0

0

0

1

1

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0
0
Operasi pada Citra Biner

347

6. Apa fungsi algoritma Moore?
7. Berapa kode rantai untuk gambar yang tertera pada soal Nomor 5?
8. Apakah objek dengan ukuran dan bentuk yang sama tetapi mempunyai posisi
yang berbeda (objek yang mengalami translasi) memiliki kode rantai yang
sama? Jelaskan!
9. Apa sebenarnya pengertian perimeter itu?
10. Jelaskan kehadiran √2 pada Persamaan 8.2.
11. Luas suatu objek dapat diperoleh dengan menghitung jumlah piksel dalam
objek. Tuliskan algoritma untuk menghitung luas dengan cara seperti itu,
dengan asumsi citra berukuran m x n.

12. Pendekatan yang lain untuk menghitung luas suatu objek dilakukan melalui
kode rantai dengan ketentuan seperti berikut.

Kode 0: Area = Area + Y
Kode 1: Area = Area + (Y + 0.5)
Kode 2: Area = Area + 0
Kode 3: Area = Area – (Y + 0,5)
Kode 4: Area = Area - Y
Kode 5: Area = Area – (Y + 0,5)
Kode 6: Area = Area + 0
Kode 7: Area = Area + (Y + 0,5)

Berapakah luas objek yang terdapat pada citra berikut?
348

Pengolahan Citra, Teori dan Aplikasi

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0
0
0

1

1

1

0

0

0

0

0

0

1

1

1

1

1

0

0

0

0

0

1

1

1

1

0

0

0

0

1

1

1

1

1

0

0

0

0

1

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0
0

13. Jelaskan fitur-fitur berikut:
(a) kebulatan
(b) kekompakan
(c) kerampingan

14. Apa yang dimaksud dengan centroid? Apa kegunaannya?
15. Apa yang dimaksud dengan panjang chord utama dalam dispersi? Kalau perlu,
gambarkan.
16. Terdapat citra seperti berikut.

Bagaimana hasil pelabelan atas objek-objek yang terdapat di dalamnya?

More Related Content

What's hot

6 data-understanding-v2
6 data-understanding-v26 data-understanding-v2
6 data-understanding-v2ArdianDwiPraba
 
Partisi matriks untuk menghitung nilai eigen (Bagian I)
Partisi matriks untuk menghitung nilai eigen (Bagian I)Partisi matriks untuk menghitung nilai eigen (Bagian I)
Partisi matriks untuk menghitung nilai eigen (Bagian I)bernypebo
 
Matriks eselon baris dan eselon baris tereduksi
Matriks eselon baris dan eselon baris tereduksiMatriks eselon baris dan eselon baris tereduksi
Matriks eselon baris dan eselon baris tereduksiElemantking Daeva
 
Bilangan kompleks lengkap
Bilangan kompleks lengkapBilangan kompleks lengkap
Bilangan kompleks lengkapagus_budiarto
 
Aljabar linear:Kebebasan Linear, Basis, dan Dimensi.ppt
Aljabar linear:Kebebasan Linear, Basis, dan Dimensi.pptAljabar linear:Kebebasan Linear, Basis, dan Dimensi.ppt
Aljabar linear:Kebebasan Linear, Basis, dan Dimensi.pptrahmawarni
 
Fungsi Kompleks (pada bilangan kompleks)
Fungsi Kompleks (pada bilangan kompleks)Fungsi Kompleks (pada bilangan kompleks)
Fungsi Kompleks (pada bilangan kompleks)Ridha Zahratun
 
Ruang Hasil kali Dalam ( Aljabar Linear Elementer )
Ruang Hasil kali Dalam ( Aljabar Linear Elementer )Ruang Hasil kali Dalam ( Aljabar Linear Elementer )
Ruang Hasil kali Dalam ( Aljabar Linear Elementer )Kelinci Coklat
 
Matematika Diskrit - 07 teori bilangan - 01
Matematika Diskrit - 07 teori bilangan - 01Matematika Diskrit - 07 teori bilangan - 01
Matematika Diskrit - 07 teori bilangan - 01KuliahKita
 
Algoritma Pencarian String matching
Algoritma Pencarian String matching Algoritma Pencarian String matching
Algoritma Pencarian String matching Kukuh Setiawan
 
Teori bahasa-dan-otomata
Teori bahasa-dan-otomataTeori bahasa-dan-otomata
Teori bahasa-dan-otomataBanta Cut
 
Laporan Praktikum PCD (Pengolahan Citra Digital) menggunakan software ENVI
Laporan Praktikum PCD (Pengolahan Citra Digital) menggunakan software ENVILaporan Praktikum PCD (Pengolahan Citra Digital) menggunakan software ENVI
Laporan Praktikum PCD (Pengolahan Citra Digital) menggunakan software ENVIAhmad Dani
 
nilai eigen dan vektor eigen
nilai eigen dan vektor eigennilai eigen dan vektor eigen
nilai eigen dan vektor eigenelmabb
 
Cara menggambar graf sederhana matematika diskrit
Cara menggambar graf sederhana matematika diskritCara menggambar graf sederhana matematika diskrit
Cara menggambar graf sederhana matematika diskritOka Ambalie
 
Aljabar 3-struktur-aljabar
Aljabar 3-struktur-aljabarAljabar 3-struktur-aljabar
Aljabar 3-struktur-aljabarmaman wijaya
 

What's hot (20)

6 data-understanding-v2
6 data-understanding-v26 data-understanding-v2
6 data-understanding-v2
 
Partisi matriks untuk menghitung nilai eigen (Bagian I)
Partisi matriks untuk menghitung nilai eigen (Bagian I)Partisi matriks untuk menghitung nilai eigen (Bagian I)
Partisi matriks untuk menghitung nilai eigen (Bagian I)
 
Matriks eselon baris dan eselon baris tereduksi
Matriks eselon baris dan eselon baris tereduksiMatriks eselon baris dan eselon baris tereduksi
Matriks eselon baris dan eselon baris tereduksi
 
Slide minggu 6 (citra digital)
Slide minggu 6 (citra digital)Slide minggu 6 (citra digital)
Slide minggu 6 (citra digital)
 
Bilangan kompleks lengkap
Bilangan kompleks lengkapBilangan kompleks lengkap
Bilangan kompleks lengkap
 
Aljabar linear:Kebebasan Linear, Basis, dan Dimensi.ppt
Aljabar linear:Kebebasan Linear, Basis, dan Dimensi.pptAljabar linear:Kebebasan Linear, Basis, dan Dimensi.ppt
Aljabar linear:Kebebasan Linear, Basis, dan Dimensi.ppt
 
Fungsi Kompleks (pada bilangan kompleks)
Fungsi Kompleks (pada bilangan kompleks)Fungsi Kompleks (pada bilangan kompleks)
Fungsi Kompleks (pada bilangan kompleks)
 
Regula falsi
Regula falsiRegula falsi
Regula falsi
 
Ruang Hasil kali Dalam ( Aljabar Linear Elementer )
Ruang Hasil kali Dalam ( Aljabar Linear Elementer )Ruang Hasil kali Dalam ( Aljabar Linear Elementer )
Ruang Hasil kali Dalam ( Aljabar Linear Elementer )
 
Matematika Diskrit - 07 teori bilangan - 01
Matematika Diskrit - 07 teori bilangan - 01Matematika Diskrit - 07 teori bilangan - 01
Matematika Diskrit - 07 teori bilangan - 01
 
Himpunan matematika diskrit
Himpunan matematika diskritHimpunan matematika diskrit
Himpunan matematika diskrit
 
Algoritma Pencarian String matching
Algoritma Pencarian String matching Algoritma Pencarian String matching
Algoritma Pencarian String matching
 
Teori bahasa-dan-otomata
Teori bahasa-dan-otomataTeori bahasa-dan-otomata
Teori bahasa-dan-otomata
 
Laporan Praktikum PCD (Pengolahan Citra Digital) menggunakan software ENVI
Laporan Praktikum PCD (Pengolahan Citra Digital) menggunakan software ENVILaporan Praktikum PCD (Pengolahan Citra Digital) menggunakan software ENVI
Laporan Praktikum PCD (Pengolahan Citra Digital) menggunakan software ENVI
 
nilai eigen dan vektor eigen
nilai eigen dan vektor eigennilai eigen dan vektor eigen
nilai eigen dan vektor eigen
 
Cara menggambar graf sederhana matematika diskrit
Cara menggambar graf sederhana matematika diskritCara menggambar graf sederhana matematika diskrit
Cara menggambar graf sederhana matematika diskrit
 
Aljabar 3-struktur-aljabar
Aljabar 3-struktur-aljabarAljabar 3-struktur-aljabar
Aljabar 3-struktur-aljabar
 
Interpolasi Newton
Interpolasi  NewtonInterpolasi  Newton
Interpolasi Newton
 
Grup siklik
Grup siklikGrup siklik
Grup siklik
 
pewarnaan graf
pewarnaan grafpewarnaan graf
pewarnaan graf
 

Viewers also liked

Pcd 014 - fraktal untuk pengolahan citra
Pcd   014 - fraktal untuk pengolahan citraPcd   014 - fraktal untuk pengolahan citra
Pcd 014 - fraktal untuk pengolahan citraFebriyani Syafri
 
Bab 11 citra biner
Bab 11 citra binerBab 11 citra biner
Bab 11 citra binerSyafrizal
 
Pertemuan 4 - Color Image Processing - Citra Digital
Pertemuan 4 - Color Image Processing - Citra DigitalPertemuan 4 - Color Image Processing - Citra Digital
Pertemuan 4 - Color Image Processing - Citra Digitalahmad haidaroh
 
Pengolahan Citra Digital (Resume materi kuliah)
Pengolahan Citra Digital (Resume materi kuliah)Pengolahan Citra Digital (Resume materi kuliah)
Pengolahan Citra Digital (Resume materi kuliah)Abdullah Azzam Al Haqqoni
 
6 b o_ua_2014
6 b o_ua_20146 b o_ua_2014
6 b o_ua_20146klas
 

Viewers also liked (6)

Pcd 014 - fraktal untuk pengolahan citra
Pcd   014 - fraktal untuk pengolahan citraPcd   014 - fraktal untuk pengolahan citra
Pcd 014 - fraktal untuk pengolahan citra
 
Bab 11 citra biner
Bab 11 citra binerBab 11 citra biner
Bab 11 citra biner
 
Pertemuan 4 - Color Image Processing - Citra Digital
Pertemuan 4 - Color Image Processing - Citra DigitalPertemuan 4 - Color Image Processing - Citra Digital
Pertemuan 4 - Color Image Processing - Citra Digital
 
Penggabungan citra
Penggabungan citraPenggabungan citra
Penggabungan citra
 
Pengolahan Citra Digital (Resume materi kuliah)
Pengolahan Citra Digital (Resume materi kuliah)Pengolahan Citra Digital (Resume materi kuliah)
Pengolahan Citra Digital (Resume materi kuliah)
 
6 b o_ua_2014
6 b o_ua_20146 b o_ua_2014
6 b o_ua_2014
 

Similar to Pcd 8

Laporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docx
Laporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docxLaporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docx
Laporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docxkomzud
 
Fungsi kuadrat (2)
Fungsi kuadrat (2)Fungsi kuadrat (2)
Fungsi kuadrat (2)Irviana Rozi
 
Pendeteksian Tepi - Buku Rinaldi Munir
Pendeteksian Tepi - Buku Rinaldi MunirPendeteksian Tepi - Buku Rinaldi Munir
Pendeteksian Tepi - Buku Rinaldi Munirdedidarwis
 
ASLI_ 16_MODUL PRAKTIKUM PENGOLAHAN CITRA DIGITAL v2023.pdf
ASLI_ 16_MODUL PRAKTIKUM PENGOLAHAN CITRA DIGITAL v2023.pdfASLI_ 16_MODUL PRAKTIKUM PENGOLAHAN CITRA DIGITAL v2023.pdf
ASLI_ 16_MODUL PRAKTIKUM PENGOLAHAN CITRA DIGITAL v2023.pdfDikywahyu5
 
76110863 matlab
76110863 matlab76110863 matlab
76110863 matlabJose Costa
 
Bab 8 pendeteksian tepi
Bab 8 pendeteksian tepiBab 8 pendeteksian tepi
Bab 8 pendeteksian tepiSyafrizal
 
.muahmmad ridho algoritme curva
.muahmmad ridho algoritme curva.muahmmad ridho algoritme curva
.muahmmad ridho algoritme curvaMuhamma9
 
Latihan &kasus FTI314-sns
Latihan &kasus FTI314-snsLatihan &kasus FTI314-sns
Latihan &kasus FTI314-snsstaffpengajar
 
Tugas kalkulus
Tugas kalkulusTugas kalkulus
Tugas kalkulusAv Ri
 
Analisa spasial -_vektor
Analisa spasial -_vektorAnalisa spasial -_vektor
Analisa spasial -_vektorIrma Wahyuni
 

Similar to Pcd 8 (20)

Pcd 8
Pcd 8Pcd 8
Pcd 8
 
Pcd 10
Pcd 10Pcd 10
Pcd 10
 
LN s07-machine vision-s2
LN s07-machine vision-s2LN s07-machine vision-s2
LN s07-machine vision-s2
 
Nota fungsi
Nota fungsiNota fungsi
Nota fungsi
 
Laporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docx
Laporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docxLaporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docx
Laporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docx
 
Pcd 14
Pcd 14Pcd 14
Pcd 14
 
Fungsi kuadrat (2)
Fungsi kuadrat (2)Fungsi kuadrat (2)
Fungsi kuadrat (2)
 
Thinning belajar
Thinning belajarThinning belajar
Thinning belajar
 
Pendeteksian Tepi - Buku Rinaldi Munir
Pendeteksian Tepi - Buku Rinaldi MunirPendeteksian Tepi - Buku Rinaldi Munir
Pendeteksian Tepi - Buku Rinaldi Munir
 
ASLI_ 16_MODUL PRAKTIKUM PENGOLAHAN CITRA DIGITAL v2023.pdf
ASLI_ 16_MODUL PRAKTIKUM PENGOLAHAN CITRA DIGITAL v2023.pdfASLI_ 16_MODUL PRAKTIKUM PENGOLAHAN CITRA DIGITAL v2023.pdf
ASLI_ 16_MODUL PRAKTIKUM PENGOLAHAN CITRA DIGITAL v2023.pdf
 
76110863 matlab
76110863 matlab76110863 matlab
76110863 matlab
 
Bab 8 pendeteksian tepi
Bab 8 pendeteksian tepiBab 8 pendeteksian tepi
Bab 8 pendeteksian tepi
 
Pcd 5
Pcd 5Pcd 5
Pcd 5
 
LN s04-machine vision-s2
LN s04-machine vision-s2LN s04-machine vision-s2
LN s04-machine vision-s2
 
.muahmmad ridho algoritme curva
.muahmmad ridho algoritme curva.muahmmad ridho algoritme curva
.muahmmad ridho algoritme curva
 
Bab 05
Bab 05Bab 05
Bab 05
 
Pcd 4
Pcd 4Pcd 4
Pcd 4
 
Latihan &kasus FTI314-sns
Latihan &kasus FTI314-snsLatihan &kasus FTI314-sns
Latihan &kasus FTI314-sns
 
Tugas kalkulus
Tugas kalkulusTugas kalkulus
Tugas kalkulus
 
Analisa spasial -_vektor
Analisa spasial -_vektorAnalisa spasial -_vektor
Analisa spasial -_vektor
 

More from Roziq Bahtiar

Techarea company profile
Techarea company profileTecharea company profile
Techarea company profileRoziq Bahtiar
 
static and dynamic routing
static and dynamic routingstatic and dynamic routing
static and dynamic routingRoziq Bahtiar
 
Perintah perintah dasar linux Operating Sistem
Perintah perintah dasar linux Operating SistemPerintah perintah dasar linux Operating Sistem
Perintah perintah dasar linux Operating SistemRoziq Bahtiar
 
Pengantar algoritma pemrograman
Pengantar algoritma pemrogramanPengantar algoritma pemrograman
Pengantar algoritma pemrogramanRoziq Bahtiar
 
Flowchart progrm linear bilangan bulat
Flowchart progrm linear bilangan bulatFlowchart progrm linear bilangan bulat
Flowchart progrm linear bilangan bulatRoziq Bahtiar
 
Tarby magazine salafiyah kajen
Tarby magazine  salafiyah kajenTarby magazine  salafiyah kajen
Tarby magazine salafiyah kajenRoziq Bahtiar
 
7. pemrograman struktur
7. pemrograman struktur7. pemrograman struktur
7. pemrograman strukturRoziq Bahtiar
 
6. pemrograman pointer
6. pemrograman pointer6. pemrograman pointer
6. pemrograman pointerRoziq Bahtiar
 
5. pemrograman array dan_string
5. pemrograman array dan_string5. pemrograman array dan_string
5. pemrograman array dan_stringRoziq Bahtiar
 
4. pemrograman fungsi
4. pemrograman fungsi4. pemrograman fungsi
4. pemrograman fungsiRoziq Bahtiar
 
3. teknik looping dalam_pemrograman
3. teknik looping dalam_pemrograman3. teknik looping dalam_pemrograman
3. teknik looping dalam_pemrogramanRoziq Bahtiar
 
2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrogramanRoziq Bahtiar
 
1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_dataRoziq Bahtiar
 
3 piksel_dan_histogram
 3 piksel_dan_histogram 3 piksel_dan_histogram
3 piksel_dan_histogramRoziq Bahtiar
 

More from Roziq Bahtiar (20)

Techarea company profile
Techarea company profileTecharea company profile
Techarea company profile
 
static and dynamic routing
static and dynamic routingstatic and dynamic routing
static and dynamic routing
 
Perintah perintah dasar linux Operating Sistem
Perintah perintah dasar linux Operating SistemPerintah perintah dasar linux Operating Sistem
Perintah perintah dasar linux Operating Sistem
 
Pengantar algoritma pemrograman
Pengantar algoritma pemrogramanPengantar algoritma pemrograman
Pengantar algoritma pemrograman
 
Flowchart progrm linear bilangan bulat
Flowchart progrm linear bilangan bulatFlowchart progrm linear bilangan bulat
Flowchart progrm linear bilangan bulat
 
Tarby magazine salafiyah kajen
Tarby magazine  salafiyah kajenTarby magazine  salafiyah kajen
Tarby magazine salafiyah kajen
 
Pcd 11
Pcd 11Pcd 11
Pcd 11
 
7. pemrograman struktur
7. pemrograman struktur7. pemrograman struktur
7. pemrograman struktur
 
6. pemrograman pointer
6. pemrograman pointer6. pemrograman pointer
6. pemrograman pointer
 
5. pemrograman array dan_string
5. pemrograman array dan_string5. pemrograman array dan_string
5. pemrograman array dan_string
 
4. pemrograman fungsi
4. pemrograman fungsi4. pemrograman fungsi
4. pemrograman fungsi
 
3. teknik looping dalam_pemrograman
3. teknik looping dalam_pemrograman3. teknik looping dalam_pemrograman
3. teknik looping dalam_pemrograman
 
2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman
 
1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data
 
Alpro tutor
Alpro tutorAlpro tutor
Alpro tutor
 
Pcd 7
Pcd 7Pcd 7
Pcd 7
 
Eigen
EigenEigen
Eigen
 
3 piksel_dan_histogram
 3 piksel_dan_histogram 3 piksel_dan_histogram
3 piksel_dan_histogram
 
2 pengolahan_citra
 2 pengolahan_citra 2 pengolahan_citra
2 pengolahan_citra
 
Pertemuan 1
Pertemuan 1Pertemuan 1
Pertemuan 1
 

Recently uploaded

Buku Saku Layanan Haji Ramah Lansia 2.pdf
Buku Saku Layanan Haji Ramah Lansia 2.pdfBuku Saku Layanan Haji Ramah Lansia 2.pdf
Buku Saku Layanan Haji Ramah Lansia 2.pdfWahyudinST
 
Dinamika perwujudan Pancasila sebagai Dasar Negara dan Pandangan Hidup Bangsa
Dinamika perwujudan Pancasila sebagai Dasar Negara dan Pandangan Hidup BangsaDinamika perwujudan Pancasila sebagai Dasar Negara dan Pandangan Hidup Bangsa
Dinamika perwujudan Pancasila sebagai Dasar Negara dan Pandangan Hidup BangsaEzraCalva
 
Topik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptx
Topik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptxTopik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptx
Topik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptxsyafnasir
 
Modul Ajar Matematika Kelas 2 Fase A Kurikulum Merdeka
Modul Ajar Matematika Kelas 2 Fase A Kurikulum MerdekaModul Ajar Matematika Kelas 2 Fase A Kurikulum Merdeka
Modul Ajar Matematika Kelas 2 Fase A Kurikulum MerdekaAbdiera
 
Kelompok 1_Karakteristik negara jepang.pdf
Kelompok 1_Karakteristik negara jepang.pdfKelompok 1_Karakteristik negara jepang.pdf
Kelompok 1_Karakteristik negara jepang.pdfCloverash1
 
Catatan di setiap Indikator Fokus Perilaku
Catatan di setiap Indikator Fokus PerilakuCatatan di setiap Indikator Fokus Perilaku
Catatan di setiap Indikator Fokus PerilakuHANHAN164733
 
alat-alat liturgi dalam Gereja Katolik.pptx
alat-alat liturgi dalam Gereja Katolik.pptxalat-alat liturgi dalam Gereja Katolik.pptx
alat-alat liturgi dalam Gereja Katolik.pptxRioNahak1
 
PEMIKIRAN POLITIK Jean Jacques Rousseau.pdf
PEMIKIRAN POLITIK Jean Jacques  Rousseau.pdfPEMIKIRAN POLITIK Jean Jacques  Rousseau.pdf
PEMIKIRAN POLITIK Jean Jacques Rousseau.pdfMMeizaFachri
 
AKSI NYATA Strategi Penerapan Kurikulum Merdeka di Kelas (1).pdf
AKSI NYATA Strategi Penerapan Kurikulum Merdeka di Kelas (1).pdfAKSI NYATA Strategi Penerapan Kurikulum Merdeka di Kelas (1).pdf
AKSI NYATA Strategi Penerapan Kurikulum Merdeka di Kelas (1).pdfTaqdirAlfiandi1
 
TPPK_panduan pembentukan tim TPPK di satuan pendidikan
TPPK_panduan pembentukan tim TPPK di satuan pendidikanTPPK_panduan pembentukan tim TPPK di satuan pendidikan
TPPK_panduan pembentukan tim TPPK di satuan pendidikanNiKomangRaiVerawati
 
Kelompok 2 Karakteristik Negara Nigeria.pdf
Kelompok 2 Karakteristik Negara Nigeria.pdfKelompok 2 Karakteristik Negara Nigeria.pdf
Kelompok 2 Karakteristik Negara Nigeria.pdftsaniasalftn18
 
Kisi-kisi UTS Kelas 9 Tahun Ajaran 2023/2024 Semester 2 IPS
Kisi-kisi UTS Kelas 9 Tahun Ajaran 2023/2024 Semester 2 IPSKisi-kisi UTS Kelas 9 Tahun Ajaran 2023/2024 Semester 2 IPS
Kisi-kisi UTS Kelas 9 Tahun Ajaran 2023/2024 Semester 2 IPSyudi_alfian
 
Konflik, Kekerasan, dan Perdamaian Bagian 1.pptx
Konflik, Kekerasan, dan Perdamaian Bagian 1.pptxKonflik, Kekerasan, dan Perdamaian Bagian 1.pptx
Konflik, Kekerasan, dan Perdamaian Bagian 1.pptxintansidauruk2
 
rpp bangun-ruang-sisi-datar kelas 8 smp.pdf
rpp bangun-ruang-sisi-datar kelas 8 smp.pdfrpp bangun-ruang-sisi-datar kelas 8 smp.pdf
rpp bangun-ruang-sisi-datar kelas 8 smp.pdfGugunGunawan93
 
aksi nyata pendidikan inklusif.pelatihan mandiri pmm
aksi nyata pendidikan inklusif.pelatihan mandiri pmmaksi nyata pendidikan inklusif.pelatihan mandiri pmm
aksi nyata pendidikan inklusif.pelatihan mandiri pmmeunikekambe10
 
POWERPOINT BAHAN AJAR SENYAWA KELAS VIII SMP
POWERPOINT BAHAN AJAR SENYAWA KELAS VIII SMPPOWERPOINT BAHAN AJAR SENYAWA KELAS VIII SMP
POWERPOINT BAHAN AJAR SENYAWA KELAS VIII SMPAnaNoorAfdilla
 
AKSI NYATA MODUL 1.2-1 untuk pendidikan guru penggerak.pptx
AKSI NYATA MODUL 1.2-1 untuk pendidikan guru penggerak.pptxAKSI NYATA MODUL 1.2-1 untuk pendidikan guru penggerak.pptx
AKSI NYATA MODUL 1.2-1 untuk pendidikan guru penggerak.pptxWirionSembiring2
 
PPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdf
PPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdfPPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdf
PPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdfNatasyaA11
 
Membuat Strategi Penerapan Kurikulum Merdeka di dalam Kelas
Membuat Strategi Penerapan Kurikulum Merdeka di dalam KelasMembuat Strategi Penerapan Kurikulum Merdeka di dalam Kelas
Membuat Strategi Penerapan Kurikulum Merdeka di dalam KelasHardaminOde2
 
PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.
PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.
PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.aechacha366
 

Recently uploaded (20)

Buku Saku Layanan Haji Ramah Lansia 2.pdf
Buku Saku Layanan Haji Ramah Lansia 2.pdfBuku Saku Layanan Haji Ramah Lansia 2.pdf
Buku Saku Layanan Haji Ramah Lansia 2.pdf
 
Dinamika perwujudan Pancasila sebagai Dasar Negara dan Pandangan Hidup Bangsa
Dinamika perwujudan Pancasila sebagai Dasar Negara dan Pandangan Hidup BangsaDinamika perwujudan Pancasila sebagai Dasar Negara dan Pandangan Hidup Bangsa
Dinamika perwujudan Pancasila sebagai Dasar Negara dan Pandangan Hidup Bangsa
 
Topik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptx
Topik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptxTopik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptx
Topik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptx
 
Modul Ajar Matematika Kelas 2 Fase A Kurikulum Merdeka
Modul Ajar Matematika Kelas 2 Fase A Kurikulum MerdekaModul Ajar Matematika Kelas 2 Fase A Kurikulum Merdeka
Modul Ajar Matematika Kelas 2 Fase A Kurikulum Merdeka
 
Kelompok 1_Karakteristik negara jepang.pdf
Kelompok 1_Karakteristik negara jepang.pdfKelompok 1_Karakteristik negara jepang.pdf
Kelompok 1_Karakteristik negara jepang.pdf
 
Catatan di setiap Indikator Fokus Perilaku
Catatan di setiap Indikator Fokus PerilakuCatatan di setiap Indikator Fokus Perilaku
Catatan di setiap Indikator Fokus Perilaku
 
alat-alat liturgi dalam Gereja Katolik.pptx
alat-alat liturgi dalam Gereja Katolik.pptxalat-alat liturgi dalam Gereja Katolik.pptx
alat-alat liturgi dalam Gereja Katolik.pptx
 
PEMIKIRAN POLITIK Jean Jacques Rousseau.pdf
PEMIKIRAN POLITIK Jean Jacques  Rousseau.pdfPEMIKIRAN POLITIK Jean Jacques  Rousseau.pdf
PEMIKIRAN POLITIK Jean Jacques Rousseau.pdf
 
AKSI NYATA Strategi Penerapan Kurikulum Merdeka di Kelas (1).pdf
AKSI NYATA Strategi Penerapan Kurikulum Merdeka di Kelas (1).pdfAKSI NYATA Strategi Penerapan Kurikulum Merdeka di Kelas (1).pdf
AKSI NYATA Strategi Penerapan Kurikulum Merdeka di Kelas (1).pdf
 
TPPK_panduan pembentukan tim TPPK di satuan pendidikan
TPPK_panduan pembentukan tim TPPK di satuan pendidikanTPPK_panduan pembentukan tim TPPK di satuan pendidikan
TPPK_panduan pembentukan tim TPPK di satuan pendidikan
 
Kelompok 2 Karakteristik Negara Nigeria.pdf
Kelompok 2 Karakteristik Negara Nigeria.pdfKelompok 2 Karakteristik Negara Nigeria.pdf
Kelompok 2 Karakteristik Negara Nigeria.pdf
 
Kisi-kisi UTS Kelas 9 Tahun Ajaran 2023/2024 Semester 2 IPS
Kisi-kisi UTS Kelas 9 Tahun Ajaran 2023/2024 Semester 2 IPSKisi-kisi UTS Kelas 9 Tahun Ajaran 2023/2024 Semester 2 IPS
Kisi-kisi UTS Kelas 9 Tahun Ajaran 2023/2024 Semester 2 IPS
 
Konflik, Kekerasan, dan Perdamaian Bagian 1.pptx
Konflik, Kekerasan, dan Perdamaian Bagian 1.pptxKonflik, Kekerasan, dan Perdamaian Bagian 1.pptx
Konflik, Kekerasan, dan Perdamaian Bagian 1.pptx
 
rpp bangun-ruang-sisi-datar kelas 8 smp.pdf
rpp bangun-ruang-sisi-datar kelas 8 smp.pdfrpp bangun-ruang-sisi-datar kelas 8 smp.pdf
rpp bangun-ruang-sisi-datar kelas 8 smp.pdf
 
aksi nyata pendidikan inklusif.pelatihan mandiri pmm
aksi nyata pendidikan inklusif.pelatihan mandiri pmmaksi nyata pendidikan inklusif.pelatihan mandiri pmm
aksi nyata pendidikan inklusif.pelatihan mandiri pmm
 
POWERPOINT BAHAN AJAR SENYAWA KELAS VIII SMP
POWERPOINT BAHAN AJAR SENYAWA KELAS VIII SMPPOWERPOINT BAHAN AJAR SENYAWA KELAS VIII SMP
POWERPOINT BAHAN AJAR SENYAWA KELAS VIII SMP
 
AKSI NYATA MODUL 1.2-1 untuk pendidikan guru penggerak.pptx
AKSI NYATA MODUL 1.2-1 untuk pendidikan guru penggerak.pptxAKSI NYATA MODUL 1.2-1 untuk pendidikan guru penggerak.pptx
AKSI NYATA MODUL 1.2-1 untuk pendidikan guru penggerak.pptx
 
PPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdf
PPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdfPPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdf
PPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdf
 
Membuat Strategi Penerapan Kurikulum Merdeka di dalam Kelas
Membuat Strategi Penerapan Kurikulum Merdeka di dalam KelasMembuat Strategi Penerapan Kurikulum Merdeka di dalam Kelas
Membuat Strategi Penerapan Kurikulum Merdeka di dalam Kelas
 
PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.
PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.
PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.
 

Pcd 8

  • 1. BAB 8 Operasi pada Citra Biner Dengan berakhirnya bab ini, diharapkan pembaca dapat memahami berbagai hal berikut dan kemudian dapat mencoba untuk mengimplementasikannya.  Pengantar operasi biner  Representasi bentuk  Ekstraksi tepi objek  Mengikuti kontur  Kontur internal  Rantai kode  Perimeter  Luas  Diameter  Fitur menggunakan perimeter, luas, dan diameter  Pusat massa dan fitur menggunakan pusat massa  Fitur dispersi  Pelabelan objek
  • 2. 288 Pengolahan Citra, Teori dan Aplikasi 8.1 Pengantar Operasi Biner Beberapa pemrosesan citra mengacu pada citra biner. Sebagai contoh, dengan menggunakan citra biner, perbandingan panjang dan lebar objek dapat diperoleh. Di depan juga telah dibahas aplikasi citra biner pada morfologi. Namun, tentu saja masih banyak operasi lain yang memanfaatkan citra biner. Beberapa contoh diulas dalam bab ini. 8.2 Representasi Bentuk Fitur suatu objek merupakan karakteristik yang melekat pada objek. Fitur bentuk merupakan suatu fitur yang diperoleh melalui bentuk objek dan dapat dinyatakan melalui kontur, area, dan transformasi, sebagaimana ditunjukkan pada Gambar 8.1. Fitur bentuk biasa digunakan untuk kepentingan identifikasi objek. Sebagai contoh, rasio kebulatan dipakai sebagai salah satu fitur pada identifikasi tanaman (Wu, dkk., 2007) dan Polar Fourier Transform (PFT) dapat dipakai untuk identifikasi daun (Kadir, dkk., 2011). Representasi bentuk Kontur    Area    Kode rantai Hampiran poligon … Rasio kebulatan Transformasi jarak … Transformasi    Transformasi Fourier Transformasi PFT … Gambar 8.1 Representasi bentuk 8.3 Ekstraksi Tepi Objek Tepi objek pada citra biner dapat diperoleh melalui algoritma yang dibahas oleh Davis (1990). Pemrosesan dilakukan dengan menggunakan 8-ketetanggaan. Sebagai penjelas, lihatlah Gambar 8.2. Piksel P mempuyai 8 tetangga yang dinyatakan dengan P0 hingga P7. Adapun algoritma tertuang pada Algoritma 8.1.
  • 3. Operasi pada Citra Biner 289 P3 P2 P1 P4 P P0 P5 P6 P7 Gambar 8.2 Piksel dan 8 piksel tetangga ALGORITMA 8.1 – Memperoleh tepi objek Masukan:  f (m,n): Citra masukan berupa citra biner berukuran m baris dan n kolom Keluaran:  g (m, n): Hasil citra yang berisi tepi objek FOR q  2 to m-1 FOR p  2 to n-1 p0  f(q, p+1) p1  f(q-1, p+1) p2  f(q-1, p) p3  f(q-1, p-1) p4  f(q, p-1) p5  f(q+1, p-1) p6  f(q+1, p) p7  f(q+1, p+1) sigma  p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7 IF sigma = 8 g(q, p)  0 ELSE g(q, p)  f(q, p) END-IF END-FOR END-FOR
  • 4. 290 Pengolahan Citra, Teori dan Aplikasi Algoritma 8.1 mengasumsikan bahwa semua piksel pada kolom pertama, kolom, terakhir, baris pertama, dan baris terakhir tidak ada yang bernilai 1. Apabila ada kemungkinan bahwa piksel pada posisi tersebut ada yang bernilai satu, perlu dibentuk larik baru yang berukuran (m+2) x (n+2), yang mencakup seluruh nilai f dan dengan bagian tepi larik berisi 0. Perwujudan skrip berdasarkan algoritma di depan dapat dilihat berikut ini. Program : tepibiner.m function [G] = tepibiner(F) % TEPIBINER Berguna untuk mendapatkan tepi objek % pada citra biner [jum_baris, jum_kolom] = size(F); G = zeros(jum_baris, jum_kolom); for q = 2 : jum_baris - 1 for p = 2 : jum_kolom - 1 p0 = F(q, p+1); p1 = F(q-1, p+1); p2 = F(q-1, p); p3 = F(q-1, p-1); p4 = F(q, p-1); p5 = F(q+1, p-1); p6 = F(q+1, p); p7 = F(q+1, p+1); sigma = p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7; if sigma == 8 G(q, p) = 0; else G(q, p) = F(q, p); end end end Akhir Program
  • 5. Operasi pada Citra Biner Contoh penggunaan fungsi tepibiner dapat dilihat di bawah ini. >> Img = imread('C:Imagedaun_bin.png');  >> G = tepibiner(Img);  >> imshow(G)  >> Hasilnya ditunjukkan pada Gambar 8.3. Gambar 8.3 Tepi objek yang diperoleh melalui tepibiner.m 291
  • 6. 292 Pengolahan Citra, Teori dan Aplikasi Jika objek berlubang, kontur bagian dalam juga akan dibuat oleh fungsi tepibiner. Contoh:  8.4 Mengikuti Kontur Mengikuti kontur (contour following) merupakan suatu metode yang digunakan untuk mendapatkan tepi objek. Terkait dengan hal itu, terdapat istilah kontur eksternal dan kontur internal. Gambar 8.4 memberikan ilustrasi tentang perbedaan kedua jenis kontur tersebut. Terlihat bahwa piksel yang menjadi bagian kontur eksternal (ditandai dengan huruf E) terletak di luar objek, sedangkan piksel yang menjadi bagian kontur internal terletak di dalam objek itu sendiri. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Kontur eksternal Kontur internal Gambar 8.4 Kontur eksternal dan kontur internal
  • 7. Operasi pada Citra Biner 293 Istilah kontur identik dengan batas (boundary). Itulah sebabnya, fitur yang berhubungan dengan kontur acapkali dinamakan deskriptor batas. Contoh pada Gambar 8.5 menunjukkan cara untuk memperoleh kontur eksternal. Dengan menggunakan pendekatan 8-ketetanggaan, diperoleh hasil sebagai berikut: (3,2), (4,2), (5,2), (6,2), (7,2), (8,3), (8,4), (8,5), (8,6), (8,7), (7,8), (6,8), (5,8), (4,8), (3,8), (2,7), (2,6), (2,4), (2,3) Proses untuk mendapatkan titik awal (yaitu (3,1)) dilakukan dengan melakukan pemindaian seperti yang diilustrasikan dalam Gambar 8.5. Setelah titik awal ditemukan, penelusuran dilakukan seperti terlihat pada Gambar 8.5(b). Penelusuran kontur berakhir setelah bertemu kembali dengan titik awal. 1 2 3 4 5 6 7 8 9 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 1 1 1 1 1 0 0 4 0 0 1 1 1 1 1 0 5 0 0 1 1 1 1 1 6 0 0 1 1 1 1 7 0 0 1 1 1 8 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Titik awal Kontur eksternal Gambar 8.5 Proses penelusuran kontur
  • 8. 294 Pengolahan Citra, Teori dan Aplikasi Label yang digunakan pada penelusuran kontur ditunjukkan pada Gambar 8.6(a). Piksel tetangga yang diberi latarbelakang hitam merupakan tetangga yang dijadikan acuan untuk mencari titik kedua yang akan menjadi bagian kontur. Dengan cara seperti itu, piksel yang berada di atas piksel titik awal ataupun yang berada di kanannya tidak mungkin menjadi piksel kedua yang merupakan bagian kontur. 3 2 1 3 2 1 4 P 0 4 P 0 5 6 7 5 6 7 (a) Label tetangga untuk penelusuran kontur (b) Tetangga berwarna hitam Sebagai basis pencarian titik kedua Gambar 8.6 Label posisi tetangga dan pencarian tetangga untuk menentukan bagian kedua pada kontur Penelusuran untuk piksel-piksel berikutnya dilakukan dengan cara yang khusus. Untuk kepentingan ini, diperlukan suatu pencatatan untuk mengetahui arah posisi sekarang (C) terhadap posisi sebelum (P) dan berikutnya (N). Sebagai contoh, dcp digunakan untuk mencatat arah posisi sekarang terhadap piksel sebelumnya, dpc untuk mencatat arah posisi sebelum terhadap posisi sekarang, dan dcn untuk mencatat arah posisi sekarang terhadap piksel berikutnya. Berdasarkan keadaan pada Gambar 8.6(a), hubungan antara dcp dan dpc adalah berkebalikan. Oleh karena itu, hubungan tersebut dapat ditabelkan seperti berikut. Tabel 8.1 Hubungan antara dpc dan dcp dcp 0 1 2 3 4 5 6 7 dcp = kebalikan(dcp) 4 5 6 7 0 1 2 3
  • 9. Operasi pada Citra Biner 295 Algoritma untuk mendapatkan hasil seperti yang telah dibahas dapat dilihat di bawah ini (Costa & Cesar, 2001). ALGORITMA 8.2 – Mengikuti kontur Masukan:  f (m,n): Citra masukan berukuran m baris dan n kolom berisi kontur Keluaran:  e (n): kontur dengan n piksel 1. Cari piksel pertama yang akan dijadikan sebagai kontur melalui pemindaian dan disimpan di e[1]. 2. n  2 // Indeks kedua pada kontur e 3. Cari piksel kedua yang menjadi bagian kontur dengan cara yang telah dibahas dan diletakkan di piksel_berikutnya 4. dcn  arah dari e[1] ke piksel kedua. 5. WHILE (piksel_berikutnya  e[1] e[n]  piksel_berikutnya cari_piksel_berikutnya(e(n), dpc, piksel_berikutnya, dcn) nn+1 END-WHILE ALGORITMA 8.3: Memperoleh piksel berikutnya pada kontur cari_piksel_berikutnya(pc , dpc, pb, dcn) // pc = piksel sekarang // dpc = arah piksel sebelumnya ke piksel sekarang // pb = piksel berikutnya yang akan dihasilkan oleh fungsi // dcn = arah piksel sekarang ke piksel berikutnya dcp  kebalikan(dpc) FOR r  0 TO 6 dE  MOD(dcp + r, 8) // Arah eksternal dI  MOD(dcp + r + 1, 8); // Arah internal pE  peroleh_piksel_berikutnya(pc, dE) pI  peroleh_piksel_berikutnya(pc, dI) IF adalah_latarbelakang(pE) AND adalah_objek(pI) pb  pE dcn  dE
  • 10. 296 Pengolahan Citra, Teori dan Aplikasi END-IF END-FOR ALGORITMA 8.4: Memperoleh piksel berikutnya peroleh_piksel_berikutnya(pc, d) // pc = piksel sekarang // d = arah piksel berikutnya // Nilai balik: piksel berikutnya XP  [1, 1, 0, -1, -1, -1, 0, 1]; YP  [0, -1, -1, -1, 0, 1, 1, 1]; cx  bagian x dari pc + XP(d+1); cy  bagian y dari pc + YP(d+1); Implementasi metode “mengikuti kontur” ditunjukkan berikut ini. Program : get_contour.m function [Kontur] = get_contour(BW) % GET_CONTOUR Berfungsi untuk memperoleh kontur eksternal % dari suatu citra biner BW % Hasil berupa Kontur yang berisi pasangan X dan Y dari setiap % piksel yang menyusun kontur. Kolom 1 menyatakan Y dan % kolom 2 menyatakan X % Peroleh kontur % Proses rantai kode % Arah sebelumnya ke sekarang DPC = [0, 1, 2, 3, 4, 5, 6, 7]; % Arah sekarang ke sebelumnya DCP = [4, 5, 6, 7, 0, 1, 2, 3]; % Arah 0 1 2 3 4 5 6 7 % terhadap posisi sekarang XP = [1, 1, 0, -1, -1, -1, 0, 1]; YP = [0, -1, -1, -1, 0, 1, 1, 1]; % Peroleh titik awal [tinggi, lebar] = size(BW);
  • 11. Operasi pada Citra Biner 297 % Cari titik awal x1 = 1; y1 = 1; selesai = false; for baris = 1 : tinggi for kolom = 1 :lebar if BW(baris, kolom) == 1 y1 = baris; x1 = kolom-1; selesai = true; Kontur(1,1) = y1; Kontur(1,2) = x1; break; end end if selesai break; end end % Proses piksel kedua for i = 4 : 7 if BW(y1+YP(i+1), x1+XP(i+1)) == 0 dcn = i; % Arah sekarang ke sesudahnya break; end end yberikut = y1 + YP(dcn+1); xberikut = x1 + XP(dcn+1); indeks = 2; % Indeks kedua % Proses peletakan piksel kedua dan seterusnya % ke array Kontur while (yberikut ~= Kontur(1,1)) || (xberikut ~= Kontur(1,2)) Kontur(indeks,1) = yberikut; Kontur(indeks,2) = xberikut; dpc = dcn; % Arah sebelum ke sekarang diisi % dengan arah sekarang ke berikutnya % Cari piksel berikutnya for r = 0 : 7 dcp = DCP(dpc+1); de = rem(dcp+r, 8); di = rem(dcp+r+1, 8); cxe cye cxi cyi = = = = Kontur(indeks,2) Kontur(indeks,1) Kontur(indeks,2) Kontur(indeks,1) + + + + XP(de+1); YP(de+1); XP(di+1); YP(di+1); if (BW(cye, cxe) == 0) && (BW(cyi, cxi) == 1) yberikut = cye; xberikut = cxe; break;
  • 12. 298 Pengolahan Citra, Teori dan Aplikasi end end % Naikkan indeks indeks = indeks + 1; end Akhir Program Contoh untuk menguji fungsi get_contour: >> Daun = imread('c:imagedaun_bin.png');  >> C = get_contour(Daun);  >> Dengan cara seperti itu, C berisi data piksel yang menjadi kontur citra biner daun_bin.png. Untuk membuktikan bahwa C berisi kontur daun, berikan kode seperti berikut: >> D = zeros(size(Daun));  >> for p=1:length(C)  D(C(p,1), C(p,2)) = 1;  end  >> imshow(D)  Pertama-tama, perintah D = zeros(size(Daun));  digunakan untuk membentuk matriks berukuran sama dengan citra Daun dan seluruhnya diisi dengan nol. Selanjutnya, >> for p=1:length(C)  D(C(p,1), C(p,2)) = 1; 
  • 13. Operasi pada Citra Biner 299 end  >> digunakan untuk membuat matriks D yang sesuai dengan nilai-nilai koordinat pada larik C diisi dengan angka 1. Dengan demikian, D merekam kontur yang tercatat pada C. Gambar 8.7 menunjukkan hasil imshow(D). Gambar 8.7 Gambar kontur yang diperoleh melalui get_contour
  • 14. 300 Pengolahan Citra, Teori dan Aplikasi 8.5 Kontur Internal Salah satu cara untuk mendapatkan kontur internal yang telah diurutkan menurut letak piksel, yaitu dengan memanfaatkan algoritma pelacakan kontur Moore. Algoritma ini antara lain digunakan pada peta topografik digital (Pradha, dkk., 2010). ALGORITMA 8.5 – Memperoleh kontur internal dengan pelacakan kontur Moore Masukan:  f (m,n): Citra masukan berukuran m baris dan n kolom Keluaran:  kontur (s): Larik yang berisi piksel-piksel kontur sebanyak s 1. Dapatkan piksel terkiri dan teratas yang bernilai 1. Selanjutnya, posisi piksel dicatat pada b0 dan posisi untuk memperoleh piksel berikutnya dicatat pada c0, yang mulamula diisi dengan 4 (arah barat pada Gambar 8.8(d)). 2. Periksa 8 tetangga b0 searah jarum jam dimulai dari c0. Piksel pertama yang bernilai 1 dicatat pada b1. Adapun posisi yang mendahului b1 dicatat pada c1. 3. kontur(1)  b0, kontur(2)  b1, jum  2 4. b  b1 dan c  c1 5. WHILE true a. Cari piksel pada 8 tetangga yang pertama kali bernilai 1 dengan pencarian dimulai dari arah c dengan menggunakan pola arah jarum jam. b. Catat posisi piksel tersebut ke b. c. Catat posisi yang mendahului piksel tersebut ke c. d. Tambahkan b sebagai bagian kontur: jum  jum + 1 kontur(jum)  b e. IF b = b0 Keluar dari WHILE END-IF END-WHILE Algoritma di atas akan membuat indeks pertama dan indeks terakhir pada kontur berisi nilai yang sama yaitu b0. Jika dikehendaki untuk tidak
  • 15. Operasi pada Citra Biner 301 menyertakan nilai yang sama pada bagian akhir larik kontur, elemen tersebut tinggal diabaikan saja. Untuk memahami proses kerja pada algoritma Moore, perhatikan Gambar 8.8. Gambar 8.8(a) menyatakan keadaan objek pada citra. Piksel yang bernilai 1 menyatakan bagian objek dan yang bernilai 0 adalah bagian latarbelakang. Pada contoh tersebut, pelacakan akan dimulai pada posisi (2,2), yaitu piksel bagian objek yang terletak paling kiri dan paling atas. Adapun titik pencarian untuk piksel kedua dimulai di arah barat atau arah kiri piksel (2,2) tersebut. Pencarian dilakukan searah jarum jam. Pada langkah pertama, diperoleh piksel pada posisi (2,3). Pencarian berikutnya akan dimulai di posisi (1,3), yaitu yang ditandai dengan bulatan. Pada pencarian kedua, piksel yang didapat, yaitu posisi (2,4), dengan titik pencarian berikutnya dimulai di posisi (1,4). Pada pencarian ketiga, piksel yang didapat adalah pada (2,5), dengan titik pencarian berikutnya dimulai di posisi (1,5). Pada pencarian keempat, piksel yang didapat yaitu (3,5), dengan titik pencarian berikutnya dimulai di posisi (3,6). Jika langkah seperti itu terus diulang, suatu ketika akan diperoleh piksel yang sama dengan piksel yang pertama kali menjadi bagian kontur. Saat itulah proses untuk melacak kontur diakhiri. Semua langkah yang terjadi untuk contoh Gambar 8.8(a) ditunjukkan pada Gambar 8.8(b). Penomoran arah pencarian ditunjukkan pada Gambar 8.8(d), sedangkan hasil kontur diperlihatkan pada Gambar 8.8(c).
  • 16. 302 Pengolahan Citra, Teori dan Aplikasi 1 2 3 4 5 1 0 0 0 0 0 0 1 1 1 1 0 3 0 0 1 1 1 0 4 0 1 1 1 0 0 5 0 0 1 1 1 0 6 0 0 0 0 0 3 0 2 2 1 6 0 1 1 1 1 1 1 1 1 1 1 1 1 4 1 Objek (a) (b) 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 3 0 0 Piksel objek paling kiri dan paling atas sebagai titik awal pelacakan 0 2 1 4 Kontur (c) 5 0 6 7 (d) Gambar 8.8 Penjelasan pelacakan kontur dengan menggunakan Algoritma Moore Implementasi algoritma Moore ditunjukkan berikut ini. Program : inbound_tracing.m function [Kontur] = inbound_tracing(BW) % INBOUND_TRACING Memperoleh kontur yang telah terurutkan % dengan menggunakan algoritma pelacakan kontur Moore [jum_baris, jum_kolom] = size(BW); % Peroleh piksel awal selesai = false; for p = 1 : jum_baris for q = 1 : jum_kolom if BW(p, q) == 1 b0.y = p;
  • 17. Operasi pada Citra Biner b0.x = q; selesai = true; break; end end if selesai break; end end c0 = 4; % Arah barat % Periksa 8 tetangga dan cari piksel pertama yang bernilai 1 for p = 1 : 8 [dy, dx] = delta_piksel(c0); if BW(b0.y + dy, b0.x + dx) == 1 b1.y = b0.y + dy; b1.x = b0.x + dx; c1 = sebelum(c0); break; else c0 = berikut(c0); end end Kontur=[]; Kontur(1, 1) Kontur(1, 2) Kontur(2, 1) Kontur(2, 2) = = = = b0.y; b0.x; b1.y; b1.x; %Kontur n = 2; % Jumlah piksel dalam kontur b = b1; c = c1; % Ulang sampai berakhir while true for p = 1 : 8 [dy, dx] = delta_piksel(c); if BW(b.y + dy, b.x + dx) == 1 b.y = b.y + dy; b.x = b.x + dx; c = sebelum(c); n = n + 1; Kontur(n, 1) = b.y; Kontur(n, 2) = b.x; break; else c = berikut(c); end 303
  • 18. 304 Pengolahan Citra, Teori dan Aplikasi end % Kondisi pengakhir pengulangan if (b.y == b0.y) && (b.x == b0.x) break; end end return function [b] = berikut(x) if x == 0 b = 7; else b = x - 1; end function [s] = sebelum(x) if x == 7 s = 0; else s = x + 1; end if s < 2 s = 2; elseif s < 4 s = 4; elseif s < 6 s = 6; else s = 0; end function [dy, dx] = delta_piksel(id) if id == 0 dx = 1; dy = 0; elseif id == 1 dx = 1; dy = -1; elseif id == 2 dx = 0; dy = -1; elseif id == 3 dx = -1; dy = -1; elseif id == 4 dx = -1; dy = 0; elseif id == 5 dx = -1; dy = 1; elseif id == 6 dx = 0; dy = 1; elseif id == 7 dx = 1; dy = 1; end Akhir Program
  • 19. Operasi pada Citra Biner 305 Contoh penggunaan inbound_tracing : >> D = [ 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 ];  >> P = inbound_tracing(D)  P = 2 2 2 3 2 4 2 5 3 5 4 4 5 5 5 4 5 3 4 2 3 3 2 2 >> Perhatikan, elemen pertama dan terakhir pada P sama. 8.6 Rantai Kode Rantai kode (code chain) merupakan contoh representasi kontur yang mula-mula diperkenalkan oleh Freeman pada tahun 1961. Representasi bentuk dilakukan dengan menggunakan pendekatan 8-ketetanggan. Kode rantai setiap
  • 20. 306 Pengolahan Citra, Teori dan Aplikasi tetangga piksel dinyatakan dengan sebuah angka sebagaimana terlihat pada Gambar 8.9. 3 2 4 5 1 0 6 7 Gambar 8.9 Arah rantai kode beserta kodenya Untuk mempermudah perolehan kode rantai piksel yang menjadi tetangga suatu piksel, perlu pembuatan indeks yang dapat dihitung melalui rumus berikut: 𝑖𝑛𝑑𝑒𝑘𝑠 = 3 ∆𝑦 + ∆𝑥 + 5 (8.1) Dalam hal ini, ∆𝑥 menyatakan selisih nilai kolom dua piksel yang bertetangga dan ∆𝑦 menyatakan selisih nilai baris dua piksel yang bertetangga. Hubungan kode rantai dan indeks pada Persamaan 8.1 tersaji pada Tabel 8.2. Tabel 8.2 Indeks dan kode rantai dua piksel yang bertetangga ∆𝑥 ∆𝑦 0 +1 6 8 0 -1 2 2 -1 +1 5 7 -1 -1 3 1 +1 +1 7 9 +1 -1 1 3 -1 0 4 4 Kode Rantai Indeks = 3 ∆𝑦 + ∆𝑥 + 5 Kode untuk memperoleh kode rantai dapat dilihat berikut ini.
  • 21. Operasi pada Citra Biner 307 Program : chain_code.m function [kode_rantai, % CHAIN_CODE Digunakan % kode rantai dari % misalnya melalui % Kode Kode = xawal, yawal] = chain_code(U) untuk mendapatkan titik awal (x, y) dan kontur U yang datanya telah terurutkan get_contour 1 2 3 4 5 6 7 8 9 ['3', '2', '1', '4', '0', '0', '5', '6', '7' ]; xawal = U(1,2); yawal = U(1,1); kode_rantai = ''; for p=2: length(U) deltay = U(p, 1) - U(p-1, 1); deltax = U(p, 2) - U(p-1, 2); indeks = 3 * deltay + deltax + 5; kode_rantai = strcat(kode_rantai, Kode(indeks)); end Akhir Program Contoh penggunaan fungsi chain_code: >> Daun = imread('c:imagedaun_bin.png');  >> C = inbound_tracing(Daun);  >> [kode, x, y] = chain_code(C)  kode = 007067565666666666665666666666666666666666666766676676676667666766 767666767666676676667666766676667676766667666766666676670676766666 676666766667666676666667667667677676776776776777677767777777676766 677677767776767677677676767676706767776767677676767676776767676767 667667676766766676676767667666766666543434333343343233433333433333 443333333333323233323323342333333433334334333434234434344344444444 445555655656665656666566666656666666666666666666666666666666666666 666666676567666666666666667666666666667666666666676666666666667666 666666666676666666666666766667666766666676666766766767666766766676 666706666766666666666666666666656664566656656665665656565656656566 656666666666666666766666444343233332332332233323333323333333333333 333233334333333233323232323232222322222232221231222222212222121212 212121212122122221221212221222222212222222222222222220122222222222 222222212222212222222222222212222222222222221222222222222223222221 222222222222222222222222222222222212322222222222222222322222223222 323234233343444545554555456455555555556555655655665656566656566566 566656565656656656565645656565656566566656565554533322322322322322 223222223222222322322132222221222221222121221221212122121212121221 212212222212222122212211212121120121211121111211110111111111111211 221112121221211221221222212122122212212221122122122212221212212122
  • 22. 308 Pengolahan Citra, Teori dan Aplikasi 012211212122212121121221221212121212112121221212122221222222222222 22222232222222222100001 x = 131 y = 8 >> Fungsi show_contour berikut digunakan untuk menguraikan kembali kode rantai menjadi koordinat piksel dan kemudian menggambarkan konturnya. Program : show_contour.m function show_contour(x, y, rantai_kode) % SHOW_CONTOUR Contoh untuk menggambar kontur % melalui rantai kode % Masukan fungsi ini adalah hasil % fungsi chain_code % 0 1 2 3 4 5 6 7 Dx = [ +1, +1, 0, -1, -1, -1, 0, +1]; Dy = [ 0, -1, -1, -1, 0, +1, +1, +1]; U = zeros(1,2); U(1,1) = y; U(1,2) = x; for p=2: length(rantai_kode) bilangan = rantai_kode(p) - 48; posx = U(p-1, 2) + Dx(bilangan + 1); posy = U(p-1, 1) + Dy(bilangan + 1); U(p, 1) = posy; U(p, 2) = posx; end % Membentuk gambar kontur maks_x = max(U(p,2)); maks_y = max(U(p,1)); D = zeros(maks_y, maks_x); for p=1: length(U) D(U(p,1), U(p,2)) = 1; end imshow(D); Akhir Program
  • 23. Operasi pada Citra Biner 309 Dengan mendasarkan kode yang dihasilkan melalui get_counter, dapat dilakukan pengujian seperti berikut: >> show_contour(x,y,kode) >> Dengan cara begitu, gambar kontur daun ditampilkan kembali. Kode rantai digunakan pada beberapa penelitian, antara lain untuk pencocokan kurva (Yu, dkk., 2010) dan pengenalan huruf Arab/Farsi (Izakian, dkk., 2008). Namun, representasi kode rantai sebenarnya memiliki kelemahan sebagai berikut (Levner, 2002). 1. Kode cenderung panjang. 2. Sensitif terhadap distorsi dan segmentasi yang tidak sempurna. 3. Sangat bergantung pada penyekalaan ataupun rotasi. Levner menguraikan secara kasar langkah-langkah yang perlu dilakukan untuk menghilangkan ketergantungan terhadap rotasi dan penyekalaan. 8.7 Perimeter Perimeter atau keliling menyatakan panjang tepi suatu objek. Ilustrasinya dapat dilihat pada Gambar 8.10. Perimeter dapat diperoleh dengan menggunakan algoritma berikut. ALGORITMA 8.6 – Estimasi perimeter Masukan:  f (M,N): Citra masukan berukuran M baris dan N kolom Keluaran:  perimeter 1. Peroleh citra biner. 2. Kenakan algoritma deteksi tepi. 3. Perimeter  jumlah piksel pada tepi objek hasil langkah 2.
  • 24. 310 Pengolahan Citra, Teori dan Aplikasi Perimeter daun Luas daun Gambar 8.10 Perimeter dan luas daun Contoh berikut menunjukkan cara menghitung perimeter dengan menggunakan pendekatan di atas. Program : perim1.m function hasil = perim1(BW) % PERIM1 Untuk menghitung perimeter suatu objek pada % BW (citra biner) % hasil menyatakan hasil perhitungan perimeter U = inbound_tracing(BW); hasil = length(U) - 1; Akhir Program
  • 25. Operasi pada Citra Biner 311 Pada skrip di atas, -1 diberikan mengingat elemen pertama dan terakhir U sebenarnya berisi nilai yang sama. Itulah sebabnya, jumlah piksel pada kontur perlu dikurangi satu. Contoh pengujian fungsi perim1: >> Img = imread('C:Imagedaun_bin.png');  >> perim1(Img)  ans = 1409 >> Algoritma estimasi perimeter di depan memberikan hasil yang baik ketika tepi objek terhubung dengan 4-ketetanggaan, tetapi tidak tepat kalau terhubung menurut 8-ketetanggaan (Costa & Cesar, 2001). Hal itu terjadi karena jarak antara dua piksel tidak bersifat konstan (dapat berupa 1 atau √2) pada 8-ketetanggaan, sedangkan jarak selalu 1 pada 4-ketetanggaan. Ilustrasi mengenai jarak antarpiksel dapat dilihat pada Gambar 8.11. 1 1 1 1 1 1 1 1 1 1 1 Jarak 1 1 Jarak √2 Gambar 8.11 Jarak antarpiksel pada 8-ketetanggaan Apabila tepi objek diproses dengan menggunakan rantai kode (dibahas pada Subbab 8.4), perimeter dapat diperkirakan dengan menggunakan rumus: 𝑃 = 𝑁 𝑒 + 𝑁 𝑜 √2 (8.2)
  • 26. 312 Pengolahan Citra, Teori dan Aplikasi dengan Ne menyatakan jumlah kode genap dan No menyatakan jumlah kode ganjil. Contoh berikut menunjukkan penggunaan cara seperti itu. Program : perim2.m function hasil = perim2(BW) % PERIM2 Untuk menghitung perimeter suatu objek pada % BW (citra biner) dengan menggunakan % chain code % % hasil menyatakan hasil perhitungan perimeter U = inbound_tracing(BW); kode_rantai = chain_code(U); jum_genap = 0; jum_ganjil = 0; for p=1: length(kode_rantai) kode = kode_rantai(p); if (kode == '0') || (kode == '2') || (kode == '4') || ... (kode == '6') || (kode == '8') jum_genap = jum_genap + 1; else jum_ganjil = jum_ganjil + 1; end end hasil = jum_genap + jum_ganjil * sqrt(2); Akhir Program Contoh: >> Daun = imread('C:Imagedaun_bin.png');  >> perim2(Daun)  ans = 1605.8 >>
  • 27. Operasi pada Citra Biner 313 8.8 Luas Cara sederhana untuk menghitung luas suatu objek adalah dengan cara menghitung jumlah piksel pada objek tersebut. Algoritmanya sebagai berikut. ALGORITMA 8.7 – Menghitung luas objek Masukan:  f (m,n): Citra masukan berukuran M baris dan N kolom Keluaran:  luas luas  0 FOR p = 1 to m FOR j = 1 to n IF piksel(p, q) dalam objek luas  luas + 1 END-IF END-FOR END-FOR Contoh berikut adalah implementasi algoritma di atas. Program : luas.m function hasil = luas(BW) % LUAS Untuk menghitung luas citra BW (citra biner) [tinggi, lebar] = size(BW); hasil = 0; for p = 1 : tinggi for q = 1 : lebar if BW(p, q) == 1 hasil = hasil + 1; end end
  • 28. 314 Pengolahan Citra, Teori dan Aplikasi end Akhir Program Contoh: >> D = [ 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 ];  >> luas(D)  ans = 13 >> >> Daun = imread('c:imagedaun_bin.png');  >> luas(Daun)  ans = 31862 >> Pendekatan yang lain untuk menghitung luas suatu objek dilakukan melalui kode rantai (Putra, 2010). Perhitungannya sebagai berikut:  Kode 0: Area = Area + Y  Kode 1: Area = Area + (Y + 0.5)  Kode 2: Area = Area + 0  Kode 3: Area = Area – (Y + 0,5)  Kode 4: Area = Area - Y  Kode 5: Area = Area – (Y + 0,5)  Kode 6: Area = Area + 0  Kode 7: Area = Area + (Y + 0,5)
  • 29. Operasi pada Citra Biner Contoh pada 315 Gambar 8.12 mempunyai kode rantai berupa 0770764554341234201. Perhitungan luas dijabarkan dalam Tabel 8.3. Luasnya adalah ∑ 𝐴𝑟𝑒𝑎= 22,5. 1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1 Gambar 8.12 Objek dengan rantai kode berupa 0770764554341234201 Tabel 8.3 Perhitungan luas objek melalui rantai kode Kode pada Rantai Kode 0 7 7 0 7 6 4 5 5 4 3 4 1 2 Ordinat (Y) Luas 8 8 7 6 6 5 4 4 3 2 2 3 3 4 8 7,5 6,5 6 5,5 0 -4 -3,5 -2,5 -2 -2,5 -2 -2,5 0
  • 30. 316 Pengolahan Citra, Teori dan Aplikasi Kode pada Rantai Kode 3 4 2 0 1 Ordinat (Y) Luas 5 6 6 7 7 -5,5 -6 0 7 7,5 Berikut adalah contoh skrip yang digunakan untuk melakukan perhitungan dengan cara di depan. Program : luas2.m function hasil = luas2(BW) % LUAS2 Untuk menghitung luas citra BW (citra biner) % melalui kode rantai [tinggi, lebar] = size(BW); U = inbound_tracing(BW); kode_rantai = chain_code(U); hasil = 0; for p=1: length(kode_rantai) kode = kode_rantai(p); y = tinggi + 1 -U(p); switch kode case '0' hasil = hasil case '1' hasil = hasil case '3' hasil = hasil case '4' hasil = hasil case '5' hasil = hasil case {'2','6'} hasil = hasil case '7' hasil = hasil end end Akhir Program + y; + y + 0.5; - y - 0.5; - y; - y + 0.5; ; + y - 0.5;
  • 31. Operasi pada Citra Biner 317 Contoh penggunaan fungsi luas2: >> X = [ 0 0 0 0 0 0 0 0 0 0  0 0 0 1 1 0 0 0 0 0  0 1 1 1 1 1 0 0 0 0  0 1 1 1 1 1 1 1 0 0  0 0 0 1 1 1 1 1 1 0  0 0 0 1 1 1 1 1 1 0  0 0 1 1 1 1 1 0 0 0  0 0 0 0 1 1 0 0 0 0  0 0 0 0 0 0 0 0 0 0 ];  >> luas2(X)  ans = 22.5000 >> 8.9 Diameter Diameter adalah jarak terpanjang antara dua titik dalam tepi objek. Hal itu dapat dihitung dengan menggunakan metode “Brute force” (Costa dan Cesar, 2001). Algoritmanya sebagai berikut. ALGORITMA 8.8 – Estimasi diameter bentuk Masukan:  f (m,n): Citra masukan berukuran m baris dan n kolom Keluaran:  diameter 1. U  tepi objek (misalnya melalui morfologi) 2. c  jumlah elemen U 3. jarak_maks  0
  • 32. 318 Pengolahan Citra, Teori dan Aplikasi 4. FOR p1 TO c-1 FOR qp+1 TO c IF | U(p) – U(q) | > jarak_maks jarak_maks  | U(p) – U(q) | piksel1  p piksel2  q END-IF END-FOR END-FOR 5. diameter  jarak_maks Pada algoritma di atas, piksel1 dan piksel2 mencatat posisi dua piksel yang memiliki jarak terpanjang. Contoh implementasi algoritma tersebut diberikan berikut ini. Dalam hal ini, fungsi peroleh_diameter memerlukan citra biner sebagai masukan dan memberikan nilai balik berupa panjang objek, dan dua piksel yang mewakili nilai panjang tersebut. Program : peroleh_diameter.m function [diameter, x1, y1, x2, y2] = peroleh_diameter(BW) % PEROLEH_DIAMETER Digunakan untuk menghitung panjang objek % pada citra BW (citra biner). % Hasil: % diameter : panjang objek % x1, y1, x2, y2 : menyatakan dua titik yang % mewakili panjang tersebut U = get_contour(BW); n = length(U); jarak_maks = 0; piksel1 = 0; piksel2 = 0; for p=1 : n-1 for q=p+1 : n jarak = sqrt((U(p,1)-U(q,1)) ^ 2 + (U(p,2)-U(q,2)) ^ 2);
  • 33. Operasi pada Citra Biner 319 if jarak > jarak_maks jarak_maks = jarak; piksel1 = p; piksel2 = q; end end end y1 x1 y2 x2 = = = = U(piksel1, U(piksel1, U(piksel2, U(piksel2, 1); 2); 1); 2); diameter = jarak_maks; Akhir Program Contoh penggunaan fungsi peroleh_diameter diberikan di bawah ini: >> Daun = imread('c:imagedaun_bin.png');  >> [d,x1,y1,x2,y2] = peroleh_diameter(Daun);  >> d d = 515.1641 >> X = [x1,x2]  X = 144 131 >> Y = [y1,y2];  >> line(X,Y, 'Color','r')  >> Hasil dalam bentuk gambar diperlihatkan pada Gambar 8.13.
  • 34. 320 Pengolahan Citra, Teori dan Aplikasi Gambar 8.13 Garis merah menyatakan diameter daun Berdasarkan diameter yang telah dibahas, lebar objek dapat diperoleh. Sebagai contoh, perhatikan Gambar 8.14. Pada contoh tersebut, lebar adalah garis terpanjang yang menghubungkan dua piksel di tepi objek yang tegak lurus terhadap panjang maksimum pada objek. Setelah dua titik dengan jarak terpanjang diperoleh, gradien garis yang melalui kedua piksel tersebut dihitung dengan menggunakan rumus: (𝑦 −𝑦 ) 𝑔𝑟𝑎𝑑1 = (𝑥2 −𝑥1 ) 2 1 (8.3)
  • 35. Operasi pada Citra Biner 321 Selanjutnya, garis yang tegak lurus dengan garis dengan gradien sebesar grad1 mempunyai gradien sebesar: 𝑔𝑟𝑎𝑑2 = − 1 (8.4) 𝑔𝑟𝑎𝑑1 Persoalan berikutnya adalah mencari jarak terbesar antara dua piksel pada kontur daun yang mempunyai gradien sama dengan grad2. Namun, dalam praktiknya toleransi sebesar 10% perlu diberikan karena sangat sulit untuk mendapatkan garis yang tepat sama dengan grad2, terutama kalau objek berukuran kecil. panjang lebar Gambar 8.14 Panjang dan lebar objek Implementasi perhitungan panjang dan lebar objek dapat dilihat pada program berikut. Program : peroleh_lebar.m
  • 36. 322 Pengolahan Citra, Teori dan Aplikasi function [panjang, lebar, x1, y1, x2, y2, x3, ... y3, x4, y4] = peroleh_lebar(BW) % PEROLEH_LEBAR Digunakan untuk memperoleh panjang dan % lebar objek yang terdapat pada % citra biner BW. % Hasil: % panjang = panjang objek % lebar = lebar objek % (x1,y1,x2,y2) = menyatakan posisi lebar objek % (x3,y3,x4,y4) = menyatakan posisi panjang objek U = get_contour(BW); n = length(U); jarak_maks = 0; piksel1 = 0; piksel2 = 0; for p=1 : n-1 for q=p+1 : n jarak = sqrt((U(p,1)-U(q,1)) ^ 2 + ... (U(p,2)-U(q,2)) ^ 2); if jarak > jarak_maks jarak_maks = jarak; piksel1 = p; piksel2 = q; end end end y1 x1 y2 x2 = = = = U(piksel1, U(piksel1, U(piksel2, U(piksel2, 1); 2); 1); 2); panjang = jarak_maks; % Cari dua titik terpanjang yang tegak lurus dengan garis terpanjang maks = 0; posx3 = -1; posx4 = -1; posy3 = -1; posy4 = -1; if (x1 ~= x2) && (y1 ~= y2) % Kedua titik tidak pada kolom atau baris yang sama grad1 = (y1 - y2) / (x1 - x2); grad2 = -1/grad1; for p=1:n-1 for q=p+1:n x3 = U(p, 2); x4 = U(q, 2); pembagi = (x4 if pembagi == continue; end; y3 = U(p, 1); y4 = U(q, 1); - x3); 0 grad3 = (y4-y3)/(x4-x3);
  • 37. Operasi pada Citra Biner 323 if abs(grad3-grad2) < 0.1 * abs(grad2) jarak = sqrt((x3-x4)^2+(y3-y4)^2); if jarak > maks maks = jarak; posx3 posx4 posy3 posy4 = = = = x3; x4; y3; y4; end end end end else if (y1 == y2) % kalau kedua titik pada baris yang sama grad1 = 0; grad2 = inf; for p=1:n-1 for q=p+1:n x3 = U(p,2); y3 = U(p, 1); x4 = U(q,2); y4 = U(q, 1); deltax = (x4 - x3); if (deltax < 0.01) || (deltax > 0.01) continue; end; jarak = sqrt((x3-x4)^2+(y3-y4)^2); if jarak > maks maks = jarak; posx3 posx4 posy3 posy4 = = = = x3; x4; y3; y4; end end end else % kalau kedua titik pada kolom yang berbeda grad1 = inf; grad2 = 0; for p=1:n-1 for q=p+1:n x3 = U(p,2); y3 = U(p, 1); x4 = U(q,2); y4 = U(q, 1); deltay = (y3 - y4); if (deltay < 1.0) || (deltay > 1.0) continue; end jarak = sqrt((x4-x3)^2+(y4-y3)^2); if jarak > maks maks = jarak; posx3 = x3;
  • 38. 324 Pengolahan Citra, Teori dan Aplikasi posx4 = x4; posy3 = y3; posy4 = y4; end end end end end x3 y3 x4 y4 = = = = posx3; posy3; posx4; posy4; lebar = maks; Akhir Program Contoh penggunaan fungsi peroleh_lebar dapat dilihat di bawah ini: >> close all;  >> Daun = imread('C:Imagedaun_bin.png');  >> [d,l,x1,y1,x2,y2,x3,y3,x4,y4] = peroleh_lebar(Daun);  >> imshow(Daun);  >> Xp = [x1 x2];  >> Yp = [y1 y2];  >> Xl = [x3 x4];  >> Yl = [y3 y4];  >> line(Xl,Yl, 'Color','r')  >> line(Xp,Yp, 'Color','r')  Hasilnya ditunjukkan pada Gambar 8.15.
  • 39. Operasi pada Citra Biner 325 Gambar 8.15 Contoh yang menunjukkan panjang dan lebar daun 8.10 Fitur Menggunakan Perimeter, Luas, dan Diameter Fitur seperti perimeter, luas, dan diameter seperti yang telah dibahas tidak dapat digunakan secara mandiri sebagai fitur identifikasi objek. Fitur seperti itu dipengaruhi oleh ukuran objek. Nah, agar tidak bergantung penyekalaan, beberapa fitur dapat diturunkan dari ketiga fitur tersebut. Contoh dapat dilihat di bawah ini.  Kebulatan bentuk adalah perbandingan antara luas objek dan kuadrat perimeter, yang dinyatakan dengan rumus seperti berikut: 𝑘𝑒𝑏𝑢𝑙𝑎𝑡𝑎𝑛( 𝑅) = 4𝜋 𝐴(𝑅) 𝑃 2(𝑅) (8.5)
  • 40. 326 Pengolahan Citra, Teori dan Aplikasi Hasilnya berupa nilai < 1. Nilai 1 menyatakan bahwa objek R berbentuk lingkaran. Kadang fitur ini dinamakan kekompakan (Lee dan Chen, 2003). Contoh dapat dilihat pada Gambar 18.16.  Fitur alternatif yang menggunakan perbandingan antara luas dan perimeter dapat dilihat berikut ini (Rangayyan, 2005). 𝑐𝑓 = 1 − 4𝜋𝐴 (8.6) 𝑃2 Berdasarkan rumus di atas, nilai kekompakan berkisar antara 0 sampai dengan 1. Nilainya berupa nol kalau objek berbentuk lingkaran.  Kerampingan bentuk adalah perbandingan antara lebar dengan panjang, yang dinyatakan dengan rumus seperti berikut: 𝑘𝑒𝑟𝑎𝑚𝑝𝑖𝑛𝑔𝑎𝑛 = 𝑙𝑒𝑏𝑎𝑟 𝑝𝑎𝑛𝑗𝑎𝑛𝑔 (8.7) dengan panjang adalah panjang objek dan lebar adalah lebar objek. Fitur ini terkadang disebut sebagai rasio aspek (Wu, dkk., 2007). Dengan menggunakan fitur ini, objek yang gemuk dan yang kurus dapat dibedakan (lihat Gambar 8.17).
  • 41. Operasi pada Citra Biner Gambar 8.16 Kebulatan bentuk membedakan bentuk daun yang kurus dan yang gemuk Gambar 8.17 Kerampingan bentuk membedakan bentuk daun yang kurus dan yang membulat Berikut adalah contoh fungsi yang digunakan memperoleh kebulatan. 327
  • 42. 328 Pengolahan Citra, Teori dan Aplikasi Program : peroleh_kebulatan.m function rasio = peroleh_kebulatan(BW) % PEROLEH_KEBULATAN Untuk memperoleh rasio kebulatan milik objek % yang terdapat pada citra biner BW p = perim2(BW); a = luas2(BW); rasio = 4 * pi * a / (p^2); Akhir Program Contoh penggunaan fungsi peroleh_kebulatan: >> Daun1 = imread('C:Imageadv.png');  >> peroleh_kebulatan(Daun1)  ans = 0.28708 >> Daun2 = imread('C:Imageaw.png');  >> peroleh_kebulatan(Daun2)  ans = 0.66130 >> Adapun contoh berikut menunjukkan implementasi fungsi yang dipakai untuk menghitung kerampingan objek. Program : peroleh_kerampingan.m function rasio = peroleh_kerampingan(BW) % PEROLEH_KERAMPINGAN Untuk memperoleh rasio kerampingan % milik objek yang terdapat pada citra biner BW [panjang, lebar] = peroleh_lebar(BW);
  • 43. Operasi pada Citra Biner 329 rasio = lebar / panjang; Akhir Program Contoh penggunaan fungsi peroleh_kerampingan: >> Daun1 = imread('C:Imageadv.png');  >> peroleh_kerampingan(Daun1)  ans = 0.14605 >> Daun2 = imread('C:Imageaw.png');  >> peroleh_kerampingan(Daun2)  ans = 0.76921 >> 8.11 Pusat Massa dan Fitur Menggunakan Pusat Massa Pusat massa atau sentroid (centroid) lazim ditemukan dengan menggunakan nilai rerata koordinat setiap piksel yang menyusun objek. Algoritmanya sebagai berikut. ALGORITMA 8.9 – Estimasi diameter bentuk Masukan:  f (m,n): Citra masukan berukuran m baris dan n kolom Keluaran:  pusat_x dan pusat_y 1. 2. 3. 4. pusat_x  0 pusat_y  0 luas  0 FOR q = 1 to m FOR p = 1 to n IF F(q, p) = 1 luas  luas + 1 pusat_x  pusat_x + p pusat_y  pusat_y + q END-IF END-FOR END-FOR 5. pusat_x  pusat_x / luas
  • 44. 330 Pengolahan Citra, Teori dan Aplikasi 6. pusat_y  pusat_y / luas Berikut adalah implementasi untuk memperoleh pusat massa. Program : centroid.m function [pusat_x, pusat_y] = centroid(BW) % CENTROID Untuk memperoleh pusat massa sebuah objek % yang terletak pada citra biner BW [tinggi, lebar] = size(BW); pusat_x = 0; pusat_y = 0; luas = 0; for q = 1 : tinggi for p = 1 : lebar if BW(q, p) == 1 luas = luas + 1; pusat_x = pusat_x + p; pusat_y = pusat_y + q; end end end pusat_x = pusat_x / luas; pusat_y = pusat_y / luas; Akhir Program Contoh penggunaan fungsi centroid: >> Daun = imread('C:Imagedaun_bin.png');  >> [x, y] = centroid(Daun);  >> imshow(Daun);  >> [panjang, lebar] = size(Daun);  >> line([0 lebar], [round(y) round(y)],’Color’,’b’)  >> line([round(x) round(x)], [0 panjang],’Color’,’b’)  >>
  • 45. Operasi pada Citra Biner 331 Pada contoh di atas, line digunakan untuk membuat garis tegak dan garis datar yang melewati pusat massa dan berwarna biru. Hasilnya dapat dilihat pada Gambar 8.18. Pusat massa Gambar 8.18 Contoh untuk menunjukkan centroid Pusat massa banyak digunakan untuk memperoleh fitur lebih lanjut. Beberapa contoh dapat dilihat di bawah ini.  Pusat massa untuk memperoleh fitur dispersi (dibahas pada Subbab 8.12).  Menghitung jarak terpanjang antara pusat massa dan titik dalam kontur (Dmax).  Menghitung jarak terpendek antara pusat massa dan titik dalam kontur (Dmin).
  • 46. 332 Pengolahan Citra, Teori dan Aplikasi  Menghitung jarak rata-rata antara pusat massa dan titik dalam kontur (Dmean).  Histogram jarak antara pusat massa dan titik dalam kontur.  Perbandingan: 𝐷 𝑚𝑎𝑥 𝐷 𝑚𝑖𝑛 , 𝐷 𝑚𝑎𝑥 𝐷 𝑚𝑒𝑎𝑛 , 𝐷 𝑚𝑖𝑛 𝐷 𝑚𝑒𝑎𝑛 Contoh program yang memanfaatkan beberapa fitur yang memanfaatkan pusat massa dapat dilihat di bawah ini. Program : pusat.m function [] = pusat(BW) % PUSAT Contoh untuk menguji beberapa fitur yang % menggunakan pusat massa. BW = Citra biner [px, py] = centroid(BW); U = inbound_tracing(BW); U(length(U),:) = []; % Hapus elemen terakhir rerata = 0; terkecil = 99999999; terbesar = 0; jum_piksel = length(U); for j = 1 : jum_piksel panjang = sqrt((U(j,1)-py)^2 + (U(j,2)-px)^2); rerata = rerata + panjang; if panjang > terbesar terbesar = panjang; end if panjang < terkecil terkecil = panjang; end end rerata = rerata / jum_piksel; terbesar terkecil dmaxmin = terbesar / terkecil; dmaxmean = terbesar / rerata; dminmean = terkecil / rerata; disp(sprintf('max/min = %f', dmaxmin)); disp(sprintf('max/mean = %f', dmaxmean)); disp(sprintf('min/mean = %f', dminmean));
  • 47. Operasi pada Citra Biner 333 Akhir Program Contoh pemakaian fungsi pusat: >> Daun1 = imread('C:Imageadv.png');  >> Daun2 = imread('C:Imageaw.png');  >> pusat(Daun1)  terbesar = 499.18 terkecil = 64.493 max/min = 7.740069 max/mean = 1.994929 min/mean = 0.257741 >> >> pusat(Daun2)  terbesar = 137.58 terkecil = 79.565 max/min = 1.729221 max/mean = 1.399380 min/mean = 0.809255 >> 8.12 Fitur Dispersi Untuk bentuk yang tidak teratur (atau biasa disebut bentuk tidak kompak), Nixon dan Aguado (2002) menyarankan penggunaan fitur dispersi. Sebagai contoh, terdapat tiga bentuk seperti terlihat pada Gambar 8.19. Penggunaan kekompakan bentuk untuk objek pada Gambar 8.19(c) sebagai diskriminator tidak tepat. Mereka menyarankan penggunaan dispersi pada bentuk yang tidak teratur, karena dispersi sangat tepat untuk bentuk seperti itu.
  • 48. 334 Pengolahan Citra, Teori dan Aplikasi (c) Teratur (b) Teratur (a) Tidak teratur Gambar 8.19 Kekompakan objek pada berbagai bentuk Berdasarkan definisi Chen di tahun 1995 (Nixon dan Aguado, 2002), dispersi (atau juga disebut ketidakteraturan) diukur sebagai perbandingan panjang chord utama terhadap area objek. Bila dinyatakan dalam rumus berupa seperti berikut: 𝐼 ( 𝑆) = π max(√(𝑥 𝑖 −𝑥̅ )2+(𝑦 𝑖 −𝑦 2) ̅) A(S) (8.8) dengan (𝑥̅ , ̅) adalah titik pusat massa area A(S) dan A(S) sendiri menyatakan luas 𝑦 objek. Alternatif yang kedua, dispersi dinyatakan sebagai rasio radius maksimum terhadap radius minimum, yang dinyatakan dengan rumus seperti berikut: 𝐼𝑅( 𝑆) = max(√(𝑥 𝑖 −𝑥̅ )2+(𝑦 𝑖 −𝑦 2) ̅) min(√(𝑥 𝑖 −𝑥̅ )2 +(𝑦 𝑖 −𝑦 2 ) ̅) (8.9) Fungsi bernama dispersi berikut dapat digunakan untuk memperoleh fitur kedua dispersi di depan. Program : dispersi.m function [d1, d2] = dispersi(BW) % DISPERSI Contoh untuk menguji beberapa fitur yang % menggunakan pusat massa. BW = Citra biner [px, py] = centroid(BW); U = inbound_tracing(BW);
  • 49. Operasi pada Citra Biner 335 U(length(U),:) = []; % Hapus elemen terakhir rerata = 0; terkecil = 99999999; terbesar = 0; jum_piksel = length(U); for j = 1 : jum_piksel panjang = sqrt((U(j,1)-py)^2 + (U(j,2)-px)^2); rerata = rerata + panjang; if panjang > terbesar terbesar = panjang; end if panjang < terkecil terkecil = panjang; end end a = perim2(BW); d1 = pi * terbesar / a; d2 = terbesar / terkecil; Akhir Program Contoh pemakaian fungsi dispersi: >> Daun1 = imread('C:Imageadv.png');  >> Daun2 = imread('C:Imageaw.png');  >> [d1, d2] = dispersi(Daun1)  d1 = 0.78285 d2 = 7.7401 >> [d1, d2] = dispersi(Daun2)  d1 = 0.57999 d2 = 1.7292 >> 8.13 Pelabelan Objek Citra biner seringkali memperlihatkan sejumlah objek. Sebagai contoh, perhatikan Gambar 8.20. Pada gambar tersebut terdapat 6 objek. Nah, bagaimana
  • 50. 336 Pengolahan Citra, Teori dan Aplikasi membuat aplikasi yang dapat menghitung jumlah objek? Jawabannya adalah melalui pelabelan objek. Gambar 8.20 Citra dengan enam objek Pelabelan memberikan terhadap label yang objek berbeda sesungguhnya (berupa berupa nomor) pada tindakan untuk setiap objek. Pemrosesannya dapat dilaksanakan pada citra biner. Ketentuan yang dilakukan sebagai berikut: 0 𝐵( 𝑦, 𝑥 ) = { 1 2,3, … 𝑝𝑖𝑘𝑠𝑒𝑙 𝑙𝑎𝑡𝑎𝑟𝑏𝑒𝑙𝑎𝑘𝑎𝑛𝑔 𝑝𝑖𝑘𝑠𝑒𝑙 𝑙𝑎𝑡𝑎𝑟𝑑𝑒𝑝𝑎𝑛 𝑙𝑎𝑏𝑒𝑙 𝑜𝑏𝑗𝑒𝑘 (8.10) Contoh berikut memberikan gambaran tentang hasil pelabelan citra biner di Gambar 8.20.
  • 51. Operasi pada Citra Biner 337 Gambar 8.21 Pelabelan pada citra biner Objek yang diberi label akan terlihat jelas jika nilai nol dihilangkan. Hal seperti itu terlihat pada Gambar 8.22. Gambar 8.22 Objek-objek citra yang telah diberi label
  • 52. 338 Pengolahan Citra, Teori dan Aplikasi Cara yang umum digunakan untuk melakukan pelabelan adalah melalui metode pembanjiran (flood filling). Tiga cara untuk melakukan pembanjiran dibahas oleh Burger & Burge (2008), yaitu sebagai berikut.  Pembanjiran secara rekursif: Pendekatan ini dapat diterapkan dengan bahasa pemrograman yang mendukung proses rekursif.  Pembanjiran melalui Depth-first: Teknik ini memerlukan struktur data tumpukan untuk melaksanakan pembanjiran.  Pembanjiran melalui Breadth-first: Teknik ini memerlukan struktur data antrian untuk melaksanakan pembanjiran. Secara umum, proses pelabelan dilakukan melalui algoritma berikut. ALGORITMA 8.10 – Melakukan pelabelan area pada citra biner Masukan:  f (M,N): Citra masukan berukuran M baris dan N kolom Keluaran:  g (M, N): Hasil citra yang telah diberi label 1. g  f 2. label  2 3. FOR baris  1 TO M 4. 5. FOR kolom  1 TO N IF g(baris, kolom) = 1 6. banjiri(g, baris, kolom, label) 7. label  label + 1 8. 9. END-IF END-FOR 10. END-FOR
  • 53. Operasi pada Citra Biner 339 11. RETURN g Algoritma di atas melibatkan fungsi bernama banjiri. Fungsi tersebut akan diwujudkan dengan tiga cara. Dengan menggunakan pendekatan 4-ketetanggaan, pembanjiran secara rekursif dapat dituangkan dalam bentuk algoritma seperti berikut. ALGORITMA 8.11 – Pelabelan suatu area secara rekursif banjiri(f, i, j, label): Masukan:  f (M,N): Citra masukan berukuran M baris dan N kolom  i dan j menyatakan baris dan kolom sebagai biji pembanjiran terhadap area  label menyatakan label untuk area Keluaran:  f (M, N): Hasil citra yang telah diberi label 1. IF koordinat (i, j) berada dalam citra dan f(i, j) = 1 2. f(i, j)  label 3. banjiri( f, i-1, j, label) 4. banjiri( f, i+1, j, label) 5. banjiri( f, i, j-1, label) 6. banjiri( f, i, j+1, label) 7. END-IF Perhatikan bahwa fungsi banjiri memanggil empat fungsi banjiri. Keadaan itulah yang menyatakan bahwa fungsi banjiri adalah fungsi rekursif (fungsi yang memanggil dirinya sendiri). Pembanjiran melalui depth-first (mendalam dulu) memiliki algoritma seperti berikut.
  • 54. 340 Pengolahan Citra, Teori dan Aplikasi ALGORITMA 8.12 – Pelabelan suatu area dengan pendekatan mendalam dulu banjiri(f, i, j, label): Masukan:  f (M,N): Citra masukan berukuran M baris dan N kolom  i dan j menyatakan baris dan kolom sebagai biji pembanjiran terhadap area  label menyatakan label untuk area Keluaran:  f (M, N): Hasil citra yang telah diberi label 1. Menciptakan tumpukan kosong T 2. Menaruh koordinat (i,j) ke tumpukan sebagai biji (push(T, (i,j)) 3. WHILE tumpukan T tidak kosong 4. Mengambil sebuah elemen dari tumpukan T ( (y,x)  pop(T)) 5. IF koordinat (y, x) berada dalam citra dan f(i, j) = 1 6. f(y, x)  label 7. push(S, (y-1, x)) 8. push(S, (y+1, x)) 9. push(S, (y, x-1)) 10. push(S, (y, x+1)) 11. END-IF 12. END-WHILE Untuk mewujudkan Algoritma 8.12, dibutuhkan struktur data bernama tumpukan (stack). Di dalam struktur data tumpukan, push berguna untuk memasukkan data ke dalam tumpukan, sedangkan pop digunakan untuk mengambil data dari tumpukan. Perlu diketahui, tumpukan adalah struktur data yang mempunyai sifat LIFO (Last-In First-Out). Artinya, data yang dimasukkan terakhir kali akan diambil pertama kali.
  • 55. Operasi pada Citra Biner 341 Adapun algoritma pembanjiran melalui breadth-first (melebar dulu) berupa seperti berikut. ALGORITMA 8.13 – Pelabelan suatu area dengan pendekatan melebar dulu banjiri(f, i, j, label): Masukan:  f (M,N): Citra masukan berukuran M baris dan N kolom  i dan j menyatakan baris dan kolom sebagai biji pembanjiran terhadap area  label menyatakan label untuk area Keluaran:  f (M, N): Hasil citra yang telah diberi label 1. Menciptakan antrean kosong A 2. Menaruh koordinat (i,j) ke antrean sebagai biji (insert(A, (i,j)) 3. WHILE antrean A tidak kosong Mengambil sebuah elemen dari antrean A ( (y,x)  remove(A)) IF koordinat (y, x) berada dalam citra dan f(i, j) = 1 f(y, x)  label insert(A, (y-1, x)) insert(A, (y+1, x)) insert(A, (y, x-1)) insert(A, (y, x+1)) END-IF END-WHILE 4. RETURN f(M,N) Untuk mewujudkan Algoritma 8.13, dibutuhkan struktur data bernama antrean (queue). Di dalam struktur data antrean, insert berguna untuk memasukkan data ke dalam antrean, sedangkan remove digunakan untuk mengambil data dari
  • 56. 342 Pengolahan Citra, Teori dan Aplikasi antrean. Perlu diketahui, tumpukan adalah struktur data yang mempunyai sifat FIFO (First-In First-Out). Artinya, data yang dimasukkan pertama kali akan diambil pertama kali. Berdasarkan ketiga jenis pendekatan pembanjiran tersebut, Burger & Burge (2008) menyatakan bahwa hanya pembanjiran melalui breadth-first yang secara praktis memberikan hasil yang terbaik. Pembanjiran secara rekursif umumnysnya memiliki kendala terhadap penggunaan tumpukan (stack), yang biasanya sangat terbatas pada bahasa pemrograman tertentu. Adapun pembanjiran menggunakan depth-first mempunyai kelemahan pada eksekusi yang sangat lama. Meski faktanya seperti itu, pembanjiran melalui breadth-first pun memakan waktu yang sangat lama bila ukuran citra melebihi 50 x 50 piksel dan mengandung objek yang berbentuk kompleks. Itulah sebabnya, disarankan untuk mempelajari algoritma yang lain, untuk mendapatkan komputasi yang efisien. Sebagai contoh, pada Octave dan MATLAB terdapat fungsi bwlabel yang berguna untuk melakukan pelabelan objek. Kode fungsi tersebut dapat dipelajari untuk memungkinkan penulisan kode dengan bahasa pemrograman yang lain. Sebagai contoh, akan diberikan implementasi menggunakan pendekatan breadth-first. Kodenya seperti berikut. Program : labeli.m function G = labeli(F) % Memberi label pada area di dalam citra biner F % dengan menggunakan 4-ketetanggan % Hasil berupa citra G % Bentuk Antrean awal algoritma yang
  • 57. Operasi pada Citra Biner 343 Maks_antre = 50000; Antrean = cell(Maks_antre,1); depan = 1; belakang = 1; G = double(F); % Agar bisa diisi dengan nilai selain 0 dan 1 [m, n] = size(G); label = 2; for i=1 : m for j=1 : n if G(i, j) == 1 % Kosongkan antrean depan = 1; belakang = 1; % Bentuk simpul dan masukkan ke dalam antrean simpul.y = i; simpul.x = j; if belakang == Maks_antre if depan == 1 error('Kapasitas antrian penuh'); else Antrean{obj.belakang} = simpul; belakang = 1; end else if belakang + 1 == depan error('Kapasitas antrian penuh'); else Antrean{belakang} = simpul; belakang = belakang + 1; end end while belakang ~= depan % Selama antrean tidak kosong %Ambil dan hapus data pada Antrean simpul = Antrean{depan}; if depan == 50000 depan = 1; else depan = depan + 1; end if simpul.x > 0 && simpul.x simpul.y > 0 && simpul.y G(simpul.y, simpul.x) == G(simpul.y, simpul.x) = <= n && ... <= m && ... 1 label; x = simpul.x; y = simpul.y; simpul.y = y-1; simpul.x = x; % Sisipkan ke Antrean if belakang == Maks_antre if depan == 1 error('Kapasitas antrian penuh'); else Antrean{obj.belakang} = simpul;
  • 58. 344 Pengolahan Citra, Teori dan Aplikasi belakang = 1; end else if belakang + 1 == depan error('Kapasitas antrian penuh'); else Antrean{belakang} = simpul; belakang = belakang + 1; end end simpul.y = y+1; simpul.x = x; % Sisipkan ke Antrean if belakang == Maks_antre if depan == 1 error('Kapasitas antrian penuh'); else Antrean{obj.belakang} = simpul; belakang = 1; end else if belakang + 1 == depan error('Kapasitas antrian penuh'); else Antrean{belakang} = simpul; belakang = belakang + 1; end end simpul.y = y; simpul.x = x-1; % Sisipkan ke Antrean if belakang == Maks_antre if depan == 1 error('Kapasitas antrian penuh'); else Antrean{obj.belakang} = simpul; belakang = 1; end else if belakang + 1 == depan error('Kapasitas antrian penuh'); else Antrean{belakang} = simpul; belakang = belakang + 1; end end simpul.y = y; simpul.x = x+1; % Sisipkan ke Antrean if belakang == Maks_antre if depan == 1 error('Kapasitas antrian penuh'); else Antrean{obj.belakang} = simpul; belakang = 1; end else if belakang + 1 == depan error('Kapasitas antrian penuh');
  • 59. Operasi pada Citra Biner 345 else Antrean{belakang} = simpul; belakang = belakang + 1; end end end end label = label + 1; end end end Akhir Program Contoh: >> A = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ];  >> B = labeli(A)  Hasil B dapat dilihat pada Gambar 8.21.
  • 60. 346 Pengolahan Citra, Teori dan Aplikasi  Latihan 1. Jelaskan bahwa fitur suatu objek dapat diperoleh melalui citra biner. 2. Apa yang dimaksud dengan kontur? 3. Pada CD yang tersedia bersama buku ini terdapat citra gambar bernama fork3.gif. Kenakan fungsi tepibiner terhadap citra tersebut untuk memperoleh tepinya. Perlu diperhatikan, citra tersebut bukan berupa citra biner. Jika perintah Anda benar, Anda akan memperoleh hasil seperti berikut: 4. Jelaskan perbedaan antara kontur internal dan kontur eksternal. 5. Gambarkan kontur eksternal untuk citra seperti berikut dengan menggunakan: (a) 4-ketetanggaan (b) 8-ketetanggaan. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • 61. Operasi pada Citra Biner 347 6. Apa fungsi algoritma Moore? 7. Berapa kode rantai untuk gambar yang tertera pada soal Nomor 5? 8. Apakah objek dengan ukuran dan bentuk yang sama tetapi mempunyai posisi yang berbeda (objek yang mengalami translasi) memiliki kode rantai yang sama? Jelaskan! 9. Apa sebenarnya pengertian perimeter itu? 10. Jelaskan kehadiran √2 pada Persamaan 8.2. 11. Luas suatu objek dapat diperoleh dengan menghitung jumlah piksel dalam objek. Tuliskan algoritma untuk menghitung luas dengan cara seperti itu, dengan asumsi citra berukuran m x n. 12. Pendekatan yang lain untuk menghitung luas suatu objek dilakukan melalui kode rantai dengan ketentuan seperti berikut. Kode 0: Area = Area + Y Kode 1: Area = Area + (Y + 0.5) Kode 2: Area = Area + 0 Kode 3: Area = Area – (Y + 0,5) Kode 4: Area = Area - Y Kode 5: Area = Area – (Y + 0,5) Kode 6: Area = Area + 0 Kode 7: Area = Area + (Y + 0,5) Berapakah luas objek yang terdapat pada citra berikut?
  • 62. 348 Pengolahan Citra, Teori dan Aplikasi 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13. Jelaskan fitur-fitur berikut: (a) kebulatan (b) kekompakan (c) kerampingan 14. Apa yang dimaksud dengan centroid? Apa kegunaannya? 15. Apa yang dimaksud dengan panjang chord utama dalam dispersi? Kalau perlu, gambarkan. 16. Terdapat citra seperti berikut. Bagaimana hasil pelabelan atas objek-objek yang terdapat di dalamnya?