Anda di halaman 1dari 4

Inbound_tracing:

function [Kontur] = inbound_tracing(BW)


% INBOUND_TRACING Memperoleh kontur yang telah terurutkan
% dengan menggunakan algoritma pelacakan kontur Moore

[jum_baris, jum_kolom] = size(BW);

BW1(1:jum_baris+5, 1:jum_kolom+5)=0;
BW1(3:jum_baris+2, 3:jum_kolom+2)=BW;
BW=BW1;
[jum_baris, jum_kolom] = size(BW)
Initialization:
% Peroleh piksel awal
1. N=0;
1. N=0; 1 2. Kontur=[];
Kontur=[]; 2

for k = 1 : jum_baris 1. 1. Buat perulangan untuk For k = 1 : jum_baris


selesai = false;
1.for p = 2 : jum_baris-11. 1. Buat perulangan For p
2. for q = 2 : jum_kolom-12. 2. Buat perulangan For q
3. if (BW(p,q) == 1) && (sum(sum(BW(p-1:p+1,
3. Buat If (BW(p,q) q-1:q+1))))>1
b0.y = p; Lihat Pseudocode di soal
b0.x = q;
selesai = true;
break;
1. elseif (BW(p,q) == 1)
1. Buat &&(BW(p,q)
Elseif (sum(sum(BW(p-1:p+1,
lihat pseudocde di tugas q-1:q+1))))<=1
2. BW(p,q) = 0;
2. Tulis nilai BW=0; sebagai pembatas kontur 1 dan berikutnya BW(p,q) = 0;
3. b0.y = piksel
3. Posisi p; dicatat pada b0 b0.y = p;
4. b0.x = q; piksel berikutnya dicatat di c0 b0.x = q;
4. Posisi untuk
5. selesai = true;
5. 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

1. Sum=(sum(sum(BW(b0.y-1:b0.y+1,
1. Carib0.x-1:b0.x+1))));
nilai sum
2. if Sum>2; 2. Buat if jika sum >2
3. n = N+2; 3. Buat nilai n = n + 2
4. Kontur(n-2+1, 1) = b0.y; 4. Kontur(n-2+1, 1) = b0.y;
5. Kontur(n-2+1, 2) = b0.x; 5. Kontur(n-2+1, 2) = b0.x;
6. Kontur(n-2+2, 1) = b1.y; 6. Kontur(n-2+2, 1) = b1.y;
7. Kontur(n-2+2, 2) = b1.x; 7. Kontur(n-2+2, 2) = b1.x
Lihat juga pseudocde
end
%Kontur

b = b1;
c = c1;

% Ulang sampai berakhir


while true
% cont=0;
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;
BW(b.y, b.x)=0;
break;
;
else
c = berikut(c);

end
end

% Kondisi pengakhir pengulangan

if ((b.y == b0.y) && (b.x == b0.x)) || Sum==0;

break;
end
end
1. if Sum>0;1. Buat if sum besar dari 0
Tulis BW(b0) =0 BW(b0.y, b0.x)=0;
2. BW(b0.y, 2.b0.x)=0;
3. Tulis BW(b1)=0 BW(b1.y, b1.x)=0;
3. BW(b1.y, b1.x)=0;
4. [K, L] = size(kontur) [K, L] = size(Kontur);
4. [K, L] = size(Kontur);
5. Kontur(K+1,1)=0; (K+1,1) = 0 Kontur(K+1,1)=0;
5. Kontur
6. Kontur (K+1,2)=0 Kontur(K+1,2)=0;
6. Kontur(K+1,2)=0;
7. N=K+2
7. N=K+2 8. End
8. end 9. End
9. end 10. Output : Tampilkan BW

10. figure(2), imshow(BW);

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
Chain_code:
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 10
Kode = ['3', '2', '1', '4', '0', '0', '5', '6', '7' ' '];

xawal = U(1,2);
yawal = U(1,1);
kode_rantai = '';
1. defenisikan L=length(U)
1.L=length(U) 2. Buat For p=2 length(U) kurangi 2
2. for p=2: length(U)-23. buat jika U(p-1)>7 and U(p)> 7
3. if U(p-1)>7 && U(p)>7
catatan : perintah ini sudah ada di pseudoce pada soal, lihat lagi
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));
1. elseif U(p)==0 && 1.U(p+1)==0 && U(p)=0
Disini buat elseif p<L-2dan U(P+1)=0 dan p<L-2
2. kode_rantai = strcat(kode_rantai,
2. Buat angka 9 sebagai pembatas int2str(9));
nilai rantai objek 1 dengan objek
3. p=p+3 berikutnya
end 3. Set p=p+3
end catatan : perintah ini sudah ada di pseudoce pada soal, lihat lagi

Anda mungkin juga menyukai