⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vbpds.m

📁 Vision based pedestrian detection system based on pso
💻 M
📖 第 1 页 / 共 4 页
字号:
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 + -