运动目标检测_混合高斯背景建模

1.混合高斯背景建模理论

混合高斯背景建模是基于像素样本统计信息的背景表示方法,利用像素在较长时间内大量样本值的概率密度等统计信息(如模式数量、每个模式的均值和标准差)表示背景,然后使用统计差分(如3σ原则)进行目标像素判断,可以对复杂动态背景进行建模,计算量较大。

在混合高斯背景模型中,认为像素之间的颜色信息互不相关,对各像素点的处理都是相互独立的。对于视频图像中的每一个像素点,其值在序列图像中的变化可看作是不断产生像素值的随机过程,即用高斯分布来描述每个像素点的颜色呈现规律{单模态(单峰),多模态(多峰)}。

对于多峰高斯分布模型,图像的每一个像素点按不同权值的多个高斯分布的叠加来建模,每种高斯分布对应一个可能产生像素点所呈现颜色的状态,各个高斯分布的权值和分布参数随时间更新。当处理彩色图像时,假定图像像素点R、G、B三色通道相互独立并具有相同的方差。对于随机变量X的观测数据集{x1,x2,…,xN},xt=(rt,gt,bt)为t时刻像素的样本,则单个采样点xt其服从的混合高斯分布概率密度函数

其中k为分布模式总数,η(xt,μi,t,τi,t)为t时刻第i个高斯分布,μi,t为其均值,τi,t为其协方差矩阵,δi,t为方差,I为三维单位矩阵,ωi,t为t时刻第i个高斯分布的权重。

2.混合高斯背景建模算法流程

1.每个新像素值Xt同当前K个模型按下式进行比较,直接找到匹配新像素值的分布模型,即同该模型的均值偏差在2.5σ内:

2.如果所匹配的模式符合背景要求,则该像素属于背景,否则属于前景。

3.各个模式权值按如下方式进行更新,其中a是学习速率,对于匹配的模式Mk,t=1,否则Mk,t=0,然后各模式的权重进行归一化:

4.未匹配模式的均值μ和标准差σ不变,匹配模式的参数按照如下更新:

5.如果,第一步中没有任何模式匹配,则权重最小的模式被替换,即该模式的均值为当前像素值,标准差为初始较大值,权重为较小值。

6.各模式根据w/a^2按降序排列,权重大、标准差小的模式排列在前。

7.选前B个模式作为背景,B满足下式,参数T表示背景所占的比例:

3.MATLAB仿真与实践

%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Author: Ziheng H. Shen @Tsinghua Univ.
%HybridGaussModel @Digital Image Process Practice
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear all;
cntFrame = 23;
obj = VideoReader(‘768x576.avi‘);
numFrames = obj.NumberOfFrames;
 for k = 1 : cntFrame
     frame = read(obj,k);
      imwrite(frame,...
          strcat(‘C:\Users\Zi-Heng Shen\Documents\MATLAB\BackGroundModel\混合高斯背景建模\‘,...
          num2str(k),‘.bmp‘),‘bmp‘);
 end
%% 参数定义及初始化
I = imread(‘1.bmp‘);                    %读入第一帧作为背景帧
fr_bw = I;
[height,width] = size(fr_bw);           %求每帧图像大小
width = width/3;                        %排除颜色通道数
fg = zeros(height, width);              %定义前景和背景矩阵
bg_bw = zeros(height, width);

C = 3;                                  % 单高斯模型的个数(通常为3-5)
M = 3;                                  % 代表背景的模型个数
D = 2.5;                                % 偏差阈值
alpha = 0.01;                           % 学习率
thresh = 0.25;                          % 前景阈值
sd_init = 15;                           % 初始化标准差
w = zeros(height,width,C);              % 初始化权重矩阵
mean = zeros(height,width,C);           % 像素均值
sd = zeros(height,width,C);             % 像素标准差
u_diff = zeros(height,width,C);         % 像素与某个高斯模型均值的绝对距离
p = alpha/(1/C);                        % 初始化p变量,用来更新均值和标准差
rank = zeros(1,C);                      % 各个高斯分布的优先级(w/sd)

