clear;
clc;
sum_xinren_jiancelv=0;sum_xinren_alarmlv=0;sum_beijin_jiancelv=0;
%-----------产生随机序号-----------------
%a为种子,依次取1,2,3,4,5,将产生固定随机序列
for a=1:5
xinren_jiancelv=0;
xinren_alarmlv=0;
beijin_jiancelv=0;
rand('state',a);
b=rand(1,250);%随机产生250个数字。
rand_xuhao=floor(500*b);%将随机数取整得到250个随机整数,作为HoG序号
%序号从小到大排序
for i=1:250
for j=(i+1):250
if rand_xuhao(1,i)>rand_xuhao(1,j)
buffer=rand_xuhao(1,i);
rand_xuhao(1,i)=rand_xuhao(1,j);
rand_xuhao(1,j)=buffer;
end
end
end
%序号去重,并且去掉0项dazuoye1.m
for i=1:250
if rand_xuhao(1,i)==0
rand_xuhao(1,i)=rand_xuhao(1,i)+1;
end
for j=(i+1):250
if rand_xuhao(1,i)==rand_xuhao(1,j)
rand_xuhao(1,j)=rand_xuhao(1,j)+1;
end
end
end
%取出去除随机数后剩下的250个数作为待测数据序号
p=1;
symbol=0;
for i=1:500
for j=1:250
if i==rand_xuhao(1,j)
symbol=0;
break
else
symbol=symbol+1;
end
end
if symbol~=0
rest_xuhao(1,p)=i;
p=p+1;
end
end
%--------取出背景中随机序号对应的250个训练向量,并取平均值----------
load non_pedestrian.mat;
for m=1:250
c=rand_xuhao(1,m);
xunlian_non{1,m}=HoG{1,c};
end
%求训练样本均值
sum_xunlian_non=xunlian_non{1,1};
for j=2:250
sum_xunlian_non=sum_xunlian_non+xunlian_non{1,j};
end
mean_xunlian_non=sum_xunlian_non/250;
%取出背景中的其余250个特征向量作为待测向量。
for m=1:250
d=rest_xuhao(1,m);
daice_non{1,m}=HoG{1,d};
end
%-------------随机取行人中250个特征,并取其平均值--------------。
load pedestrian.mat;
%取与背景相同序号的训练向量和待测向量,随机序号对应的250个特征向量-训练向量。
for m=1:250
c=rand_xuhao(1,m);
xunlian{1,m}=HoG{1,c};
end
%求训练样本均值
sum_xunlian=xunlian{1,1};
for j=2:250
sum_xunlian=sum_xunlian+xunlian{1,j};
end
mean_xunlian=sum_xunlian/250;
%取出行人中250个待测向量。
for m=1:250
d=rest_xuhao(1,m);
daice{1,m}=HoG{1,d};
end
%--------------最小欧氏距离判别-------------------------
e_non=0;r_non=0;e=0;r=0;mo_cha_non_non=0;mo_cha_non_daice=0;mo_cha_non=0;mo_cha_daice=0;
for i=1:250
cha_non_non=daice_non{1,i}-mean_xunlian_non;
cha_non_daice=daice_non{1,i}-mean_xunlian;
for j=1:16
mo_cha_non_non=mo_cha_non_non+cha_non_non(j)^2;
mo_cha_non_daice=mo_cha_non_daice+cha_non_daice(j)^2;
end
if mo_cha_non_non>mo_cha_non_daice
e_non=e_non+1;
else
r_non=r_non+1;
end
end
%背景检测率
beijin_jiancelv=(beijin_jiancelv+r_non/250);
%输出背景检测率
z={'a='};
disp(z{1,1});
disp(a);
z={'beijin_jiancelv='};
disp(z{1,1});
disp(beijin_jiancelv);
%行人检测率计算
for i=1:250
cha_non=daice{1,i}-mean_xunlian_non;
cha_daice=daice{1,i}-mean_xunlian;
for j=1:16
mo_cha_non=mo_cha_non+cha_non(j)^2;
mo_cha_daice=mo_cha_daice+cha_daice(j)^2;
end
if mo_cha_non>mo_cha_daice
r=r+1;
else
e=e+1;
end
end
%输出行人检测率和虚警率
xinren_jiancelv=(xinren_jiancelv+r/250);
xinren_alarmlv=(xinren_alarmlv+e_non/250);
z={'xinren_jiancelv='};
disp(z{1,1});
disp(xinren_jiancelv);
z={'xinren_alarmlv='};
disp(z{1,1});
disp(xinren_alarmlv);
%检测率求和
sum_xinren_jiancelv=sum_xinren_jiancelv+xinren_jiancelv;
sum_xinren_alarmlv=sum_xinren_alarmlv+xinren_alarmlv;
sum_beijin_jiancelv=sum_beijin_jiancelv+beijin_jiancelv;
end
%平均检测率
average_xinren_jiancelv=sum_xinren_jiancelv/5;
average_xinren_alarmlv=sum_xinren_alarmlv/5;
average_beijin_jiancelv=sum_beijin_jiancelv/5;
%输出平均检测率
z={'average_xinren_jiancelv='};
disp(z{1,1});
disp(average_xinren_jiancelv);
z={'average_xinren_alarmlv='};
disp(z{1,1});
disp(average_xinren_alarmlv);
z={'average_beijin_jiancelv='};
disp(z{1,1});
disp(average_beijin_jiancelv);
评论2