视音频技术
课程设计
基于混合高斯背景建模技术的
运动目标检测
一 课题内容
对于固定摄像机镜头的视频(即背景静止),检测出视频中的运动物体,并用方框框
出检测到的目标。使用 matlab,采取混合高斯背景建模的方法,将 avi 格式视频文件中的
运动物体与背景分离,并标注出运动目标。
二 算法分析
混合高斯背景建模是基于样本统计信息的背景表示方法,利用像素在较长时间内大量
样本值的概率密度等统计信息(如模式数量、每个模式的均值和标准差)表示背景,然后
使用统计差分进行目标像素判断。它能够对复杂动态背景进行建模,计算量较大。
在混合高斯背景模型中,认为像素之间的颜色信息互不相关,对各像素点的处理都是
相互独立的。对于视频图像中的每一个像素点,其值在序列图像中的变化可看作是不断产
生像素值的随机过程,即用高斯分布来描述每个像素点的颜色呈现规律。
在进行视频运动目标检测时,只对灰度信息进行建模。
详细的算法流程如下。
(1) 混合高斯模型预定义
首先初始化 k 个高斯分布,即对高斯模型中的均值和方差参数进行初始化,把
视频序列中各帧图像看成是一个时间序列:{X1,X2,…XT}。用 k 个高斯分布来表征
每一帧图像中各像素点特征。则在 t 时刻,像素点 的概率密度可使用 k 个高斯
密度函数加权来拟合:
为高斯概率密度函数。其中, 、 和 为图像序
列 在 t 时刻第 i 个高斯分布的权重、均值和协方差矩阵。 , 为
方差。k 一般取值为 3~5,在本文中 k=3。
(2) 混合高斯模型的参数更新
当前像素 与 k 个高斯分布按 逐一进行匹配,根据匹配
结果调整高斯模型的参数:
只要当前像素与 k 个模型其中的一个模型匹配,则认为该像素匹配高斯背景模
型。而每个高斯模型的权值更新方法如下:
其中 为学习率,若匹配成功,则 ,否则 。即增大匹配的高
斯模型的权重。匹配不成功的高斯模型分布参数不变,对匹配成功的高斯模型
的均值和方差参数需要进行更新:
其中 是更新速率。
若 k 个高斯模型中没有一个高斯模型与之匹配,则以该像素建立一个新高斯模
型,初始化参数,代替原有模型中最不可能的权重最小的单个模型。
当更新完成后,每个高斯模型的权值需要归一化:
(3) 背景模型的选择和前景提取
更新会后,按照 对 k 个高斯分布从高进低进行排序,选择前面 B 个高
斯分布来表征背景图像:
T 一般取 0.75(本文采用 0.25), 表征背景图像。
整个混合高斯背景建模的流程如下图所示:
三 具体实现
1. 视频文件的读取
首 先 读 取 matlab 提 供 的 avi 视 频 文 件 , 比 较 适 合 做 运 动 物 体 检 测 的 有
visiontrac.avi atrium.avi singleball.avi。使用 VideoReader 函数读取视频对象,获取
视频的基本信息,如宽度、高度、帧数。初始化用来存储前景图和背景图的图像
fg 和 bg_bw。
source=VideoReader('singleball.avi');
numFrames=source.NumberOfFrames;
%----frame size variables------------------------
fr=read(source,1);%read in 1st frame as background frame
fr_bw=rgb2gray(fr);%convert background to greyscale
fr_size=size(fr);
width=source.Width;
height=source.Height;
fg=zeros(height,width);%to save the foreground pixels
bg_bw=zeros(height,width);%to update background
2. 混合高斯模型预定义
C=3;%number of Gaussian components
M=3;%number of background components
D=2.5;%posi>ve devia>on threshold
alpha=0.01;
thresh=0.25;%foreground threshold(0.25 or 0.75 in paper)
sd_init=6;%ini>al standard devia>on(for new components)
w=zeros(height,width,C);%ini>alize weights array
sd=zeros(height,width,C);%pixel means
sd=zeros(height,width,C);%pixel standard devia>ons
u_di@=zeros(height,width,C);%di@erence of each pixel from mean
p=alpha/(1/C);%ini>al p variable(used to update mean and sd)
rank=zeros(1,C);%rank of components(w/sd)
%----ini>alize component means and weights----
pixel_depth=8; %8-bit resolu>on
pixel_range=2^pixel_depth-1;%pixel range( of possible values)
for i=1:height
for j=1:width
for k=1:C
mean(i,j,k)=rand*pixel_range; %means random (0-255)
w(i,j,k)=1/C;%weights uniformly dist
sd(i,j,k)=sd_init;%ini>alize to sd_init
end
end
end
3. 混合高斯模型的参数更新
match=0;
for k=1:C
if(abs(u_di@(i,j,k))<=D*sd(i,j,k))%pixel matches component
match=1;
%update weights,mean,sd,p
w(i,j,k)=(1-alpha)*w(i,j,k)+alpha;
p=alpha/w(i,j,k);%p is the upda>ng rate
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%pixel does not match component
w(i,j,k)=(1-alpha)*w(i,j,k);%weight slightly decreases
end
end
w(i,j,:)=w(i,j,:)./sum(w(i,j,:));%the sum of gaussian models for each pixel
- 1
- 2
前往页