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

📄 gaussian_average_yuv.m

📁 这是基于高斯模型的运动目标检测算法。采用空间是YUV。
💻 M
字号:
function gaussian_average_yuv()
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%           以逐个像素点为单位,用单高斯模型来训练背景,然后判断
%%%%%%%%%%               前景点与背景点,颜色空间取YUV
%%%%%%%%%%优点:效果较好。能比较完整的定位目标.K,dx_compensate参数的调节很重要
%%%%%%%%%%缺点:抗阴影能力不强,抗光照突变能力不强。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    close all;
    string = input('Please enter image your emulate:','s');
    ROW = input('Please enter the row of your image :');
    CLOUMN = input('Please enter the column of your image: ');
    FRAME = input('Please enter the frame your want to process:');
    TRAINFRAME = 15;
    k = 4;
    ex(ROW,CLOUMN,3) = 0;
    ex2(ROW,CLOUMN,3) = 0;
    dx(ROW,CLOUMN,3) = 0;
    gs_ex(ROW,CLOUMN,3) = 0;
    ex = double(ex);
    ex2 = double(ex2);
    dx = double(dx);
    dx_compensate = 8;
    se = eye(6);
    figure('Name','单高斯算法_YUV空间')
     for i=1:FRAME
        ss = [string '\' 'image' num2str(i+120) '.bmp'];
        movv = imread(ss);        
        mov = rgb2Ycbcr(movv);%RGB->YUV
        subplot(2,2,1)
        imshow(mov);
        ss = [int2str(i) '.YUV'];
        title(ss);
        pause(0.01);
       if(i<=TRAINFRAME)                %前TRAINFRAME帧用于训练背景
           disp('背景训练中。。。');
           ex(:,:,:) =  ex(:,:,:) + double(mov(:,:,:));%E(X)
           ex2(:,:,:) =  ex2(:,:,:) + (double(mov(:,:,:))).^2;%E(X^2)
           if(i == TRAINFRAME)
               ex(:,:,:) =  ex(:,:,:)/TRAINFRAME;
               ex2(:,:,:) =  ex2(:,:,:)/TRAINFRAME;
               dx(:,:,:) =  max(sqrt(ex2(:,:,:) - (ex(:,:,:)).^2),dx_compensate);%DX = E(X^2)-E(X)^2
               disp('背景训练完毕!!!');
               subplot(2,2,2)
               exx = uint8(ex);
               imshow(exx);
               ss = [int2str(i) '.Background'];
               title(ss);
               pause(0.01);
           end
       else
           I(:,:,:) = abs(ex(:,:,:) - double(mov(:,:,:)));
           subplot(2,2,4),plot(sum(ex(:,:,1)))
          for l=1:ROW
              for m=1:CLOUMN
                  if((I(l,m,1) > k*dx(l,m,1))|| (I(l,m,2) > k*dx(l,m,2)) || (I(l,m,3) > k*dx(l,m,3)))%YUV
                      gs_ex(l,m,1) = 255;
                      gs_ex(l,m,2) = 255;
                      gs_ex(l,m,3) = 255;
                  else
                      gs_ex(l,m,1) = 0;
                      gs_ex(l,m,2) = 0;
                      gs_ex(l,m,3) = 0;
                  end
              end
          end
          imopen(gs_ex,se);
       end
      subplot(2,2,3)
      imshow(gs_ex);
      ss = [int2str(i) '.Moving object testing..'];
      title(ss);
      pause(0.01); 
     end
   

⌨️ 快捷键说明

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