联系QQ:

2181264433

新闻资讯
联系我们
联系:张女士
微信:扫一扫右侧二维码
QQ :2181264433
邮箱:2181264433@qq.com
地址:浙江省-嘉兴市-南湖区
网址:www.mhslogic.com
您当前位置:首页 > 国内资讯 > 正文国内资讯
MATLAB代做|FPGA代做|simulink代做——高斯混合模型的背景帧差法的MATLAB仿真
添加时间:2021-9-16 来源:本站整理
clc;
clear;
close all;
warning off;
addpath 'func\'

%通过前面的目标跟踪,这里我们主要对最后的结果进行显示
%本质上C这个程序是B里面的,但是由于涉及到的变量较多,如果再增加一些显示的变量,仿真及其缓慢,而且会出现OUT OF Memory
%所以这里单独对结论进行显示


%初始背景的提取
%注意,原始的视频非常大,这里需要截取其中需要处理的帧数
Bg_Length   = 20;
Start_Frame = Bg_Length+1;
End_Frame   = 999;
Simulation_frame = min(800,End_Frame);


load EmGmm_model.mat;
 
load TEMP\R4.mat
avi1        = aviread('vedio\4.AVI',[Start_Frame:End_Frame]);
vedio1      = {avi1.cdata};
avi2        = aviread('vedio\4.AVI',[1:Bg_Length]);
vedio2      = {avi2.cdata};
vedio       = [vedio2,vedio1];
tao     = 20;
X_samp  = [];
Y_samp  = [];
T_samp  = [];
W_samp  = [];
H_samp  = [];
X_samps = [];
Y_samps = [];
T_samps = [];
W_samps = [];
H_samps = [];
X_samps2 = [];
Y_samps2 = [];
T_samps2 = [];
W_samps2 = [];
H_samps2 = [];
for tt = 1:Simulation_frame;
    tt
    Images0 = Pimages{tt};
    [res3,res4,Xf,Yf,Timef,Wf,Hf] = func_fangk2(Images0,vedio{tt},tt,Bg_Length);
    
    %下面开始进行异常类型识别
    %重新采样
    X_samps{tt} = Xf;
    Y_samps{tt} = Yf;
    T_samps{tt} = Timef;
    W_samps{tt} = Wf;
    H_samps{tt} = Hf;
    
     if tt <= tao;
       X_samp = Xf;
       Y_samp = Yf;
       T_samp = Timef;
       W_samp = Wf;
       H_samp = Hf;
    else
       X_samp = Xf;
       Y_samp = Yf;
       T_samp = 0.001*ones(length(X_samp),1);
       Ls           = min(length(X_samps{tt}),length(X_samps{tt-tao}));
       for j = 1:Ls
           T_samp(j,1) = sqrt((X_samps{tt}(j) - X_samps{tt-tao}(j))^2 + (Y_samps{tt}(j) - Y_samps{tt-tao}(j))^2)/tao;
       end
       W_samp = Wf;
       H_samp = Hf;
    end
    
    X_samps2 = [X_samps2;X_samp];
    Y_samps2 = [Y_samps2;Y_samp];
    T_samps2 = [T_samps2;T_samp];
    W_samps2 = [W_samps2;W_samp];
    H_samps2 = [H_samps2;H_samp];
end


feature = [X_samps2,Y_samps2,T_samps2,W_samps2,H_samps2];
[Ns,Ds] = size(feature);  
Px      = calc_prob(feature,Ns,2,model.Miu,model.Sigma,Ds);
[~, cls_ind] = max(Px',[],1); 


%最后完异常检测效果
XV = [];
YV = [];
for tt = 1:1
    tt
    Images0 = Pimages{tt};
    [res3,res4,Xf,Yf,Timef,Wf,Hf] = func_fangk2(Images0,vedio{tt},tt,Bg_Length);

    figure(1);
    subplot(121)
    imshow(vedio{tt});
    title('原始图像');
    subplot(122)
    imshow(uint8(res3),[]);
    hold on;
    for jj = 1:length(cls_ind);
        if length(find(cls_ind==1)) > 1.2*length(find(cls_ind==2)) 
           if cls_ind(jj)==1
              plot(X_samps2(jj),Y_samps2(jj),'b.');
              XV(jj,1) = [X_samps2(jj)];
              YV(jj,1) = [Y_samps2(jj)];
              XV(jj,2) = [1];
              YV(jj,2) = [1];
           else
              plot(X_samps2(jj),Y_samps2(jj),'r.'); 
              XV(jj,1) = [X_samps2(jj)];
              YV(jj,1) = [Y_samps2(jj)];
              XV(jj,2) = [2];
              YV(jj,2) = [2];
           end
        end
        if length(find(cls_ind==1)) <= 1.2*length(find(cls_ind==2)) 
           if cls_ind(jj)==1
              plot(X_samps2(jj),Y_samps2(jj),'r.');
              XV(jj,1) = [X_samps2(jj)];
              YV(jj,1) = [Y_samps2(jj)];
              XV(jj,2) = [2];
              YV(jj,2) = [2];
           else
              plot(X_samps2(jj),Y_samps2(jj),'b.');  
              XV(jj,1) = [X_samps2(jj)];
              YV(jj,1) = [Y_samps2(jj)];
              XV(jj,2) = [1];
              YV(jj,2) = [1];
           end
        end        
 
        hold on;
    end
    title('异常行为识别');
    pause(0.0025);
end

%异常检测动画效果,将系统最后处理的结果进行显示
S1 = 0;
E1 = 0;
for tt = 1:Simulation_frame;
    tt
    Images0 = Pimages{tt};
    [res3,res4,Xf,Yf,Timef,Wf,Hf] = func_fangk2(Images0,vedio{tt},tt,Bg_Length);
    figure(2);
    subplot(121)
    imshow(vedio{tt});
    title('原始图像');
    subplot(122)
    imshow(uint8(res3),[]);
    hold on;
    S1 = E1 + 1;
    E1 = E1 + length(Xf);
    Xtmp = XV(1:E1,1);
    Ytmp = YV(1:E1,1);
    Flag = XV(1:E1,2);
    for j = 1:length(Flag)
        if Flag(j) == 1
           plot(Xtmp(j),Ytmp(j),'b.');  
           hold on;
        end
        if Flag(j) == 2
           plot(Xtmp(j),Ytmp(j),'r.');  
           hold on;
        end
        hold on;
    end
    hold on;
    title('异常行为检测');
    pause(0.01);
end
————————————————
 

扫一扫,关注我们