Operasi
pada Citra Biner
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
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
P4 P
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
Catatan
Program : tepibiner.m
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
Catatan
Jika objek berlubang, kontur bagian dalam juga akan dibuat oleh
fungsi tepibiner. Contoh:
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 1 1 1 1 1 0 0 0 0 1 1 1 1
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1
0 0 1 1 1 1 1 0 0 0 0 1 1 1 1
0 0 1 1 1 1 1 0 0 0 0 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 Kontur
Gambar 8.4 Kontur eksternal dan kontur internal internal
Operasi pada Citra Biner 293
Catatan
(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 0 0 0 0 0 0 0
2 \ \
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0
3 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1
4 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1
5 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1
6 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1
7 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1
8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Kontur
Titik awal
Gambar 8.5 Proses penelusuran kontur eksternal
294 Pengolahan Citra, Teori dan Aplikasi
3 2 1 3 2 1
4 P 0 4 P 0
5 6 7 5 6 7
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).
pE peroleh_piksel_berikutnya(pc, dE)
pI peroleh_piksel_berikutnya(pc, dI)
END-IF
END-FOR
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];
% Peroleh kontur
% 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];
Kontur(1,1) = y1;
Kontur(1,2) = x1;
break;
end
end
if selesai
break;
end
end
yberikut = y1 + YP(dcn+1);
xberikut = x1 + XP(dcn+1);
break;
end
end
% Naikkan indeks
indeks = indeks + 1;
end
Akhir Program
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,
end
>>
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).
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
1 2 3 4 5 6
1 0 0 0 0 0 0
2 0 1 1 1 1 0 1 1 1 1
3 0 0 1 1 1 0 1 1 1
4 0 1 1 1 0 0 1 1 1
5 0 0 1 1 1 0 1 1 1
6 0 0 0 0 0 0
Objek
(a) (b)
Piksel objek paling
kiri dan paling atas
0 0 0 0 0 0 sebagai titik awal
pelacakan
0 1 1 1 1 0 2
3
0 0 1 0 1 0
0 1 0 1 0 0 4
Kontur
0 0 1 1 1 0 5
6
0 0 0 0 0 0
(c) (d)
Gambar 8.8 Penjelasan pelacakan kontur dengan
menggunakan Algoritma Moore
Program : inbound_tracing.m
b0.x = q;
selesai = true;
break;
end
end
if selesai
break;
end
end
c0 = 4; % Arah barat
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
b = b1;
c = c1;
c = sebelum(c);
n = n + 1;
Kontur(n, 1) = b.y;
Kontur(n, 2) = b.x;
break;
304 Pengolahan Citra, Teori dan Aplikasi
else
c = berikut(c);
end
end
return
if s < 2
s = 2;
elseif s < 4
s = 4;
elseif s < 6
s = 6;
else
s = 0;
end
Akhir Program
>> 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
>>
3 2
4
indeks=3 ∆ y+ ∆ x+ 5 (8.1)
Dalam hal ini, ∆ xmenyatakan selisih nilai kolom dua piksel yang bertetangga dan
∆ y 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
∆x ∆y Kode Rantai Indeks ¿ 3 ∆ y +∆ x +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
Program : chain_code.m
Operasi pada Citra Biner 307
% 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
x = 131
y = 8
>>
308 Pengolahan Citra, Teori dan Aplikasi
Program : show_contour.m
% 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;
U(p, 1) = posy;
U(p, 2) = posx;
end
D = zeros(maks_y, maks_x);
for p=1: length(U)
D(U(p,1), U(p,2)) = 1;
end
imshow(D);
Akhir Program
>> show_contour(x,y,kode)
>>
Operasi pada Citra Biner 309
8.7 Perimeter
Perimeter
daun
Luas daun
Program : perim1.m
U = inbound_tracing(BW);
hasil = length(U) - 1;
Akhir Program
Operasi pada Citra Biner 311
1 1 1 1
1 1
1
1
P=N e + N o √ 2 (8.2)
312 Pengolahan Citra, Teori dan Aplikasi
Program : perim2.m
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
Akhir Program
Contoh:
8.8 Luas
Cara sederhana untuk menghitung luas suatu objek adalah dengan cara
menghitung jumlah piksel pada objek tersebut. Algoritmanya sebagai berikut.
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
Program : luas.m
hasil = 0;
for p = 1 : tinggi
for q = 1 : lebar
if BW(p, q) == 1
hasil = hasil + 1;
end
end
end
314 Pengolahan Citra, Teori dan Aplikasi
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
>>
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
Area = 0
Program : luas2.m
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
>> 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.
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
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
Operasi pada Citra Biner 319
end
end
y1 = U(piksel1, 1);
x1 = U(piksel1, 2);
y2 = U(piksel2, 1);
x2 = U(piksel2, 2);
diameter = jarak_maks;
Akhir Program
>> X = [x1,x2]
X =
144 131
>> Y = [y1,y2];
>> line(X,Y, 'Color','r')
>>
( y 2− y 1 )
grad 1= (8.3)
(x 2−x 1)
Operasi pada Citra Biner 321
Selanjutnya, garis yang tegak lurus dengan garis dengan gradien sebesar grad1
mempunyai gradien sebesar:
−1
grad 2= (8.4)
grad 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
Program : peroleh_lebar.m
322 Pengolahan Citra, Teori dan Aplikasi
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;
maks = 0;
posx3 = -1;
posx4 = -1;
posy3 = -1;
posy4 = -1;
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;
Operasi pada Citra Biner 323
grad3 = (y4-y3)/(x4-x3);
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);
324 Pengolahan Citra, Teori dan Aplikasi
posx3 = x3;
posx4 = x4;
posy3 = y3;
posy4 = y4;
end
end
end
end
end
x3 = posx3;
y3 = posy3;
x4 = posx4;
y4 = posy4;
lebar = maks;
Akhir Program
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.
A( R)
kebulatan ( R )=4 π (8.5)
P2 ( R)
326 Pengolahan Citra, Teori dan Aplikasi
4 πA
cf =1− (8.6)
P2
lebar
kerampingan= (8.7)
panjang
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
Program : peroleh_kebulatan.m
p = perim2(BW);
a = luas2(BW);
rasio = 4 * pi * a / (p^2);
Akhir Program
Program : peroleh_kerampingan.m
Akhir Program
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
Program : centroid.m
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
Akhir Program
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
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.
Dmax Dmax Dmin
Perbandingan: , ,
Dmin Dmean D mean
Program : pusat.m
function [] = pusat(BW)
% PUSAT Contoh untuk menguji beberapa fitur yang
% menggunakan pusat massa. BW = Citra biner
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;
terbesar
terkecil
dmaxmin = terbesar / terkecil;
dmaxmean = terbesar / rerata;
dminmean = terkecil / rerata;
Akhir Program
terbesar = 137.58
terkecil = 79.565
max/min = 1.729221
max/mean = 1.399380
min/mean = 0.809255
>>
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
2 2
I ( S)=
√
π max ( ( x i− x́ ) + ( yi − ý ) )
(8.8)
A (S)
dengan (x́, ý) 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:
2 2
IR ( S ) =
√
max ( ( x i− x́ ) + ( y i− ý ) )
(8.9)
2 2
min ( √( x − x́ ) + ( y − ý ) )
i i
Program : dispersi.m
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;
a = perim2(BW);
d1 = pi * terbesar / a;
d2 = terbesar / terkecil;
Akhir Program
0 piksel latarbelakang
B ( y , x )=
{ 1 piksel latardepan
2,3 , … label objek
(8.10)
Objek yang diberi label akan terlihat jelas jika nilai nol dihilangkan. Hal seperti
itu terlihat pada Gambar 8.22.
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
11. RETURN g
Operasi pada Citra Biner 339
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
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
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
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.
Catatan
Program : labeli.m
function G = labeli(F)
% Memberi label pada area di dalam citra biner F
% dengan menggunakan 4-ketetanggan
% Hasil berupa citra G
belakang = 1;
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 = Antrean{depan};
if depan == 50000
depan = 1;
else
depan = depan + 1;
end
x = simpul.x; y = simpul.y;
end
else
if belakang + 1 == depan
error('Kapasitas antrian penuh');
else
Antrean{belakang} = simpul;
belakang = belakang + 1;
end
end
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)
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 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:
0 0 0 0 0 0 0
\
0 0 0 0 0 0 0
0
0 0 1 1 1 0 0
0 0 1 1 1 1 1
0 0 0 1 1 1 0
0 0 1 1 1 1 0
0 0 1 1 0 1 1
0 0 0 0 0 0 0
Operasi pada Citra Biner 347
12. Pendekatan yang lain untuk menghitung luas suatu objek dilakukan melalui
kode rantai dengan ketentuan seperti berikut.
0 0 0 0 0 0 0
\
0 0 0 0 0 0 0
0
0 0 1 1 1 0 0
0 0 1 1 1 1 1
0 0 0 1 1 1 1
0 0 1 1 1 1 1
0 0 1 1 0 1 0
0 0 0 0 0 0 0