pixel_depth = 8;                        % 每个像素8bit分辨率
pixel_range = 2^pixel_depth -1;         % 像素值范围[0,255]

for i=1:height
    for j=1:width
        for k=1:C
            mean(i,j,k) = rand*pixel_range;     %初始化第k个高斯分布的均值
            w(i,j,k) = 1/C;                     % 初始化第k个高斯分布的权重
            sd(i,j,k) = sd_init;                % 初始化第k个高斯分布的标准差
        end
    end
end

for n = 1:cntFrame
    frame=strcat(num2str(n),‘.bmp‘);
    I1 = imread(frame);  % 依次读入各帧图像
    fr_bw = I1;
    % 计算新像素与第m个高斯模型均值的绝对距离
    for m=1:C
        u_diff(:,:,m) = abs(double(fr_bw(:,:,m)) - double(mean(:,:,m)));
    end
    % 更新高斯模型的参数
    for i=1:height
        for j=1:width
            match = 0;                                       %匹配标记;
            for k=1:C
                if (abs(u_diff(i,j,k)) <= D*sd(i,j,k))       % 像素与第k个高斯模型匹配
                    match = 1;                               %将匹配标记置为1
                    % 更新权重、均值、标准差、p
                    w(i,j,k) = (1-alpha)*w(i,j,k) + alpha;
                    p = alpha/w(i,j,k);
                    mean(i,j,k) = (1-p)*mean(i,j,k) + p*double(fr_bw(i,j));
                    sd(i,j,k) =   sqrt((1-p)*(sd(i,j,k)^2) + p*((double(fr_bw(i,j)) - mean(i,j,k)))^2);
                else                                         % 像素与第k个高斯模型不匹配
                    w(i,j,k) = (1-alpha)*w(i,j,k);           %略微减少权重
                end
            end
            bg_bw(i,j)=0;
            for k=1:C
                bg_bw(i,j) = bg_bw(i,j)+ mean(i,j,k)*w(i,j,k);
            end
            % 像素值与任一高斯模型都不匹配,则创建新的模型
            if (match == 0)
                [min_w, min_w_index] = min(w(i,j,:));      %寻找最小权重
                mean(i,j,min_w_index) = double(fr_bw(i,j));%初始化均值为当前观测像素的均值
                sd(i,j,min_w_index) = sd_init;             %初始化标准差为6
            end
            rank = w(i,j,:)./sd(i,j,:);                    % 计算模型优先级
            rank_ind = [1:1:C];%优先级索引
            % 计算前景
            fg(i,j) = 0;
            while ((match == 0)&&(k<=M))
                    if (abs(u_diff(i,j,rank_ind(k))) <= D*sd(i,j,rank_ind(k)))% 像素与第k个高斯模型匹配
                        fg(i,j) = 0; %该像素为背景,置为黑色
                    else
                        fg(i,j) = 255;    %否则为前景,置为白色
                    end
                k = k+1;
            end
        end
    end
    figure(n)
    subplot(1,3,1),imshow(fr_bw);               %显示最后一帧图像
    subplot(1,3,2),imshow(uint8(bg_bw))         %显示背景
    disk = strel(‘disk‘,1);disk1 = strel(‘disk‘,4);
    subplot(1,3,3),imshow(imdilate(imerode(uint8(fg),disk),disk1));   %显示前景
end

输出结果:

代码及结果引用请标注:Ziheng H. Shen @Graduate School of Tsinghua Univ.

时间: 2024-08-08 05:39:03

运动目标检测_混合高斯背景建模的相关文章

混合高斯背景建模

