📄 vbpds.m
字号:
classdef (ConstructOnLoad) vbpds
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% %%%
%%% Vision-Based Pedestrian Detection System %%%
%%% (VBPDS) %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
properties; rerun = 0 ;end
properties; reload = 'true' ;end
properties; Show_Message = 'true' ;end
properties; error_code;end
properties; Drive ;end
properties; Number_of_PedestrianPatterns = 4802 ;end
properties; Number_of_NonPedestrianPatterns = 5000 ;end
properties; PedestrianPatternPath = '\Pedestrian Pattern\1\ped_examples\' ;end
properties; NonPedestrianPatternPath = '\Pedestrian Pattern\1\non-ped_examples\' ;end
properties; PtternsDimension = [36 18] ;end
properties; All_Patterns_Seprated = [];end
properties; All_Patterns = [];end
properties; All_Patterns_Phi = [];end
properties; All_Patterns_Edg = [];end
properties; All_Patterns_Edg_Phi = [];end
properties; Target = [];end
properties; Number_of_Images = 5;end
properties; Images_Name = char;end
properties; stream = [];end
properties; Images_Dimension = [240 320];end
properties; Images_Path = '\My Model\DataSet\';end
properties; Gap_size = 30;end
properties; max_iterations = 10;end
properties; no_of_particles = 80;end
properties; current_iteration = 1;end
properties; current_particle = 1;end
properties; dimensions = 2;end
properties; c1 = 5;end
properties; c2 = 5;end
properties; w = 5;end
properties; Termination_Fitness = .9;end% best fitness is minimum
properties; particle_position = [];end%zeros(no_of_particles,dimensions);
properties; particle_velocity = [];end%zeros(no_of_particles,dimensions)
properties; p_best = [];end%zeros(no_of_particles,dimensions)
properties; g_best = [];end%zeros(dimensions,1)
properties; p_best_fitness = [];end%zeros(no_of_particles,1) %best fitness is minimum
properties; g_best_fitness = 1000;end% best fitness is minimum
properties; current_fitness = [];end%zeros(no_of_particles,1) %best fitness is minimum
properties; Current_Image = [];end
properties; Current_Image_Number = 1;end
properties; current_frame = [];end
properties; Delta_phi_index = 1;end
properties; result = [];end%fortracking
%result = zeros(no_of_particles+1,2)
%zeros(max_iterations+1,no_of_particles,2)
properties; result_fitness = [];end%fortracking
%result_fitness = zeros(no_of_particles+1,1);
%zeros(max_iterations+1,no_of_particles,1)
properties; pi = zeros(40,1); end
properties; All_Patterns_Feature=[]; end
properties; All_Patterns_Feature_Separated=[]; end
properties; Feature_Target=[]; end
properties; Neural_Network; end
properties; Order = 1;end%fortracking
properties; Color = [0,0,0;0,0,1;0,1,0;0,1,1;1,0,0;1,0,1;1,1,0;1,1,1;.8,.8,.8];end
methods
function obj = vbpds(loading)
clc
%clear('-regexp', '..a')
if nargin == 1
obj.reload = loading;
else
obj.reload = 'false';
end
end
function obj = set.reload(obj,rst)
obj.reload = rst;
obj = obj.run;
end
function obj = set.rerun(obj,rr)
clc
obj.rerun = rr;
if rr == 1
obj = obj.run;
end
end
function obj = set.error_code(obj,err)
obj.error_code = err;
end
function err = get.error_code(obj)
err = obj.error_code;
end
function msg = get.Show_Message(obj)
msg = obj.Show_Message;
end
function delete(obj)
save 'VBPDS' 'obj'
end
function obj = run(obj)
obj = obj.LoadDefault;
obj = obj.Load_Patterns;
obj = obj.LoadStream;
obj = obj.Load_Patterns_Feature;
obj = obj.train_neural_network;
obj = obj.PSO;
obj = obj.DisplayResults(obj.Current_Image,obj.result,'Detected','pedestrian detection');
end
function obj = LoadDefault(obj)
obj.error_code = '00-00';
obj.current_iteration = 1;
obj.current_particle = 1;
obj.particle_position = [];
obj.particle_velocity = [];
obj.p_best = [];
obj.g_best = [];
obj.p_best_fitness = [];
obj.g_best_fitness = 1000;
obj.current_fitness = [];
obj.Current_Image = [];
obj.Current_Image_Number = 1;
obj.current_frame = [];
obj.Delta_phi_index = 1;
obj.result = [];
obj.result_fitness = [];
obj.Order = 1;
obj.Color = [0,0,0;0,0,1;0,1,0;0,1,1;1,0,0;1,0,1;1,1,0;1,1,1;.8,.8,.8];
end
function obj = Load_Patterns(obj)
%% Load Patterns
reply = 'N';
if strcmp(obj.reload,'true')
disp('Loading Pattern take a few minutes , \n')
reply = input('Do you want realy load? Y/N [N]: ', 's');
if isempty(reply)
reply = 'N';
end
end
if strcmp(obj.reload,'true') &&( reply == 'Y')
obj.error_code = '01-01';
Number_of_Patterns = obj.Number_of_PedestrianPatterns + obj.Number_of_NonPedestrianPatterns;
Target = [];
All_Patterns = [];
All_Patterns_Seprated = zeros(obj.PtternsDimension(1),obj.PtternsDimension(2),Number_of_Patterns,'uint8');
obj.error_code = '01-02';
for PatternNumber = 1:obj.Number_of_PedestrianPatterns
try
PtrnNum = strcat('0000',num2str(PatternNumber-1));
PatternName(:,PatternNumber) = cellstr(strcat(obj.PedestrianPatternPath,'img_', ...
PtrnNum(length(PtrnNum)-4:1:length(PtrnNum)),...
'.pgm')); %#ok<AGROW>
Pattern = imread(char(PatternName(:,PatternNumber)));
obj.error_code = '01-03';
All_Patterns_Seprated(:,:,PatternNumber) = Pattern(:,:);
obj.error_code = '01-04';
All_Patterns_Phi(PatternNumber,:) = abs(log(invmoments(All_Patterns_Seprated(:,:,PatternNumber))));
tmp = [];
for j = 1:size(Pattern,2)
tmp = [tmp;Pattern(:,j)];%#ok<AGROW>
end
All_Patterns = [All_Patterns tmp];
obj.error_code = '01-05';
BW = double(im2bw(Pattern,.4));
Edg = edge(BW,'canny',[.04 .1]);
All_Patterns_Edg(:,:,PatternNumber) = Edg(:,:);
All_Patterns_Edg_Phi(PatternNumber,:) = abs(log(invmoments(All_Patterns_Edg(:,:,PatternNumber))));
for i=1:7
if All_Patterns_Edg_Phi(PatternNumber,i) == Inf
All_Patterns_Edg_Phi(PatternNumber,:) = All_Patterns_Edg_Phi(PatternNumber-1,:);
end
end
obj.error_code = '01-06';
Target(PatternNumber) = 1;%#ok<AGROW>
disp(PatternNumber);
catch e
if strcmp(obj.Show_Message, 'true')
warning('VBPDS:LoadPatterns', 'Can''t load the pattern "%s" because %s.\n', char(PatternName(:,PatternNumber)),e.message);
disp(['VBPDS:LoadPatterns', 'error_code : ' obj.error_code]);
end
end
end;
for PatternNumber = 1:obj.Number_of_NonPedestrianPatterns
try
PtrnNum = strcat('0000',num2str(PatternNumber-1));
PatternName(:,obj.Number_of_PedestrianPatterns+PatternNumber) = cellstr(strcat(obj.NonPedestrianPatternPath,'img_', ...
PtrnNum(length(PtrnNum)-4:1:length(PtrnNum)),...
'.pgm')); %#ok<AGROW>
obj.error_code = '01-07';
Pattern = imread(char(PatternName(:,obj.Number_of_PedestrianPatterns+PatternNumber)));
All_Patterns_Seprated(:,:,obj.Number_of_PedestrianPatterns+PatternNumber) = Pattern(:,:);
All_Patterns_Phi(obj.Number_of_PedestrianPatterns+PatternNumber,:) = abs(log(invmoments(All_Patterns_Seprated(:,:,obj.Number_of_PedestrianPatterns+PatternNumber))));
obj.error_code = '01-08';
tmp = [];
for j = 1:size(Pattern,2)
tmp = [tmp;Pattern(:,j)];%#ok<AGROW>
end
All_Patterns = [All_Patterns tmp];
obj.error_code = '01-09';
BW = double(im2bw(Pattern,.4));
Edg = edge(BW,'canny',[.04 .1]);
All_Patterns_Edg(:,:,obj.Number_of_PedestrianPatterns+PatternNumber) = Edg(:,:);
All_Patterns_Edg_Phi(obj.Number_of_PedestrianPatterns+PatternNumber,:) = abs(log(invmoments(All_Patterns_Edg(:,:,obj.Number_of_PedestrianPatterns+PatternNumber))));
obj.error_code = '01-10';
for i=1:7
if All_Patterns_Edg_Phi(obj.Number_of_PedestrianPatterns+PatternNumber,i) == Inf
All_Patterns_Edg_Phi(obj.Number_of_PedestrianPatterns+PatternNumber,:) = All_Patterns_Edg_Phi(obj.Number_of_PedestrianPatterns+PatternNumber-1,:);
end
end
obj.error_code = '01-11';
Target(obj.Number_of_PedestrianPatterns+PatternNumber) = 0;%#ok<AGROW>
disp(obj.Number_of_PedestrianPatterns+PatternNumber);
catch e
if strcmp(obj.Show_Message, 'true')
warning('VBPDS:LoadPatterns', 'Can''t load the pattern "%s" because %s.\n', char(PatternName(:,PatternNumber)),e.message);
disp(['VBPDS:LoadPatterns', 'error_code : ' obj.error_code]);
end
end
end;
obj.Target = Target;
obj.All_Patterns_Seprated = double(All_Patterns_Seprated);
obj.All_Patterns = double(All_Patterns);
obj.All_Patterns_Phi = All_Patterns_Phi';
obj.All_Patterns_Edg = double(All_Patterns_Edg);
obj.All_Patterns_Edg_Phi = All_Patterns_Edg_Phi';
save 'Patterns_Data' 'Target' -append
save 'Patterns_Data' 'All_Patterns_Seprated' -append
save 'Patterns_Data' 'All_Patterns' -append
save 'Patterns_Data' 'All_Patterns_Phi' -append
save 'Patterns_Data' 'All_Patterns_Edg' -append
save 'Patterns_Data' 'All_Patterns_Edg_Phi' -append
else
obj.error_code = '01-12';
load 'Patterns_Data' 'Target'
load 'Patterns_Data' 'All_Patterns'
load 'Patterns_Data' 'All_Patterns_Seprated'
load 'Patterns_Data' 'All_Patterns_Phi'
load 'Patterns_Data' 'All_Patterns_Edg'
load 'Patterns_Data' 'All_Patterns_Edg_Phi'
obj.Target = Target;
obj.All_Patterns_Seprated = double(All_Patterns_Seprated);
obj.All_Patterns = double(All_Patterns);
obj.All_Patterns_Phi = All_Patterns_Phi';
obj.All_Patterns_Edg = double(All_Patterns_Edg);
obj.All_Patterns_Edg_Phi = All_Patterns_Edg_Phi';
end
end
function obj = LoadStream(obj)
%% Load Stream
obj.error_code = '02-01';
Err = [];
Images_Name = [];
All_Images_Name = char;
stream = zeros(obj.Images_Dimension(1),obj.Images_Dimension(2),obj.Number_of_Images,'uint8');
Images = [];
reply = 'N';
if strcmp(obj.reload,'true')
disp('Loading stream take a few minutes , \n')
reply = input('Do you want realy load? Y/N [N]: ', 's');
if isempty(reply)
reply = 'N';
end
end
if strcmp(obj.reload,'true') &&( reply == 'Y')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -