锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【人员密度检测】基于形态学处理和GRNN网络的人员密度检测matlab仿真

时间:2022-12-16 05:00:00 y2p连接器

1.软件版本

matlab2015b

2.算法概述

人群密度分为三个等级,(1)在稀缺和不拥挤的情况下提醒绿色。(2)在拥挤的情况下发出黄色警告。(3)在非常拥挤的情况下发出红色警报。 通过相应的报警级别在界面上实时显示不同人群的密度

人群密度分类有两种思路:

(1)估计在景人数,根据人数判断人群密度。

(2)提取分析人群的整体特征,训练样本,用分类器学习分类。

首先,提取视频的纹理是灰度共生矩阵

http://wenku.baidu.com/view/d60d9ff5ba0d4a7302763ae1.html?from=search

然后通过GRNN神经网络训练识别算法:

广义回归神经网络(Generalized regression neural network, GRNN)通过观察样本计算自变量与因变量之间的概率密度函数,是一种基于非参数核回归的神经网络。GRNN结构如图1所示,整个网络包括四层神经元:输入层、模式层、求和层与输出层。

GRNN神经网络的性能主要由隐藏回归单元核函数的光滑因子设置,不同的光滑因子可以获得不同的网络性能。输入层的神经元数等于学习样本中输入向量的维数m。每个神经元对应一个不同的学习样本,模式层中第一个神经元的传输函数为:

由此可见,选择学习样本后,GRNN网络的结构和权重是完全确定的,所以训练GRNN网络比训练更重要BP网络和RBF网络要方便得多。根据上述情况。GRNN网络各层的输出计算公式,整个GRNN网络输出可以用如公式表示:

3.部分源码

