• 大小: 58KB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: C/C++
  • 标签: 背景建模  

资源简介

利用Scene_Data文件夹中的视频帧序列实现基于GMM(高斯混合模型)的背景建模。  利用C语言或者Open_CV库,或者是MATLAB软件编写混合高斯模型算法的程序。实现给定图像帧序列的背景建模及跟踪。代码可以通过一个主函数直接运行出实验结果。  要求写出对算法即其实现遇到问题的理解和实时性问题,每秒能处理多少帧,录制代码运行时的视频拷屏

资源截图

代码片段和文件信息

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%高斯背景建模()
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


clear all
tic;%计时开始%取第一幅符合要求的背景图、
% ------------  frame size variables 帧的变量定义-----------------------

fr = imread(‘00.jpg‘);           % 读取第一帧图片作为背景
fr_bw = rgb2gray(fr);     % 将背景转换为灰度图像
fr_size = size(fr);      %取帧的大小       
width = fr_size(2);      %将第一帧图片矩阵列数赋给width
height = fr_size(1);      %第一帧图片矩阵行数赋给height
fg = zeros(height width);  %定义一个相同大小的零矩阵 前景
bg_bw = zeros(height width);%背景

% ------------ mog variables 混合高斯模型变量定义----------------------------------

C = 3;                                  % 组成混合高斯单高斯数目(一般为3~5)
M = 3;                                  % 组成背景的数目
D = 2.5;                                % 阈值(一般为2.5倍的标准差)
alpha = 0.01;                           % 学习率 (在 0 到 1之间) (from paper 0.01)决定更新速度
thresh = 0.25;                          % 前景阈值 (0.25 or 0.75 in paper)
sd_init = 6;                            % 初始化标准差 (for new components) var = 36 in paper
w = zeros(heightwidthC);              % 初始化权值数组矩阵
mean = zeros(heightwidthC);           % 像素均值矩阵
sd = zeros(heightwidthC);             % 像素标准差矩阵
u_diff = zeros(heightwidthC);         % 与均值作差的矩阵
p = alpha/(1/C);                        % 参与学习率 (用于更新 mean 和 sd)
rank = zeros(1C);                      % 梯度组成部分,越大愈好 (w/sd)


% ---- initialize component means and weights 初始化均值和权值-----------

pixel_depth = 8;                        % 像素深度为8位
pixel_range = 2^pixel_depth -1;         % 像素范围2的7次方0-255

for i=1:height
    for j=1:width
        for k=1:C
            
            mean(ijk) = rand*pixel_range;     % 随机数 (0-255)
            w(ijk) = 1/C;                     % 权值数组矩阵均匀
            sd(ijk) = sd_init;                % 初始化 sd_init
            
        end
    end
end

%------------ process frames 处理帧-----------------------------------

for n = 0001:0200       %循环共有200幅图片

    fr = imread([‘0‘int2str(n)‘.jpg‘]);      % 读取帧
    fr_bw = rgb2gray(fr);       % 转换为灰度图像
    
    % calculate difference of pixel values from mean计算像素差值
    for m=1:C
        u_diff(::m) = abs(double(fr_bw) - double(mean(::m)));
    end
     
    % update gaussian components for each pixel 更新每个像素的背景模型
    for i=1:height
        for j=1:width
            
            match = 0;
            for k=1:C                       
                if (abs(u_diff(ijk)) <= D*sd(ijk))       % 像素匹配了模型
                    
                    match = 1;                          % 设置匹配记号
                    
                    % update weights mean sd p 
                    % 更新   权值     均值  标准差  参数学习率
                    w(ijk) = (1-alpha)*w(ijk) + alpha;
                    p = alpha/w(ijk);                  
                    mean(ijk) = (1-p)*mean(ijk) + p*double(fr_bw(ij));
                    sd(ijk) =   sqrt((1-p)*(sd(ijk)^2) + p*((double(fr_bw(ij)) - mean(ijk)))^2);
                else      

评论

共有 条评论