Matlab
dasturining
tavsifi
Insonni
barmoq
izlari
bilan
identifikatsiyalashni amalga oshiradigan dastur quyidagi ishlov berish
funktsiyalarini o’z ichiga oladi.
Tasvirni yaxshilash uchun oldindan ishlovni amalga oshiradigan func_ improve
() funktsiyasidan foydalaning. Ushbu funktsiya parametr sifatida tasvirni oladi,
keyin rasm segmentatsiyasini, yo’nalishni va filtrlashni bajarish uchun kerakli
funktsiyalarni bajarish uchun kerakli qiymatlarni parametr sifatida o’tkazish uchun
chaqiriladi, masalan, tasvirlarni qabul qilish uchun blktamano - blok hajmi o’zgaradi
va treys uchun belgilangan qiymat . Ichki jarayon qaytib kelgan o’zgaruvchilar,
tasvirni qayta ishlash natijasi bilan tugallanganda
Funktsiya kodi:
function [ binim, mask, oimg ] = func_improve( img ) blktamano = 5;
thresh = 0.085;
norm = rgcment(enhimg, blktamano, thresh);
oimg = rgort(norm, 1, 3, 3);
[norm, mask] = rgcment(enhimg, blktamano, thresh);
19
[freq, medfreq] = rgfr(norm, mask, oimg, 32, 5, 5, 15);
binim = rgfi(norm, oimg, medfreq.*mask, 0.5, 0.5, 1) > 0; end
Maxsus nuqtalarni tanlash uchun ushbu func_ improve () funktsiyasi
vazifasini amalga oshiradigan getFingers () funktsiyasidan foydalaning va keyin
barmoq izi tasvirining parametrlarini hisoblab chiqadi. Quyida funktsiya kodining
bir qismi ko’rsatilgan. Rasmni yaxshilaganidan so’ng, getFingers () funktsiyasi
bwmorph () funktsiyasini chaqirib, tasvir skeletlari topilishi jarayonini amalga
oshiradi. So’ngra, bwmorph () funktsiyasining natijasini olish uchun, ushbu
funktsiyaning ichida, formulalarni (3) qo’llash orqali tasvirning skeletlari topilgan
minutlarni izlang. Keyin clcMinute () funktsiyasini chaqiradi, ortiqcha bo’lmagan
parchalarning piksellarini olib tashlaydi va tasvir shablonining natijalarini vektorini
hosil qiladi.
Funktsiya kodi:
function [ result ] = getFingers( img)
[ binim, mask, oimg ] = func_improve(img);
thinn = bwmorph(inv_binim,
‘
thin
’
,Inf);
contMin = 1;
minussi(contMin, :) = [0,0,0] CN = 0;
sx=0; sy=0;
for i = 1:8
t1 = p(thinn, x, y, i);
t2 = p(thinn, x, y, i+1);
CN = CN + abs (t1-t2);
end cn = cn / 2;
if cn ~= 3 && cn ~= 4 || m == 1
20
for n=1:8
if reverse_p == 0 || iter > 1
[ta, xa, ya] = p(thinn, x1, y1, n);
else
[ta, xa, ya] = p(thinn, x1, y1, 9-n);
end
if ta == 1 && (xa ~= p1x || ya ~= p1y) && (xa ~= x
|| ya ~= y)
p1x = x1; p1y = y1;
x1 = xa; y1 = ya;
break;
end
end
end
result=clsMinute(minussi,CN,thinn);
end
O’chirishlarni olib tashlash uchun clcMinute () funktsiyasi mavjud bo’lib,
ushbu funktsiya tasvirni piksellar bilan ko’zdan kechiradi, MINUCIUS ning
vektorining qiymatini kirish parametri sifatida oladi va unga mos keladigan juftlarni
px va py vektorlarini x va y koordinatalari bilan to’ldiradi va keyin tasvirni
aylantirish uchun aylanish jarayonida ishlatiladigan bayroqchani belgilaydi va
belgilaydi qaysi piksellar haqiqiy, tugatish va bifurkatsiyaga to’g’ri keladi.
Funktsiya kodi:
function [indic] = clsMinute(m, CN, img)
index = 1;
indc = [];
for i = 1:size(m,1) p_x
m(i,1);
21
p_y = m(i,2); p_d = 0;
l_x = 0;
l_y = 0;
flag = 0;
while flag == 0 && CN(i) == 1
ind = 1;
while flag == 0 && ind <= size(m,1) if p_x ==
m(ind,1) && p_y == m(ind,2) flag = 1;
continue; end
ind = ind + 1; end
for j = 1:8
[t,nx,ny] = p(img, p_x, p_y, j); if t == 1 && (nx ~=
l_x || ny ~= l_y) l_x = p_x; l_y = p_y;
p_x = nx; p_y = ny; break; end end
p_d = p_d + 1; end
if flag == 0 indic(index) =
i; index = index + 1; end
end
Barmoq izini ma’lumotlar bazasida saqlangan andozalar bilan taqqoslash
uchun evalitsion () funktsiyasidan foydalanamiz. Fmatching () funktsiyasi TEMP1
va TEMP2 bilan solishtirish uchun ikkita andozani oladi va tashqi funktsiya tramfor
() yordamida ishlashni amalga oshiradi. TEMP1 uchun count1 o’zgaruvchilar
qiymatlarini va TEMP2 uchun count2 qiymatlarini mos ravishda, o’lcham
funktsiyasi bilan belgilangan oralig’ida naqshlar ustidan yineleyak uchun ishlatiladi.
Shabloni o’tkazish jarayonidan so’ng baholash () funktsiyasi tegishli daqiqalar
orasidagi masofani hisoblash uchun chaqiriladi.
Funktsiya kodi:
22
function
[ S ] = fmatching( TEMP1, TEMP2) disp(TEMP1);
disp(TEMP2);
if nargin==2;
flag=0; end TEMP1= TEMP1(TEMP1(:,3)<4,:); TEMP2=
TEMP2(TEMP2(:,3)<4,:); cont1=size(TEMP1,1);
cont2=size(TEMP2,1);
bi=0; bj=0; ba=0; S=0;
for
i=1:cont1
T1=tramfor(TEMP1,i); for
j=1:cont2
if TEMP1(i,3)== TEMP2(j,3) T2=tramfor(TEMP2,j);
for a=-3:3 T3=tramfor(T2,a*pi/180);
sm=evaluation(T1,T3);
if S
S=sm;
end
end end end
end
evaluation()
funktsiyasi
shablonlarning
har
birining
hajmi
va
spetsifikatsiyasini aniqlaydigan va x, y koordinatalari bilan juftliklar orasidagi
masofani hisoblashlar operatsiyasini amalga oshiradigan ichki funktsiyani chiroylik
() funktsiyasida aylantirilgan shablonlarga mos keladigan T1 va T2 o’zgaruvchilarni
oladi. Masofalar dx va dy qiymatlari bilan ifodalanadi, bu funktsiyaning bajarilishi
23
oxirida masofa hisoblash operatsiyalari natijalari bilan o’zgaruvchan sm ga
qaytariladi.
Funktsiya kodi:
function [ sm ] = evaluation( T1, T2 )
Cont1=size(T1,1); Cont2=size(T2,1); n=0;
T=15; TT=14; for
i=1:Cont1
Encuent
=0; j=1;
while
(
Encuent
==0)
&&
(j<=Cont2)
dx=(T1(i,1)-T2(j,1)); dy=(T1(i,2)-T2(j,2));
d=sqrt(dx^2+dy^2); if d
DTeta=abs(T1(i,3)-T2(j,3))*180/pi;
DTeta=min(DTheta,360-DTeta); if DTeta
n=n+1;
Encuent
=1; end end
j=j+1; end end
sm=sqrt(n^2/(Cont1*Cont2)); end
24
Do'stlaringiz bilan baham: |