Implementasi Tahap Pelatihan (1) Fungsi untuk mencari nilai centroid dari inputan boundary kemudian dihitung nilai transformasi fourier diskritnya menggunakan fungsi fft pada Matlab 1 2 3 4 5 6 7 8 9 10 11
function
[FD, tou]= centroid(contour)
[y, x] = size(contour); n=y; r = zeros(n,1); % au = zeros (n,1); yc = mean(contour(:,1)); xc = mean(contour(:,2)); for i=1 : n %Menemukan centroid distance signature r(n) r(i)=sqrt((contour(i,1) yc)^2 (contour(i,2) - xc)^2); 12 end 13 14 au=fft(r,n);
+
63
Implementasi Tahap Pelatihan (2) Fungsi fourier_coef akan memproses hasil perhitungan fft untuk mendapatkan nilai tou (τ) yang merupakan dasar teknik phase-shift serta nilai normalisasi koefisien fourier yang menjadi parameter output dari fungsi ini.
1 function [FD, tou]=fourier_coef(contour, au) 2 3 [y, x] = size(contour); 4 n=y; 5 tou = zeros(n,1); 6 bu = zeros(n,1); 7 FD = zeros(n,1); 8 ao = au(1,1); %DC component 9 10 for i= 1 : y 11 %basic phase shift 12 tou(i,1) = 360/n*i; 13 %mendapatkan koefisien normalisasi 14 Fourier 15 bu(i,1) = au(i,1)/ao; 16 17 %normalisasi 18 FD(i,1) = norm(bu(i,1)); 11 end 64
Implementasi Tahap Pencocokan (1) Selanjutnya nilai descriptor fourier dari ROI citra R dan citra S akan diproses dalam sebuah perulangan untuk mengekstrak nilai dalam struct yang akan digunakan sebagai parameter input pada fungsi minimum_distance
1 pnjang_R = length(FD); 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
jumBoundary_S = length (FD2); FD_selected = zeros(1,1); tou_selected = zeros(1,1); contour_selected = zeros(1,2); dist_min = zeros(1,1); FD_hasil = struct([]); tou_hasil = struct([]); contour_hasil = struct([]); sum_selected = 0; t = 1;
for i = 1:jumBoundary_S pnjang_S = length(FD2(i,1).field); if abs(pnjang_S - pnjang_R) <= 50 [d] = minimum_distance(FD, FD2(i,1).field); 18 dist_min(t,1) = d; 65
Implementasi Tahap Pencocokan (2) 19
[FD_hasil(t,1).field] = deal(FD2(i,1).field);
20
[tou_hasil(t,1).field] = deal(tou2(i,1).field);
[contour_hasil(t,1).field] deal(contour_fix(i,1).field); 22 t = t+1; 21
23 24
=
sum_selected = sum_selected + 1; end
25 end 26 27 min_min_dist = min (dist_min);
19 index = find(dist_min==min_min_dist); 20 FD_selected = deal(FD_hasil(index,1).field); 21 tou_selected = deal(tou_hasil(index,1).field);
22 contour_selected= deal(contour_hasil(index,1).field);
66
Implementasi Tahap Pencocokan (3) Fungsi untuk mencari minimum distance dari nilai FD ROI citra referensi R dan nilai FD citra inspeksi S.
1 function [min_dist] = minimum_distance (FD_CitraR, FD_CitraS) 2 3 [o,n] = size (FD_CitraS) 4 5 6 7 8 9 10 11 12 13 14
[p,q] = size (FD_CitraR) selisih = zeros (abs(o-p) selisih2 = zeros (abs(o-p) sum_selisih = 0; dist = zeros (abs(o-p),1); r = 1; if o > p z=p; for i = 1:o-p for j = 1:p selisih(j,1) = ((FD_CitraR(j,1)FD_CitraS(j+i-1,1))/FD_CitraR(j,1)); 15 selisih2(j,1) = selisih(j,1)*selisih(j,1);
67
Implementasi Tahap Pencocokan (4) 16 sum_selisih = sum_selisih + selisih2(j,1); 17 end 18 dist(i,1) = (sum_selisih)^1/2; 19 end 20 else 21 z=o; 22 for i = 1:p-o 23 for j = 1:o selisih(j,1) = ((FD_CitraS(j,1)-FD_CitraR(j+i24 1,1))/FD_CitraS(j,1)); 25 selisih2(j,1) = selisih(j,1)*selisih(j,1); 26 sum_selisih = sum_selisih + selisih2(j,1); 27 end 19 20 21 22 23
dist(i,1) = (sum_selisih)^1/2; end end min_dist = min (dist); 68
Implementasi Tahap Pencocokan (5)
Jarak minimum dari masing – masing pemanggilan fungsi dijadikan parameter output untuk kemudian dibandingkan dengan hasil pemanggilan fungsi pada perulangan selanjutnya dan dari keseluruhan jarak minimum tersebut diambil yang paling kecil nilainya. Terakhir, FD citra S, nilai tou (τ), serta kontur dari citra S diseleksi untuk diproses ke tahap selanjutnya.
69
Implementasi Tahap Alignment (1) Tahap pertama adalah mencari nilai translasi dari citra S menggunakan fungsi translation. 1 2 3 4 5 6 7 8 9 10 10 11 12 13 14 15
function [T] = translation (reference, inspection) rataR = mean (reference); rataS = mean (inspection);
%mendapatkan nilai center of gravity yrc = rataR(1); xrc = rataR(2); ysc = rataS(1); xsc = rataS(2); %mendapatkan nilai parameter translasi T matrixS = [xsc ysc]; matrixR = [xrc yrc]; T = matrixS - matrixR;
70
Implementasi Tahap Alignment (2) Selanjutnya nilai dasar teknik phase-shift dihitung dalam fungsi phase_shift yang parameter outputnya berupa nilai pergeseran frekuensi shift. [shift, shift1, shift2] 1 function (contour, tou) 2 3 shift_old= zeros (1); 4 X = tou; 5 6 [N,M] = size(contour); 7 for i=1 : N 8 shift_old(i) = N*X(i, 1) / 360; 9 end
=
phase_shift
10 10 shift = shift_old'; 11 shift1 = floor(shift); 12 shift2 = ceil(shift); 71
Implementasi Tahap Alignment (3) Nilai pergeseran dan kedua nilai integer terdekat dijadikan parameter output dari fungsi phase_shift yang kemudian menjadi input dari fungsi rotation. 1 2 3 4 5 6 7 8
function [teta, A, B] = rotation (shift, contour, contour2) [y, x] = size(contour); N =y;
for k=1 : N if ((k+shift(k)) <= N) A = contour(k,1)*contour2(k+shift(k),1)+ contour(k,2)*contour2(k+shift(k),2); 9 B = contour2(k+shift(k),1)*contour(k,2)+ contour(k,1)*contour2(k+shift(k),2); 10 else 11 selisih = (k+shift(k)) - N;
72
Implementasi Tahap Alignment (4) 12
A = contour(k,1)*contour2(selisih,1)+ contour(k,2)*contour2(selisih,2);
13
B = contour2(selisih,1)*contour(k,2)+ contour(k,1)*contour2(selisih,2);
14
end
15 end 16 17 teta = atan (-B/A);
73