1.帧间差分
帧间差分方法利用图像序列中相邻两帧或者三帧图像对应像素值相减,然后取差值图像进行阈值化处理提取出图像中的运动区域【1】
2.matlab代码实现
%帧间差分法
close all;
clear all;
clc;
avi=VideoReader('highway.avi'); %使用MMREADER方法读入视频流,抛弃aviread方法
VidFrames=read(avi,[1000,1050]); %read interframes from 1000 to 1050
N=1; %考虑N帧的帧间差分法
start=10; %起始帧
threshold=20; %appropriate threshold is important for the method of interframedifference
for k=1+start:N+1+start %read interframes from 11 to 15
figure(k)
imshow(VidFrames(:,:,:,k));
mov(k).cdata=rgb2gray(VidFrames(:,:,:,k)); %将彩色图像转换为灰度图像;
end
[row,col]=size(mov(1+start).cdata); %以mov(1+start).cdata的格式生成一个矩阵
alldiff=zeros(row,col,N); %生成一个三维的矩阵alldiff用于存储最终的各个帧的差分结果
for k=1+start:N+start
diff=abs(mov(k).cdata-mov(k+1).cdata); %邻帧差分
idiff=diff<threshold; %二值化,idiff中的数据位逻辑值,diff中的数值为unit8
alldiff(:,:,k)=double(idiff);
end
%观察结果
i=1;
for k=1+start:N+start
figure(i);
imshow(alldiff(:,:,k))
title(strcat(num2str(k),'帧','-',num2str(k+1),'帧')); %strcat:concatenate strings horizontally
i=i+1;
end
3.优缺点
优点:
- 帧间差分方法简单、运算量小且易于实现。
- 帧间差分方法进行运动目标检测可以较强地适应动态环境的变化,有效地去除系统误差和噪声的影响,对场景中光照的变化不敏感而且不易受阴影的影响。
缺点:
- 不能完全提取所有相关的特征像素点,也不能得到运动目标的完整轮廓,只能得到运动区域的大致轮廓;
- 检测到的区域大小受物体的运动速度制约:对快速运动的物体,需要选择较小的时间间隔,如果选择不合适,当物体在前后两帧中没有重叠时,会被检测为两个分开的物体;对于慢速运动的物体,应该选择较大的时间差,如果时间选择不适当,当物体在前后两帧中几乎完全重叠时,则检测不到物体。
- 容易在运动实体内部差生空洞现象。
4.参考文献
【1】http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=732851
【2】http://blog.csdn.net/xingor/article/details/50711478
【3】李杰. 视频序列中运动目标检测跟踪算法研究[D]. 西南交通大学, 2010.