function pushbutton2_Callback(hObject, eventdata, handles) % hObject    handle to pushbutton2 (see GCBO) % eventdata  reserved - to be defined in a future version of MATLAB % handles    structure with handles and user data (see GUIDATA) global frameNum_Original; global frameNum_Originals; global Obj; %% %参数初始化 视频大小处理% RR = 200; CC = 300;   K                   = 3;                   %组件 Alpha               = 0.02;                %适应权重速度 Rho                 = 0.01;                适应权重速度的% Deviation_sq        = 49;                  用阈值用于搜索匹配  Variance            = 2;                   新放置组件初始方差% Props               = 0.00001;             %最初是新放置的  Back_Thresh         = 0.8;                 背景模型必须占%体重的比例 Comp_Thresh         = 10;                  %过滤连接组件的小尺寸 SHADOWS             =[0.7,0.25,0.85,0.95]; %设置阴影去除门限值  CRGB  = 3; D     = RR * CC; Temps = zeros(RR,CC,CRGB,'uint8');     Temps = imresize(read(Obj,1),[RR,CC]); Temps = reshape(Temps,size(Temps,1)*size(Temps,2),size(Temps,3));        Mus                 = zeros(D,K,CRGB); Mus(:,1,:)          = double(Temps(:,,1); Mus(:,2:K,:)        = 255*rand([D,K-1,CRGB]); Sigmas              = Variance*ones(D,K,CRGB);  Weights             = [ones(D,1),zeros(D,K-1)]; Squared             = zeros(D,K);     Gaussian            = zeros(D,K);      Weight              = zeros(D,K); background          = zeros(RR,CC,frameNum_Original); Shadows             = zeros(RR,CC); Images0             = zeros(RR,CC,frameNum_Original);         Images1             = zeros(RR,CC,frameNum_Original);   Images2             = zeros(RR,CC,frameNum_Original);    background_Update   = zeros(RR,CC,CRGB,frameNum_Original);   indxx               = 0;  for tt = frameNum_Originals     disp(当前帧数);     tt     indxx            = indxx   1;      pixel_original   = read(Obj,tt);     pixel_original2  = imresize(pixel_original,[RR,CC]);              Temp = zeros(RR,CC,CRGB,'uint8');      Temp = pixel_original2;     Temp = reshape(Temp,size(Temp,1)*size(Temp,2),size(Temp,3));        image = Temp;     for kk = 1:K            Datac         = double(Temp)-reshape(Mus(:,kk,:),D,CRGB);         Squared(:,kk) = sum((Datac.^ 2)./reshape(Sigmas(:,kk,:),D,CRGB),2);      end     [junk,index] = min(Squared,[],2);      Gaussian                                                = zeros(size(Squared));     Gaussian(sub2ind(size(Squared),1:length(index),index')) = ones(D,1);     Gaussian                                                = Gaussian&(Squared= Comp_Thresh)
          objects_map             = objects_map + int32(object * new_label);
          object_sizes(new_label) = object_size;
          [X,Y]                   = meshgrid(1:CC,1:RR);    
          object_x                = X.*object;
          object_y                = Y.*object;
          Obj_pos(:,new_label)    = [sum(sum(object_x)) / object_size;
                                     sum(sum(object_y)) / object_size];
          new_label               = new_label + 1;
       end
    end
    num_objects = new_label - 1;
    %去除阴影
    index                       = sub2ind(size(Mus),reshape(repmat([1:D],CRGB,1),D*CRGB,1),reshape(repmat(bg_gauss_good',CRGB,1),D*CRGB,1),repmat([1:CRGB]',D,1));
    background                  = reshape(Mus(index),CRGB,D);
    background                  = reshape(background',RR,CC,CRGB); 
    background                  = uint8(background);
    if  indxx <= 500;
        background_Update           = background;
    else
        background_Update           = background_Update;
    end
        
    
    
    background_hsv              = rgb2hsv(background);
    image_hsv                   = rgb2hsv(pixel_original2);
    for i = 1:RR
        for j = 1:CC      
            if (objects_map(i,j))&&...
               (abs(image_hsv(i,j,1)-background_hsv(i,j,1)) 80;
       %计算区域内像素值
       S1           = sum(sum(Images2BW(Y1:Y2,X1:X2)));
       S2(indxx-80) = S1/((X2-X1)*(Y2-Y1)); 
    end
    Images3BW(Y1:Y2,X1:X2)   = Images2BW(Y1:Y2,X1:X2);
    Images3Brgb              = pixel_original2(Y1:Y2,X1:X2,:);
    %纹理检测
    %计算纹理
    [A,B]     = func_wenli(rgb2gray(Images3Brgb));
    %选择能量 熵作为判断依据
    if indxx > 80;
       F1(indxx-80) = A(1);
       F2(indxx-80) = A(2);
       F3(indxx-80) = A(3);
    end
    if indxx > 80;
        load train_model.mat
        P     = [S2(indxx-80);F2(indxx-80)];
        y     = round(NET(P));


        if y == 1
           set(handles.text2,'String','低密度'); 
           set(handles.text2,'ForegroundColor',[0 1 0]) ;
        end
        if y == 2
           set(handles.text2,'String','中密度');  
           set(handles.text2,'ForegroundColor',[1 1 0]) ;
        end    
        if y == 3
           set(handles.text2,'String','高密度');   
           set(handles.text2,'ForegroundColor',[1 0 0]) ;
        end    
    end
    
    
    
    
    axes(handles.axes1)
    imshow(pixel_original2);
%     title('定位检测区域');
    hold on
    line([X1,X2],[Y1,Y1],'LineWidth',1,'Color',[0 1 0]);
    hold on
    line([X2,X2],[Y1,Y2],'LineWidth',1,'Color',[0 1 0]);
    hold on
    line([X2,X1],[Y2,Y2],'LineWidth',1,'Color',[0 1 0]);    
    hold on
    line([X1,X1],[Y2,Y1],'LineWidth',1,'Color',[0 1 0]); 
    
    
    axes(handles.axes2)
    imshow(uint8(background_Update));
%     title('背景获得');
    
 
    axes(handles.axes3)
    imshow(Images0,[]);
%     title('动态背景提取');    
    axes(handles.axes4)
    imshow(Images3BW,[]);
%     title('动态背景提取(检测区域内)');       
    
    
    pause(0.0000001);
end

4.仿真结果

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章