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

📄 vbpds.m

📁 Vision based pedestrian detection system based on pso
💻 M
📖 第 1 页 / 共 4 页
字号:
                a = abs(round(obj.particle_position(obj.current_particle,1)));
                b = abs(round(obj.particle_position(obj.current_particle,2)));
                c = a + (obj.PtternsDimension(1) - 1);
                d = b + (obj.PtternsDimension(2)  - 1);
                if a > 240;a=240;end
                if c > 240;c=240;end
                if b > 320;b=320;end
                if d > 320;d=320;end

                if a <= 0;a=1;end
                if b <= 0;b=1;end
                if c <= 0;c=1;end
                if d <= 0;d=1;end

                obj.error_code = '06-02';
                frame = obj.Current_Image(a:c,b:d);%156:191,218:235);%84:119,112:129);%
                %disp('Set current_frame part0')
                for i = size(frame,1)+1:obj.PtternsDimension(1)
                    for j =size(frame,2)+1:obj.PtternsDimension(2)
                        frame(i,j) = 0;
                    end
                end

                %disp('Set current_frame part1')
                obj.error_code = '06-03';
                if size(frame,1)==obj.PtternsDimension(1)
                    for i = 1:obj.PtternsDimension(1)
                        for j =size(frame,2)+1:obj.PtternsDimension(2)
                            frame(i,j) = 0;
                        end
                    end
                end
                %disp('Set current_frame part2')

                obj.error_code = '06-04';
                if size(frame,2)==obj.PtternsDimension(2)
                    for i = size(frame,1)+1:obj.PtternsDimension(1)
                        for j =1:obj.PtternsDimension(2)
                            frame(i,j) = 0;
                        end
                    end
                end
                obj.current_frame = frame(:,:);
            catch e
                if strcmp(obj.Show_Message,'true')
                    warning( 'VBPDS:Return_Frame', '  Error in Return_Frame : "%s".\n',e.message);
                    disp(['VBPDS:Return_Frame  ', 'error_code  : ' obj.error_code]);
                end
            end
        end
        function obj = Compute_Fitness(obj)
        %% 
            try
                obj.error_code = '07-01';
