实验八:视频中的运动目标检测实验
一、实验目的
1、掌握视频(序列)图像中运动目标检测的基本原理与方法; 2、理解帧间差运动目标检测原理及编程; 3、理解背景差运动目标检测原理及编程; 4、掌握图像形态学运算的基本原理与方法;
5、掌握MATLAB与C++语言实现运动目标检测的编程方法,提高编程动手能力。 二、实验设备:
1、PC机或笔记本电脑,Windows操作系统;
2、安装Matlab与VS软件,准备实验相关视频图像或程序文件;
3、按照如下实验内容与步骤,编写相应Matlab与VS程序,完成实验任务。 三、实验原理
运动目标检测的目的是把运动目标从背景图像中分割出来。运动目标的有效分割对于目标分类、跟踪和行为理解等后期处理非常重要。目前常用的运动目标检测算法主要有光流法、帧差法、背景相减法,其中背景减除法是目前最常用的方法。
1、帧差法
帧差法主要是利用视频序列中连续两帧间的变化来检测静态场景下的运动目标,假设fk(x,y)和
f(k+1)(x,y)分别为图像序列中的第k帧和第k+1帧中象素点(x,y)的象素值,则这两帧图像的差值图像就如公
式(1)所示:
Diffk+1=fk(x,y)-f(k+1)(x,y) (1)
式(1)中差值不为0的图像区域代表了由运动目标的运动所经过的区域(背景象素值不变),又因为相邻视频帧间时间间隔很小,目标位置变化也很小,所以运动目标的运动所经过的区域也就代表了当前帧中运动目标所在的区域。利用此原理便可以提取出目标。下图给出了帧差法的基本流程:
(1)首先利用式(1)得到第k帧和第k+1帧的差值图像Diffk+1; (2)对所得到的差值图像Diffk+1二值化(如式(2) 示)得到Qk+1;
(3)为消除微小噪声的干扰,使得到的运动目标更准确,对Qk+1进行必要的滤波和去噪处理,后处理结果为Mk+1。
ì255,if,Diffk+1(x,y)>TQk+1=í (T为阈值) (2-2)
?0,if,Diffk+1(x,y)£T
38
从结果看在简单背景下帧差法基本可检测到运动目标所在的位置,而且计算简单,复杂度低。当图像采样间隔较小时,帧差法对图像场景变化不敏感,这是帧差法的优点,但同时目标部分漏检的可能性增大了,容易使检测到的目标出现空洞。在实际应用中,由于帧差法的简易性,帧差法经常作为某些改进算法的基础。
2、背景减除法
背景减除法是将视频帧与背景模型进行比较,通过判定灰度等特征的变化,或用直方图等统计信息的变化来判断异常情况的发生和分割出运动目标。
基于背景差的方法,概念非常清晰。该方法与帧差法相比,可以检测出短时间静止的目标,如短时间静止的车辆(长时间静止的车辆可以归为背景),且不受车速快慢的限制;与光流法相比,背景差法可以通过简化算法,降低计算量,满足视频检测的实时性要求。但随着研究的不断深人,算法的复杂性也在不断提高,特别是对较复杂场景下的前景(运动目标)检测,如针对光照变化场景下的目标检测(室外的环境光、室内的灯光等),针对含有高噪声场景区域的目标检测(场景中含有树木、水面、旗帜等物体的反复运动),针对场景频繁发生改变(车辆停止、背景中物体搬动等)情况下的目标检测等问题,使得算法的复杂性大大提高。
用背景减除法进行运动目标检测的主要过程包括预处理、背景建模、前景检测和运动区域后处理等。背景建模是背景减除法的核心环节,目前主要方法有:基于背景的时间差分法、中值滤波法、W4方法、线性预测法、非参数模型法(又称内核密度估计法)、混合Gauss法、隐马尔科夫模型法(HMM)、本征法、基于均值替换的背景估计法、码本方法等。
(详细原理见上课PPT)
四、练习内容
启动电脑,打开MATLAB编程编程环境,依次完成下列所有实验: 1、AVI视频文件打开实验。
n 在Matlab中,建立M文件Lab8_Test1.m,编写如下代码,实现打开AVI视频文件,并逐帧读出来黒
出来。代码如下: function Lab8_Test1() clc;clear all;close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %说明:打开视频文件,并逐帧显示出来
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 将avi视频转成图片逐帧显示出来
mov=aviread('highwayII_raw.avi'); %读入AVI视频 NumFrame=size(mov,2); %读取视频的总帧数 %逐帧读出视频 for index=1:NumFrame frame=mov(index); Img=frame.cdata; imshow(Img); pause(0.1) %暂停0.1秒 end
39
disp('程序成功结束')
2、帧间差阈值法运动目标检测实验。
n 在Matlab中,建立M文件Lab8_Test2.m,编写如下代码,打开AVI视频文件,并采用帧间差阈值法实现运动目标检测。代码如下: function Lab8_Test2() clc;clear all;close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %说明:打开视频文件,进行帧间差运动目标检测
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 将avi视频转成图片序列
mov=aviread('highwayII_raw.avi'); %读入AVI视频 NumFrame=size(mov,2); %读取视频的总帧数 frame=mov(1); %读第一帆 Img1=frame.cdata; [H,W,dim]=size(Img1); %逐帧读出视频
for index=3:2:NumFrame %隔一帧读一次 frame=mov(index); Img2=frame.cdata; figure(1)
subplot(1,2,1),imshow(Img2),title('图像'); %帧间差
Diff=rgb2gray(Img2)-rgb2gray(Img1); %在灰度图铃上做差 Th=30; %阈值 MovObj=zeros(H,W);
k=find(abs(Diff)>=Th);%%find函数作用是找到图c中的值大于t的点坐标 MovObj(k)=255; %二值化的 MovObj=uint8(MovObj);
subplot(1,2,2),imshow(MovObj),title('运动目标检测结果'); Img1=Img2; %更新帧 pause(0.1) %暂停0.1秒 end
disp('程序成功结束')
40
3、膨胀与腐蚀(Dilation and Erosion) ? 对简单二值图像进行膨胀与腐蚀
clear all, close all BW = zeros(9,10); BW(4:6,4:7) = 1; SE = strel('square',3) BW1 = imdilate(BW,SE) BW2 = imerode (BW,SE) figure(1),
subplot(1,2,1), imshow(BW), title(' Original Image '); subplot(1,2,2), imshow(BW1), title(' Dilated Image '); figure(2),
subplot(1,2,1), imshow(BW), title(' Original Image '); subplot(1,2,2), imshow(BW2), title(' Eroded Image ');
4. 开、闭运算(Open and Close)
clear all, close all
I = imread('cameraman.tif');
bw = ~im2bw(I,graythresh(I)); %对打开的图像进行二值化处理 se = strel('disk',5); %构造结构元 bw2 = imopen(bw,se);
subplot(1,2,1), imshow(bw), title('Thresholded Image') subplot(1,2,2), imshow(bw2), title('After opening') bw3 = imclose(bw,se); figure;
41
subplot(1,2,1), imshow(bw), title('Thresholded Image') subplot(1,2,2), imshow(bw3), title('After Closing')
五、实验内容及要求
1、在MATLAB中,严格完成上述实验内容,且分析比较实验结果;
2.参照上述程序,自己编程实现“背景差运动目标检测”方法,分别用下述方法构造背景图像:
1)利用中值模型建立背景图像;
2)利用自适应模型建立背景图像;
在Matlab中实现上述二种背景建模方法,进行运动目标检测,分析比较实验结果。
3)当某次运动目标检测结果出来后,自己编写一个程序,统计一下当前图像中“运动目标的个数”; ............................................. 3.在上述运动目标检测程序的基础上,分别对检测结果(二值图像)进行下列形态学处理: 1)形态学“腐蚀”与“膨胀”处理; 2)形态学“开”操作处理;
3)形态学“闭”操作处理;
在Matlab中实现上述上述四种形态学处理,分析比较实验结果。
4.尝试在VS2010环境,利用Opencv打开视频文件,实现 “运动目标检测”功能(注:基于高斯混合背景建模的背景差运动目标检测方法,是OpenCV的标准例程,可到网上查相关资料,把此方法调通,实现运动目标检测)。
42