bab 8 - rizafennisya.files.wordpress.com · 8.1 pengantar operasi biner beberapa pemrosesan citra...

62
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

Upload: buikhuong

Post on 16-Mar-2019

246 views

Category:

Documents


5 download

TRANSCRIPT

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

Area Transformasi Kontur

Kode rantai

Hampiran poligon

Rasio kebulatan

Transformasi jarak

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 291

Contoh penggunaan fungsi tepibiner dapat dilihat di bawah ini.

>> Img = imread('C:\Image\daun_bin.png');

>> G = tepibiner(Img);

>> imshow(G)

>>

Hasilnya ditunjukkan pada Gambar 8.3.

Gambar 8.3 Tepi objek yang diperoleh melalui tepibiner.m

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 1

0 0 0

0 0 0

1 1 1

0 0 0

0 0 0

1 0 0

0 0 1

0 0 1

0 0 1

1 1 1

1 1 1

1 1 1

1 0 0

1 0 0

1 0 0

0 0 1

0 0 0

0 0 0

1 1 1

0 0 0

0 0 0

1 0 0

0 0 0

0 0 0

0 0

\

0

0

0 0 0

0 0 1

0 0 0

0 0 0

1 1 1

0 0 0

0 0 0

1 0 0

0 0 1

0 0 1

0 0 1

1 1 1

1 1 1

1 1 1

1 0 0

1 0 0

1 0 0

0 0 1

0 0 0

0 0 0

1 1 1

0 0 0

0 0 0

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

0 0

\

0

0

0 0 0

0 0 1

0 0 0

0 0 0

1 1 1

0 0 0

0 0 0

1 0 0

0 0 1

0 0 1

0 0 1

1 1 1

1 1 1

1 1 1

1 0 0

1 0 0

1 0 0

0 0 1

0 0 0

0 0 0

1 1 1

0 0 0

0 0 0

1 0 0

0 0 0

0 0 0

Titik awal Kontur

eksternal

1

2

3

4

5

6

7

8

9

0 0

\

0

0

0 0 0

0 0 1

0 0 0

0 0 0

1 1 1

0 0 0

0 0 0

1 0 0

0 0 1

0 0 1

0 0 1

1 1 1

1 1 1

1 1 1

1 0 0

1 0 0

1 0 0

0 0 1

0 0 0

0 0 0

1 1 1

0 0 0

0 0 0

1 0 0

0 0 0

0 0 0

1 2 3 4 5 6 7 8 9

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

4 P 0

5 6 7

3 2 1

4 P 0

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

kebalikan(dcp)

0 4

1 5

2 6

3 7

4 0

5 1

6 2

7 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 = Kontur(indeks,2) + XP(de+1);

cye = Kontur(indeks,1) + YP(de+1);

cxi = Kontur(indeks,2) + XP(di+1);

cyi = Kontur(indeks,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:\image\daun_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 mula-mula 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

0 0 0

0 1 1

0 0 1

0 0 0

1 1 0

1 1 0

0 1 1

0 0 1

0 0 0

1 0 0

1 1 0

0 0 0

1 1

1

1 1

1 1

1 1

1

1

1 1

Piksel objek paling

kiri dan paling atas

sebagai titik awal

pelacakan 0 0 0

0 1 1

0 0 1

0 0 0

1 1 0

0 1 0

0 1 0

0 0 1

0 0 0

1 0 0

1 1 0

0 0 0

Objek

Kontur

1 2 3 4

0

1 2

3

4

5 6

7

(a) (b)

(c) (d)

1 2 3 4 5 6

1

2

3

4

5

6

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 303

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) = b0.y;

Kontur(1, 2) = b0.x;

Kontur(2, 1) = b1.y;

Kontur(2, 2) = 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

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 1

4 0

5 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

∆𝑥 ∆𝑦 Kode Rantai Indeks = 3 ∆𝑦 + ∆𝑥 + 5

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 untuk memperoleh kode rantai dapat dilihat berikut ini.

Operasi pada Citra Biner 307

Program : chain_code.m

function [kode_rantai, xawal, yawal] = chain_code(U)

% CHAIN_CODE Digunakan untuk mendapatkan titik awal (x, y) dan