%                 current_frame_phi = abs(log(invmoments(obj.current_frame)))';
%                 for i = 1:7
%                     if current_frame_phi(i) == Inf
%                         current_frame_phi(i) = 0;
%                     end
%                 end
% 
%                 obj.error_code = '07-02';
%                 for i = 1:obj.Number_of_PedestrianPatterns
%                     Delta_phi(1,i) = norm(obj.All_Patterns_Edg_Phi(:,i) - current_frame_phi);
%                 end
%                 [MIN_Delta_phi_val,MIN_Delta_phi_index] = min(Delta_phi);
% 
%                 obj.error_code = '07-03';
% %                 for i = obj.Number_of_PedestrianPatterns+1:obj.Number_of_PedestrianPatterns+obj.Number_of_NonPedestrianPatterns
% %                     Delta_phi2(1,i) = norm(obj.All_Patterns_Phi(i,:) - current_frame_phi');
% %                 end
% %                 [MIN_Delta_phi_val2,MIN_Delta_phi_index2] = min(Delta_phi2(1,obj.Number_of_PedestrianPatterns+1:end));
% 
%                 MIN_Delta_phi = .2;
%                 MAX_Delta_phi = 1;
%                 MIN_fitness = 100;
%                 MAX_fitness = 1;
% 
%                 fitness1 = (MIN_Delta_phi_val * (MAX_fitness-MIN_fitness)+(MAX_Delta_phi*MIN_fitness)-(MIN_Delta_phi*MAX_fitness))/(MAX_Delta_phi - MIN_Delta_phi);
%                 if (fitness1 < 0); fitness1 = 0;end
%                 if (fitness1 > 100); fitness1 = 100;end
% %                 MIN_Delta_phi = .5;
% %                 MAX_Delta_phi = 3;
% %                 MIN_fitness = 1;
% %                 MAX_fitness = 100;
% % 
% %                 obj.error_code = '07-04';
% %                 fitness2 = (MIN_Delta_phi_val2 * (MAX_fitness-MIN_fitness)+(MAX_Delta_phi*MIN_fitness)-(MIN_Delta_phi*MAX_fitness))/(MAX_Delta_phi - MIN_Delta_phi);
% %                 if (fitness2 < 0); fitness2 = 0;end
% %                 if (fitness2 > 100); fitness2 = 100;end
% 
%                 obj.error_code = '07-05';
%                 
%     %             if fitness1 > fitness2
%     %                 fitness = fitness1;
%     %             else
%     %                 fitness = MAX_fitness - fitness2;
%     %             end
% %                 disp ([obj.current_iteration obj.current_particle MIN_Delta_phi_val fitness1 MIN_Delta_phi_val2 fitness2 fitness])
%                 disp ([obj.current_iteration obj.current_particle MIN_Delta_phi_val fitness1 ])
% 
%                 if fitness1 > obj.g_best_fitness % best fitness is minimum
%                     obj.Delta_phi_index = MIN_Delta_phi_index;
%                 end
%                 % Set phi_index output
%                 if obj.current_fitness(obj.current_particle) <= obj.Termination_Fitness 
%                     obj.Delta_phi_index = MIN_Delta_phi_index;
%                 end


%                 tmp = [];
%                 for j = 1:size(obj.current_frame,2)
%                     tmp = [tmp;obj.current_frame(:,j)];%#ok<AGROW>
%                 end
%                 current_frame = double(tmp);
%                 fitness = sim(obj.Neural_Network,obj.current_frame);

                obj = obj.extract_feature;
                fitness1 = sim(obj.Neural_Network,obj.pi);

                obj.current_fitness(obj.current_particle,1) = fitness1;%round(abs(fitness)); % best fitness is minimum

            catch e
                if strcmp(obj.Show_Message,'true')
                    warning( 'VBPDS:Compute_Fitness', '  Error in Compute_Fitness : "%s".\n',e.message);
                    disp(['VBPDS:Compute_Fitness  ', 'error_code  : ' obj.error_code]);
                end
            end
        end
        function  obj = DisplayResults(obj,Image,Result,Image_Title,Image_Discription)
            try
                obj.error_code = '08-01';
                set(0, 'Units', 'pixels');
                f1 = figure; imshow(Image), title(Image_Title); 
                text(size(Image,2),size(Image,1)+15, ...
                     Image_Discription, ...
                     'FontSize',7,'HorizontalAlignment','right');
                set(gcf,'Name',Image_Title,'NumberTitle','off');
                %set(gcbo,'NextPlot','new');
                set(gcf,'Position',[50+(obj.Order-1)*255 100 250 250]);

                obj.error_code = '08-02';
                if ~isempty(Result)
                    for i = 1:size(Result,1)
                        for j = 1:size(Result,2)
                            if obj.result_fitness(i,j) >= 0
                                f3 = rectangle ('Position', [Result(i,j,2),Result(i,j,1),obj.PtternsDimension(2),obj.PtternsDimension(1)]);
                                if i == size(Result,1) && j == size(Result,2)
                                    set(f3, 'EdgeColor', [1 1 1]);
                                    set(f3, 'FaceColor', [1 1 1]);
                                else
                                    set(f3, 'EdgeColor', obj.Color(j,:));
                                    %set(f3, 'FaceColor', [1 0 0]);
                                end
                            end
                        end
                    end
                end
                obj.error_code = '08-03';

                obj.Order = obj.Order + 1;
            catch e
                if strcmp(obj.Show_Message,'true')
                    warning('VBPDS:PSODisplayResults', 'Error in Display : "%s".\n',e.message);
                    disp(['VBPDS:DisplayResults  ', 'error_code  : ' obj.error_code]);
                end
            end  
        end
        
        function obj = extract_feature(obj)
            try
                %tic
                v_s = [];
                n_b_h = [];
                n_t_h = [];
                n_b_v = [];
                n_t_v = [];
                
                n_r_h = [];
                n_l_h = [];
                n_r_v = [];
                n_l_v = [];
                
                obj.error_code = '09-01';
                %obj.current_frame = obj.stream(1:36,1:18,1);
                tmp = obj.current_frame;
                
                %figure,imshow(tmp)
                %figure,imhist(tmp)
                
                tmp = uint8(histeq(tmp,16));
                %figure,imshow(tmp)
                %figure,imhist(tmp)
                height = size(tmp,1);
                width = size(tmp,2);
                
                obj.error_code = '09-02';
                h_e = edge(tmp,'sobel','horizontal');
                %figure,imshow(h_e)
                
                v_e = edge(tmp,'sobel','vertical');
                %figure,imshow(v_e)
                
                obj.error_code = '09-03';
                n_t_h = sum(h_e(1:(height/2),:));
                n_b_h = sum(h_e((height/2)+1:end,:));
                n_l_h = sum(h_e(:,1:(width/2)),2);
                n_r_h = sum(h_e(:,(width/2)+1:end),2);
                
                n_t_v = sum(v_e(1:(height/2),:));
                n_b_v = sum(v_e((height/2)+1:end,:));
                n_l_v = sum(v_e(:,1:(width/2)),2);
                n_r_v = sum(v_e(:,(width/2)+1:end),2);
                obj.error_code = '09-04';
                for i = 1:width 
                    if (n_b_h(i) > n_t_h(i)) && (n_b_h(i) ~= 0)
                        v_s_h(i) = n_t_h(i) / n_b_h(i);
                    else
                        if (n_t_h(i) > n_b_h(i)) && (n_t_h(i) ~= 0)
                            v_s_h(i) = n_b_h(i) / n_t_h(i);
                        else
                            if (n_t_h(i) == n_b_h(i)) && (n_b_h(i) > 0) && (n_t_h(i) > 0)
                                v_s_h(i) = 1;
                            else
                                if (n_b_h(i) == 0) || (n_t_h(i) == 0)
                                    v_s_h(i) = 0;
                                end
                            end
                        end
                    end
                    if (n_b_v(i) > n_t_v(i)) && (n_b_v(i) ~= 0)
                        v_s_v(i) = n_t_v(i) / n_b_v(i);
                    else
                        if (n_t_v(i) > n_b_v(i)) && (n_t_v(i) ~= 0)
                            v_s_v(i) = n_b_v(i) / n_t_v(i);
                        else
                            if (n_t_v(i) == n_b_v(i)) && (n_b_v(i) > 0) && (n_t_v(i) > 0)
                                v_s_v(i) = 1;
                            else
                                if (n_b_v(i) == 0) || (n_t_v(i) == 0)
                                    v_s_v(i) = 0;
                                end
                            end
                        end
                    end
                end
                obj.error_code = '09-05';
                for i = 1:height
                    if (n_r_h(i) > n_l_h(i)) && (n_r_h(i) ~= 0)
                        h_s_h(i) = n_l_h(i) / n_r_h(i);
                    else
                        if (n_l_h(i) > n_r_h(i)) && (n_l_h(i) ~= 0)
                            h_s_h(i) = n_r_h(i) / n_l_h(i);
                        else
                            if (n_l_h(i) == n_r_h(i)) && (n_r_h(i) > 0) && (n_l_h(i) > 0)
                                h_s_h(i) = 1;
                            else
                                if (n_r_h(i) == 0) || (n_l_h(i) == 0)
                                    h_s_h(i) = 0;
                                end
                            end
                        end
                    end
                    if (n_r_v(i) > n_l_v(i)) && (n_r_v(i) ~= 0)
                        h_s_v(i) = n_l_v(i) / n_r_v(i);
                    else
                        if (n_l_v(i) > n_r_v(i)) && (n_l_v(i) ~= 0)
                            h_s_v(i) = n_r_v(i) / n_l_v(i);
                        else
                            if (n_l_v(i) == n_r_v(i)) && (n_r_v(i) > 0) && (n_l_v(i) > 0)
                                h_s_v(i) = 1;
                            else
                                if (n_r_v(i) == 0) || (n_l_v(i) == 0)
                                    h_s_v(i) = 0;
                                end
                            end
                        end
                    end
                end
                
                beta = .9;
                obj.error_code = '09-06';
                
                
                f_h_e_h = h_e;%filtered horizontal edge by horizontal symetry
                f_h_e_v = h_e;%filtered horizontal edge by vertical symetry
                f_v_e_h = v_e;%filtered vertical edge by horizontal symetry
                f_v_e_v = v_e;%filtered vertical edge by vertical symetry
                

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -