Moving Object Detection in Stationary Scene
摘要:随着计算机技术的不断提高,智能视频监控技术得到了很好的发展,
过去依靠人力监控视频中出现的人或汽车等既浪费人力物力,又不够准确,很容
易发生遗漏,而智能监控就不存在这种问题,只需在程序中设定报警条件即可,
能够准确地达到实时监控的目的。现在智能视频监控逐渐应用于城市道路、小区、
银行等重要场所及对场景中的异常事件或人的异常行为的监控中, 应用前景广
泛,正在逐步取代靠人力来观察视频信息。智能视频监控相比过去常用的靠人来
监测的最重要的不同就是识别出需要监控的对象,通常是运动目标的提取。在本
文中利用matlab视频处理功能,通过matlab程序来获取视频,使用背景减差法来
检测出运动目标提取静止背景中的运动目标,并将结果显示出来,以进行进一步
的分析处理。
关键字:视频监控;目标提取;静止背景;matlab;目标识别;背景减差法
基于视频的运动目标主要提取方法
目标检测是计算机视觉的一个重要组成部分,在军事及工业等领域有着重要
的应用前景。运动目标的检测方法主要有光流法,差值法。光流法的计算量很大,
实时性和应用性较差。而图像差值法比较简单,实时性较好,是目前应用最广泛,
最成功的运动目标检测的方法。图像差值法可分为两类,一类是用序列图像的每
一帧与一个固定的静止的参考帧做图像差分,但自然场景不是静止不变的,因而
必须不断的更新背景。另一类是用序列图像的两帧进行差分,这种方法无法检测
出两帧图像中重合的部分,只能检测出目标的一部分信息。在绝大多数视频监控
图像应用中,每一个像素都可以用一个或多个高斯模型近似,因此,高斯背景模
型是绝大多数目标检测方法常用的基本模型。许多学者对基于高斯混合背景模型
的背景消除法作了改进并取得了较好的效果。Stauffer 等人提出了采用自适应混
合高斯模型,作为背景统计模型的算法;Power 等人详细的讨论了混合高斯模型,
并对模型中的参数选择及更新提出了很好的建议。Monnet 等人在文献[3]中对摆
动的树叶,水纹的波动等动态纹理干扰作了深入研究,提出了在线的自动聚类模
型来获得并预测场景中的这些变化以减少干扰。然而,由于光照条件的影响,大
多数图像都存在阴影,阴影的存在干扰了目标的检测,使检测到的目标与真实的
目标形状相差很大,这对后续处理如目标识别、行为判断等会产生很大的影响。
混合高斯模型无法消除阴影的干扰,因此找到阴影消除的方法变得非常重要。近
年来,提出了很多阴影消除方法,毛晓波提出了基于最大色度差分的阴影检测方
法,A. Leone提出了基于纹理分析的阴影消除方法,通过分析纹理信息获取前景
目标并消除阴影,取得了较好的效果。
运动目标检测常用的方法一般分为两大类,一种是基于特征的方法,另一种
是基于灰度的方法。基于特征的方法是依据图像的特征来检测运动目标,它多用
于目标较大、特征容易提取的场合。基于灰度的方法一般是依据图像中灰度的变
化来检测运动目标。目前基于视频的检测方法主要有: 基于帧间差分的方法、基
于光流场的方法、基于背景差的方法等。帧间差分法是基于运动图像序列中相邻
两帧图像间具有强相关性而提出的检测方法, 具有很强的自适应性。但如果物体
内部灰度分布均匀这种方法会造成目标重叠部分形成较大空洞,严重时造成目标
分割不连通,从而检测不到目标。
光流场法是基于对光流的估算进行检测分割的方法。光流中既包括被观察物
体的运动信息, 也包括有关的结构信息。光流场的不连续性可以用来将图像分割
成对应于不同运动物体的区域。但多数光流法的计算复杂、耗时, 难以满足实时
监测的要求。
背景差法是运动检测中最常用的一种方法它将输入图像与背景图像进行比
较,直接根据灰度的变化等统计信息的变化来分割运动目标。差分法一般计算量
小实用价值大。缺点是受光线、天气等外界条件的影响较大。
N
Y
N
Y
图 1 程序流程图
1.背景建模
在进行运动检测时,常见的一种情况是摄像机处于静止状态,并且镜头的焦
距是固定的,此时,图像中的背景区域固定不动在摄像头固定,也就是在静止背
景条件下,背景差分是常用的运动目标检测方法,其基本思想是将当前图像与背
景图像相减,若像素差值大于某一阀值,则判断此像素为运动目标上的点,通常
的背景差分方法对光线、天气等光照条件的变化非常敏感,运动目标的阴影也常
常被检测为运动目标的一部分,这将影响检测结果的准确性。使用背景差法很重
要的一步是背景建模,要估计出一个不带有运动目标的背景模型,通过计算当前
图像帧和该背景模型的差别来确定运动目标的位置。 目前普遍采用的方法是对
图像帧中每一个点,用一个统计模型来描述其亮度(颜色)的概率分布,在实际中
使用最多的就是正态概率分布即高斯分布。高斯分布分为单高斯分布和多高斯分
布,其区别如下:
(1) 单高斯分布[1]
单高斯分布的背景建模是一种静态的区分背景与前景的办法,假定取到n帧
图像像素平均值是P,亮度平均值是I,每个图像点的颜色用一个高斯分布近似:
η(x,μn, )
(1)
x:第n帧图片灰度值
μn:第n帧时背景图片均值
Σn :第n帧背景图片协方差,当某点观察颜色值与背景分布相差过大(闽值
界定)时认为是前景点,否则为背景点。
μ= *
σ= *
(2)
(3)
通过公式(2)和公式(3),得到均方差后,由得到的值设置一个阈值来区分前景
和背景。
(2) 多高斯模型[1]
在多高斯分布背景模型中,每个图像点的颜色用多个高斯分布近似。设用来
描述每个点颜色分布的高斯分布共有K个,用权值最大的若干高斯分布表示背
景 。但是它计算量大,难以满足实时要求,在多数场合下,与单个高斯分布的
背景模型相比性能并没有显著提高,所以受硬件条件的限制,多高斯模型很少在
实际应用中使用,而本例在视频背景亮度短时变化不大的情况下,使用单高斯分
布背景模型即可满足任务要求。
输入一段avi格式的视频,转换成数据格式并读取,画出视频的最后一帧的原
图:
avi = aviread('video.avi');
video = {avi.cdata};
%读入视频信息
for a = 1:length(video)
imagesc(video{a});
subplot(221)
axis image off
drawnow;
end;
图2 原视频的最后一帧
通过读取图像这一步,读到视频所有的信息,并数值化,有视频监控中用摄
像头输入实时的外部的信息,并通过这一步处理,为后续的程序做准备。
2.目标分割
分割是从背景中将目标分离出来的过程,它是所有后续过程,例如形状分析、
目标识别,目标跟踪等的前提工作,只有很好地完成目标分割,后续工作才有可
能做好。目标分割主要包括以下几个步骤:
(1)背景消减
其基本思想是将当前帧图像与事先存储或者实时得到的背景图像相减,若差
分图像中象素值大干某一阈值,则判此象素点属于运动目标区域,否则,就判此
象素点属于背景区域[2]。背景消减的结果,前景点的灰度值都取值为0,背景点
灰度值取值为255。背景消减是目前运动检测中的主流方法,它是用含有运动目
标的当前图像与背景图像的差分来检测运动区域的一种技术,其基本思想是,首
先,用事先存储或实时得到的背景图像序列为每个象素进行统计建模,得到背景
模型Bk,将当前含有运动目标的图像帧fk和背景模型相减,如公式(4)所示[3]。
其次,将计算结果在一定阈值T限制下进行二值化,如公式(5)所示,判断出
当前图像中出现的偏离背景模型值较大的那些象素,就是出现的运动目标的像
素,Rx是含有目标的二值化图像。由于运动物体和背景在灰度或色彩上存在差
别,相减、阈值操作后得到的结果直接给出了目标的位置、大小、形状,从而得
到较完整的目标信息。
Dk(x,y)=| fk(x,y)- Bk(x,y)|
Rk(x,y)=
(4)
(5)
经过处理后,当Dk的值大于某一阈值的时候为背景点,其他值时为前景点,
这样就能通过一个二值图像分离出前景和背景,并提取出前景,从而达到运动目
标检测的目的。基于平均法曲噪声的背景获得 视频图像序列中,目标以运动状
态存在于视场中,对于视场内每一个像素,归属于背景的概率极大,经过对输入
图像序列的若干帧平均即可得到与实际背景图像近似的初始背景,同时也达到了
虑除噪声、消除摄像机抖动的目的。设g(x,y)是含有噪声的目标图像,n(x,y)为不
包含噪声的初始目标图像,x、y为图像上的点在时域上的坐标,则有 :
(6)
g(x,y)=f(x,y)+n(x,y)
取n幅内容相同但是含有不同噪声的图像,将它们跌加起来,然后作平均计
算,如下式(7)所示:
g(x,y)= *
(7)
由公式(7)可见,n增加则像素值的方差就减小,这说明平均的结果使噪声
造成的偏差变小。当作平均处理的噪声图像数目增加时,其统计平均值就接近初
始的没有噪声的图像。
3.运动目标检测与提取
运动目标提取的效果直接关系到算法实现,在背景图像提取完成之后,利用
图像的梯度不受亮度和量化噪声影响的特点,对背景和当前帧进行梯度差,就可
以更准确在检测到运动目标,并可部分消除阴影及噪声的影响。梯度差突出了运
动目标的轮廓, 但容易使目标内部产生空洞, 因此梯度差后还要对图像做适当的
区域填充。
先将提取的视频转换为灰度视频信息,灰度图像只含亮度信息,将彩色图像
转化成灰度图像的过程称为灰度化处理,灰度图像的描述与彩色图像一样,也能
反映整幅图像的整体和局部的色度和亮度。
图像的二值化就是将图像上的点的灰度设置成0或255,也就是把目标和背景
分成最亮和最暗两种极端,这样事个图像就不再涉及到像素的多级值,处理会变
得简单许多,而且在运动目标检测中,目的就是提取活动的人或物,这样的二值
图像已经足够。
%视频信息的数值化处理,连接成一个单列的向量
if ischar(video)
avi = aviread(video);
pixels = double(cat(4,avi(1:2:end).cdata))/255;
%clear avi
else
pixels = double(cat(4,video{1:2:end}))/255;
clear video
end
%转换成灰度值
nFrames = size(pixels,4);
for f = 1:nFrames
pixel(:,:,f) = (rgb2gray(pixels(:,:,:,f)));
subplot(222)
end
图3 第一帧的灰度图像
经过处理后,从背景中提取出运动图像,得到视频的灰度图像,这是截取
的第一帧灰度值图像。
rows=240;
cols=320;
nrames=f;
for l = 2:nrames
d(:,:,l)=(abs(pixel(:,:,l)-pixel(:,:,l-1)));
k=d(:,:,l);
bw(:,:,l) = im2bw(k, .2);%二值处理
bw1=bwlabel(bw(:,:,l));%等于0的是背景,提取大于2的是前景
imshow(bw(:,:,l))
subplot(223)
end
图4 最后一帧的值图像
灰度值经过二值处理得到的二值图像,二值图像把运动目标设置成0的最大
值,背景为255,二值图像数据量较小,容易处理,并且区分更加明显。
图4 视频最后的截图
经过以上步骤的处理后,视频中的运动目标可以很容易的提取出来。