- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验2 运动目标检测和跟踪实验
自己拍摄或下载一段视频,编程序实现:
(1)分别采用帧间差分、累积差分和背景减法进行运动目标检测,比较它们的效果并讨论其应用特点;
(2)采用数学形态学算子对上述结果进行后续处理,比较不同形态学算子和结构算子(尺寸、形状)对结果的影响。
实验内容:
录取一段视频,转化为avi格式并截取部分帧如下图所示:
图片1 部分帧
帧间差分:
实验程序:
mov=mmreader(瓶盖.avi); %用mmreader读入视频文件
for i=1:mov.numberofframes %获得总帧数,并依次读取
b=read(mov,i);
imwrite(b,strcat(n,int2str(i),.bmp),bmp); %把第i帧的图片写为ni.bmp
end
%%帧间差分-------------------------------------------
gm4=imread(n4.bmp);
gm24=imread(n30.bmp);
gm4=rgb2gray(gm4);
gm24=rgb2gray(gm24);
N=1;
[hang,lie]=size(gm4);
alldiff=zeros(hang,lie,N);
diff=abs(gm4-gm24);
idiff=diff45;
alldiff(:,:,1)=uint8(idiff);
imwrite(alldiff(:,:,1),pic.bmp)
%%形态学算子处理---------------------------------------
I=imread(pic.bmp);
figure(1);
subplot(221);imshow(gm4);title(第4帧图);
subplot(222);imshow(gm24);title(第24帧图);
subplot(223);imshow(alldiff(:,:,1));title(第4,30帧差分);
se=strel(square,2);
I1=imerode(I,se);
figure(2);
subplot(221);imshow(I1);title(腐蚀处理后的效果);
I2=imdilate(I,se);
subplot(222);imshow(I2);title(膨胀处理后的效果);
I3=imopen(I,se);
subplot(223);imshow(I3);title(开运算处理后的效果);
I4=imclose(I,se);
subplot(224);imshow(I4);title(闭运算处理后的效果);
实验结果
图2 第4帧与第24帧差分
图3 对差分图像的处理
实验结果分析
帧间差分法是一种通过对视频图像序列中相邻两帧作差分运算来获得运动目标轮廓的方法,它可以很好地适用于存在多个运动目标和摄像机移动的情况。两帧相减,得到两帧图像亮度差的绝对值,判断它是否大于阈值来分析视频或图像序列的运动特性,确定图像序列中有无物体运动。图像序列逐帧的差分,相当于对图像序列进行了时域下的高通滤波。由图2可以明显看出有物体进入了视频区域。但是帧间差分依赖选择的帧间时间间隔,如果选择不合适,当物体在前后两帧中几乎完全重叠时,则检测不到物体。
腐蚀运算是能够消融物体的边界。对于比较小的结构元素,腐蚀后则在物体中完全消失,这一点可以起到很好的降噪作用。膨胀运算是能使物体的边界扩大。常用于将图像中原本断裂开的同一物体桥接起来,因为对图像二值化后很容易使得一个联通的物体断裂成为两个部分。开运算是先腐蚀后膨胀,开运算使图像的轮廓变得光滑,断开狭窄的连接和消除细毛刺。闭运算是先膨胀后腐蚀,闭运算同样使轮廓变得光滑,但通常能够弥合狭窄的间断,填充小的空洞。由图3可以看出腐蚀和开运算后突出了许多细节,而且小空洞增多;膨胀和闭运算后小空洞减少,淡化了细节内容。
背景差分
实验程序
filename = 瓶盖.avi;
mov=aviread(filename);
info=mmreader(filename);
l = 8;
%前8帧作为背景
B=zeros();
for i=1:l
I=rgb2gray(imread(strcat(n,int2str(i),.bmp)));
[m,n]=size(I);
I=double(I);
B=B+I;
end
B=B/l;
B=uint8(B);
gm=imread(n30.bmp);
gm=rgb2gray(gm);
N=1;
[hang,lie]=size(gm);
alldiff=zeros(hang,lie,N);
diff=abs(
文档评论(0)