在运动目标检测提取中,背景目标对于目标的识别和跟踪至关重要.而建模正是背景目标提取的一个重要环节. 前景是指在假设背景为静止的情况下,任何有意义的运动物体即为前景. 运动物体检测的问题主要分为两类,摄像机固定和摄像机运动.对于摄像机运动的运动物体检测问题,比较著名的解决方案是光流法,通过求解偏微分方程求的图像序列的光流场,从而预测摄像机的运动状态.对于摄像机固定的情形,当然也可以用光流法,但是由于光流法的复杂性,往往难以实时的计算.而混合高斯背景建模适合于在摄像机固定的情况下从图像序列中分离出背

运动目标检测知识整理(背景建模 VIBE 背景差分 帧间差分 光流 HOG Adaboost SVM 显著性检测)

(多模态)混合高斯背景建模

高斯背景建模之icvMatchTest函数篇

//对每个象素点进行匹配 static int icvMatchTest( double* src_pixel, int nChannels, int* match, const CvGaussBGPoint* g_point, const CvGaussBGStatModelParams *bg_model_params ) { int k; int matchPosition=-1; //这个匹配的位置只能是0,1,2(在假设3个高斯的前提下) for ( k = 0; k < bg_mod

OpenCV运动目标检测——帧间差,混合高斯模型方法

一.简单的帧间差方法 帧差法是在连续的图像序列中两个或三个相邻帧间采用基于像素的时间差分并且闽值化来提取图像中的运动区域. 代码: int _tmain(int argc, _TCHAR* argv[]) { VideoCapture capture("bike.avi"); if(!capture.isOpened()) return -1; double rate = capture.get(CV_CAP_PROP_FPS); int delay = 1000/rate; Mat

运动目标检测--改进的背景减法

一.概述 本文提出了一种改进的基于背景减法的运动目标检测算法,该算法能自适应地对背景进行初始化和实时更新,并能有效克服光照等外界条件变化对运动目标检测的影响. 二.算法介绍 基于背景减法的视频运动目标检测主要包括预处理.背景建模.目标检测和后处理四个步骤.本文的算法流程如图 1 所示,算法中的预处理是对每一帧图像都进行去噪和亮度归一化处理,以抑制光照突变和噪声的影响:背景建模则采用改进的均值滤波法自动初始化背景,并不断实时更新背景,以克服环境光照变化所产生的影响:目标检测是在背景减法的基础上采用

混合高斯模型GMM

转自:http://blog.csdn.net/carson2005/article/details/7467891 运动目标检测可以分为摄像机固定和摄像机运动两类:对于摄像机运动情况下的运动目标检测,光流法是比较常用的解决方法,通过求解偏微分方程求得图像序列的光流场,从而预测摄像机的运动状态.对于摄像机固定的情形,可以采用光流法也可以采用高斯背景模型,考虑到光流法计算量巨大,故而,高斯背景模型相对更常用一些.需要提醒的是,这里所谓的“背景”是指用户不需要的目标,而“前景”自然指代用户需要的特定

运动目标检测ViBe算法

一.运动目标检测简介   视频中的运动目标检测这一块现在的方法实在是太多了.运动目标检测的算法依照目标与摄像机之间的关系可以分为静态背景下运动检测和动态背景下运动检测.先简单从视频中的背景类型来讨论.        静态背景下的目标检测,就是从序列图像中将实际的变化区域和背景区分开了.在背景静止的大前提下进行运动目标检测的方法有很多,这些方法比较侧重于背景扰动小噪声的消除,如:1.背景差分法2.帧间差分法3.光流法4.混合高斯模型(GMM)5.码本(codebook)还有这些方法的变种,例如三帧

[MOC062066]背景建模资料收集整理

一.相关博客 背景建模相关资料收集,各个链接都已给出. 资料,不可能很完整,以后不定期更新. -----------------分割线----------------- 这个哥们总结的很好啊,看完了基本就有一个比较"全面"的认知可.可以侃晕一些外行了,哈哈哈... 千里8848: 背景建模(一) Evaluation of Background Subtraction Techniques for Video Surveillance 背景建模(二)--以像素值为特征的方法(1) 背景