Anda di halaman 1dari 14

OPERASI

PADA CITRA BINER


Memahami Operasi Citra Biner
Ekstraksi tepi
CAPAIAN Mengikuti Kontur
PEMBELAJARAN Kontur Internal
Rantai Kode
Beberapa pemrosesan citra
mengacu pada citra biner.
PENGANTAR
OPERASI
BINER Sebagai contoh, dengan
menggunakan citra biner,
perbandingan panjang dan
lebar objek dapat diperoleh.
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
Fitur bentuk biasa digunakan untuk
kepentingan identifikasi objek.

Gambar 1 Representasi Bentuk


EKSTRAKSI TEPI OBJEK
Tepi objek pada citra biner dapat diperoleh melalui algoritma yang
dibahas oleh Davis (1990)

Pemrosesan Citra dilakukan dengan ALGORITMA 8.1 – Memperoleh tepi objek

menggunakan 8-ketetanggaan. 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
Gambar 2 Piksel dan 8 piksel tetangga g(q, p)  f(q, p)
END-IF
END-FOR
END-FOR
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

Contoh penggunaan fungsi tepibiner dapat dilihat di bawah ini.


Gambar 3 Tepi objek yang diperoleh melalui tepibiner.m
>> Img = imread('C:\Image\daun_bin.png'); 
>> G = tepibiner(Img); 
>> imshow(G) 
>>
Mengikuti Kontur
cara untuk memperoleh kontur eksternal. Dengan
menggunakan pendekatan 8-ketetanggaan, diperoleh hasil
sebagai berikut:
Mengikuti kontur (contour following)
merupakan suatu metode yang digunakan (3,2), (4,2), (5,2), (6,2), (7,2), (8,3), (8,4), (8,5), (8,6), (8,7),
untuk mendapatkan tepi objek. (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 5.

Gambar 4 Kontur eksternal dan kontur internal

Gambar 5 Proses penelusuran kontur


Label yang digunakan pada
penelusuran kontur ditunjukkan pada
Gambar 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.

Gambar 6
Label posisi tetangga dan pencarian tetangga
untuk menentukan bagian kedua pada kontur
ALGORITMA 8.3: Memperoleh piksel berikutnya pada kontur

ALGORITMA 8.2 – Mengikuti kontur


cari_piksel_berikutnya(pc , dpc, pb, dcn)
// pc = piksel sekarang Masukan:
// dpc = arah piksel sebelumnya ke piksel sekarang  f (m,n): Citra masukan berukuran m baris dan n kolom berisi
// pb = piksel berikutnya yang akan dihasilkan oleh fungsi ALGORITMA 8.4: Memperoleh piksel berikutnya kontur
// dcn = arah piksel sekarang ke piksel berikutnya Keluaran:
dcp  kebalikan(dpc)
peroleh_piksel_berikutnya(pc, d)  e (n): kontur dengan n piksel
// pc = piksel sekarang
FOR r  0 TO 6
// d = arah piksel berikutnya 1. Cari piksel pertama yang akan dijadikan sebagai kontur
dE  MOD(dcp + r, 8) // Arah eksternal // Nilai balik: piksel berikutnya melalui pemindaian dan disimpan di e[1].
dI  MOD(dcp + r + 1, 8); // Arah internal XP  [1, 1, 0, -1, -1, -1, 0, 1]; 2. n  2 // Indeks kedua pada kontur e
YP  [0, -1, -1, -1, 0, 1, 1, 1]; 3. Cari piksel kedua yang menjadi bagian kontur dengan cara
pE  peroleh_piksel_berikutnya(pc, dE) yang telah dibahas dan diletakkan di piksel_berikutnya
pI  peroleh_piksel_berikutnya(pc, dI) cx  bagian x dari pc + XP(d+1); 4. dcn  arah dari e[1] ke piksel kedua.
cy  bagian y dari pc + YP(d+1); 5. WHILE (piksel_berikutnya  e[1]
IF adalah_latarbelakang(pE) AND adalah_objek(pI) e[n]  piksel_berikutnya
pb  pE cari_piksel_berikutnya(e(n), dpc, piksel_berikutnya, dcn)
dcn  dE nn+1
END-IF END-WHILE
END-FOR

Algoritma contour following


OPERASI DILASI

Efek dilasi dengan hotspot vertikal


Operasi dilasi biasa dipakai untuk mendapatkan
efek pelebaran terhadap piksel yang bernilai 1.
Operasi ini dirumuskan seperti berikut (Gonzales &
Woods, 2002):

A  B = 𝑧| 𝐵෠ 𝑧
∩𝐴 ∁𝐴 (7.10)

Dalam hal ini,


𝐵෠ = 𝑤|𝑤 = −𝑏, 𝑢𝑛𝑡𝑢𝑘 𝑏 ∈ 𝐵
𝐵 𝑧 = 𝑐|𝑐 = 𝑎 + 𝑧, 𝑢𝑛𝑡𝑢𝑘 𝑎 ∈ 𝐴
z=(z1, z2)
KONTUR INTERNAL
Algoritma Kontur Internal biasa 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 Gambar 8 Penjelasan pelacakan kontur dengan
kontur(jum)  b
menggunakan Algoritma Moore
e. IF b = b0
Keluar dari WHILE
END-IF
END-WHILE
RANTAI KODE

Rantai kode (code chain) merupakan contoh representasi kontur yang mula-mula diperkenalkan
oleh Freeman pada tahun 1961.

Untuk mempermudah perolehan kode rantai piksel


yang menjadi tetangga suatu piksel, perlu pembuatan
indeks yang dapat dihitung melalui rumus berikut:

indeks=3 ∆y+ ∆x+5 (8.1)

Dimana, ∆x menyatakan 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

Gambar 9 Arah rantai kode beserta kodenya


Tabel 8.2 Indeks dan kode rantai dua piksel yang bertetangga
Implementasi Penggunaan Kode Rantai m
∆𝑥 ∆𝑦 Kode Rantai Indeks = 3 ∆𝑦 + ∆𝑥 + 5
Program : chain_code.m
0 +1 6 8
0 -1 2 2
function [kode_rantai, xawal, yawal] = chain_code(U)
-1 +1 5 7 % CHAIN_CODE Digunakan
% kode rantai dari
untuk mendapatkan titik awal (x, y) dan
kontur U yang datanya telah terurutkan
% misalnya melalui get_contour
-1 -1 3 1 % Kode 1 2 3 4 5 6 7 8 9
Kode = ['3', '2', '1', '4', '0', '0', '5', '6', '7' ];

+1 +1 7 9 xawal = U(1,2);
yawal = U(1,1);
kode_rantai = '';
+1 -1 1 3 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;
-1 0 4 4 kode_rantai = strcat(kode_rantai, Kode(indeks));
end

Akhir Program
Program : show_contour.m

function show_contour(x, y, rantai_kode)


Contoh penggunaan Chain Code % SHOW_CONTOUR Contoh untuk menggambar kontur
% melalui rantai kode
% Masukan fungsi ini adalah hasil
% fungsi chain_code
Contoh penggunaan fungsi chain_code:
% 0 1 2 3 4 5 6 7
Dx = [ +1, +1, 0, -1, -1, -1, 0, +1];
>> Daun = imread('c:\image\daun_bin.png');  Dy = [ 0, -1, -1, -1, 0, +1, +1, +1];
U = zeros(1,2);
>> C = inbound_tracing(Daun);  U(1,1) = y;
U(1,2) = x;
>> [kode, x, y] = chain_code(C) 
kode = for p=2: length(rantai_kode)
007067565666666666665666666666666666666666666766676676676667666766 bilangan = rantai_kode(p) - 48;
767666767666676676667666766676667676766667666766666676670676766666 posx = U(p-1, 2) + Dx(bilangan + 1);
posy = U(p-1, 1) + Dy(bilangan + 1);
676666766667666676666667667667677676776776776777677767777777676766
677677767776767677677676767676706767776767677676767676776767676767 U(p, 1) = posy;
667667676766766676676767667666766666543434333343343233433333433333 U(p, 2) = posx;
end
443333333333323233323323342333333433334334333434234434344344444444
445555655656665656666566666656666666666666666666666666666666666666 % Membentuk gambar kontur
666666676567666666666666667666666666667666666666676666666666667666 maks_x = max(U(p,2));
666666666676666666666666766667666766666676666766766767666766766676 maks_y = max(U(p,1));
666706666766666666666666666666656664566656656665665656565656656566 D = zeros(maks_y, maks_x);
656666666666666666766666444343233332332332233323333323333333333333 for p=1: length(U)
333233334333333233323232323232222322222232221231222222212222121212 D(U(p,1), U(p,2)) = 1;
212121212122122221221212221222222212222222222222222220122222222222 end
222222212222212222222222222212222222222222221222222222222223222221 imshow(D);
222222222222222222222222222222222212322222222222222222322222223222
323234233343444545554555456455555555556555655655665656566656566566
566656565656656656565645656565656566566656565554533322322322322322 Akhir Program
223222223222222322322132222221222221222121221221212122121212121221
212212222212222122212211212121120121211121111211110111111111111211
221112121221211221221222212122122212212221122122122212221212212122
012211212122212121121221221212121212112121221212122221222222222222
22222232222222222100001

x = 131
y = 8
>> Fungsi show_contour untuk menguraikan kembali kode rantai menjadi koordinat piksel

Anda mungkin juga menyukai