% kode rantai dari kontur U yang datanya telah terurutkan

% misalnya melalui get_contour

% Kode 1 2 3 4 5 6 7 8 9

Kode = ['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:\image\daun_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:\Image\daun_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

1

Jarak 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:\Image\daun_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:\image\daun_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 315

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

Ordinat (Y) Luas

0 8 8

7 8 7,5

7 7 6,5

0 6 6

7 6 5,5

6 5 0

4 4 -4

5 4 -3,5

5 3 -2,5

4 2 -2

3 2 -2,5

4 3 -2

1 3 -2,5

2 4 0

316 Pengolahan Citra, Teori dan Aplikasi

Kode pada

Rantai Kode

Ordinat (Y) Luas

3 5 -5,5

4 6 -6

2 6 0

0 7 7

1 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 + y;

case '1'

hasil = hasil + y + 0.5;

case '3'

hasil = hasil - y - 0.5;

case '4'

hasil = hasil - y;

case '5'

hasil = hasil - y + 0.5;

case {'2','6'}

hasil = hasil ;

case '7'

hasil = hasil + y - 0.5;

end

end

Akhir Program

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 p1 TO c-1

FOR qp+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 = U(piksel1, 1);

x1 = U(piksel1, 2);

y2 = U(piksel2, 1);

x2 = U(piksel2, 2);

diameter = jarak_maks;

Akhir Program

Contoh penggunaan fungsi peroleh_diameter diberikan di bawah

ini:

>> Daun = imread('c:\image\daun_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

𝑔𝑟𝑎𝑑1 (8.4)

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 = U(piksel1, 1);

x1 = U(piksel1, 2);

y2 = U(piksel2, 1);

x2 = U(piksel2, 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); y3 = U(p, 1);

x4 = U(q, 2); y4 = U(q, 1);

pembagi = (x4 - x3);

if pembagi == 0

continue;

end;

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 = x3;

posx4 = x4;

posy3 = y3;

posy4 = 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 = x3;

posx4 = x4;

posy3 = y3;

posy4 = 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 = posx3;

y3 = posy3;

x4 = posx4;

y4 = posy4;

lebar = maks;

Akhir Program

Contoh penggunaan fungsi peroleh_lebar dapat dilihat di bawah ini:

>> close all;

>> Daun = imread('C:\Image\daun_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𝜋𝐴

𝑃2 (8.6)

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 327

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.

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:\Image\adv.png');

>> peroleh_kebulatan(Daun1)

ans = 0.28708

>> Daun2 = imread('C:\Image\aw.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:\Image\adv.png');

>> peroleh_kerampingan(Daun1)

ans = 0.14605

>> Daun2 = imread('C:\Image\aw.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. pusat_x 0

2. pusat_y 0

3. luas 0 4. 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:\Image\daun_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:\Image\adv.png');

>> Daun2 = imread('C:\Image\aw.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

(a) Tidak teratur (c) Teratur (b) 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:\Image\adv.png');

>> Daun2 = imread('C:\Image\aw.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 terhadap objek sesungguhnya berupa tindakan untuk

memberikan label yang berbeda (berupa nomor) pada 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. FOR kolom 1 TO N

5. IF g(baris, kolom) = 1

6. banjiri(g, baris, kolom, label)

7. label label + 1

8. END-IF

9. 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 algoritma yang

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

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 <= n && ...

simpul.y > 0 && simpul.y <= m && ...

G(simpul.y, simpul.x) == 1

G(simpul.y, simpul.x) = 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

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

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

0 0 0

0 0 0

1 1 0

0 0 0

0 0 0

0 0 0

0 0 1

0 0 0

0 0 1

1 1 1

1 1 1

1 1 1

1 0 0

0 0 0

0 0 0

0 0 1

0 0 0

0 0 0

1 0 1

0 0 0

0 0 0

1 0 0

0 0 0

0 0 0

Latihan

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 1

0 0 0

0 0 0

1 1 0

0 0 0

0 0 0

0 0 0

0 0 1

0 0 0

0 0 1

1 1 1

1 1 1

1 1 1

1 0 0

1 0 0

1 0 0

0 0 1

0 0 0

0 0 0

1 0 1

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?