当前位置:首页 > 视频序列运动目标检测实验报告韩扬2011014520 - 图文
视频序列运动目标检测实验报告 信工1102 韩扬 2011014520
一、任务内容及要求:
1.根据基本原理,编程实现追踪算法,自选序列
2.序列可以是读取的视频( 如 AVI 格式 ) 各帧 ,也可以是图片集合 3.程序能输出原视频序列,目标检测结果序列 4.结果序列以矩形盒包围目标,并显示中心 5.程序包含注释说明 二、实现步骤:
当前帧图像→帧差法→差分后图像→二值化→联通分析→判断检测目标 ↑ ↑
下一这图像 阈值选取
三帧差分法将连续三帧图像求取相邻两帧图像的差值图像,对前后两个差值图像相与得到运动目标,能够较好地检测出中间帧的运动目标轮廓,其算法步骤如下:
1.取图像序列中连续的三帧图像x=mov(i-1),y=mov(i),z=mov(i+1),通过rbg2gray()函数进行灰度化处理得到xg,yg,zg。
3.再通过medfilt2()函数进行中值滤波,得到xgm,ygm,zgm。
4.分别计算相邻两帧图像的差值图像d1=ygmd-xgmd,d2=zgmd-ygmd,得到差值图像d1’,d2’。
5.选取合适阈值t,通过find()函数分别找出d1’,d2’中灰度值>=t与灰度值 mov=aviread('walk.avi'); %读取avi视频 fnum=size(mov,2);%获取图像矩阵列数(帧数) aviobj = avifile('result.avi'); %创建名字为result的avi文件 for i=2:fnum-1 x=mov(i-1).cdata;%mov包含两个部分文件:视频数据cdata和调色板colormap y=mov(i).cdata;%分别将连续三帧视频数据赋给x,y,z z=mov(i+1).cdata; xg=rgb2gray(x);%转成灰度图像 xgm=medfilt2(xg);%medfilt2(A,m,n)对A进行m*n中值滤波 yg=rgb2gray(y); ygm=medfilt2(yg); zg=rgb2gray(z); zgm=medfilt2(zg); ?=ygm-xgm; ò=zgm-ygm; xgmd=im2double(xgm);% 强制转换数据类型为双精度(图像默认是unit8或bool) ygmd=im2double(ygm);% zgmd=im2double(zgm); d1=ygmd-xgmd;%差分1 d2=zgmd-ygmd;%差分2 t=20/256;%阈值 并转换为double型 d1p=find(abs(d1)>=t);%选取d1中灰度值>=t部分的坐标 d2p=find(abs(d2)>=t); d1(d1p)=255;%二值化后灰度值变为255的部分 d2(d2p)=255; d1p=find(abs(d1) d1(d1p)=0;% 二值化后灰度值变为0的部分 d2(d2p)=0; a=d1&d2;%二值化后相与 类型为logical b=double(a);转换为double型 imshow(b);%展示图像 adata=cat(3,b,b,b);%创建三维数组所必须(灰度图像生成视频 单通道变为三通道) aviobj = addframe(aviobj,adata);%生成视频 drawnow; end 三、问题与解决、体会与收获: Q1.在实验过程中结果视频画面呈雪花状? A1.图像默认数据类型为unit8或bool,强制转换数据类型为double后参与计算。 Q2.运动目标轮廓不清晰? A2.获取连续三帧图像后进行中值滤波。 Q3.部分背景噪声和目标空洞 A3.将二值化后图像进行“与”运算并转换为double型。 收获:对视频运动目标跟踪的算法、matlab图像处理相关函数有清楚理解。 四、成果 原始 灰度 差分 结果
共分享92篇相关文档