视频跟踪实验报告
本次实验是一种基于MATLAB的简易的从视频播放的帧图像中找出目标图像,并进行视频跟踪的实现方法。通过对图像进行阈值处理(图像分割),再对分割后的图像求取形心,以对目标图像进行定位,并最后找到各幅帧图像的目标位置的方法,从而实现对95帧视频图像的实时跟踪。
图片存于帧图片文件夹!
程序算法为Untitled6.m文件!
基于MATLAB的图像跟踪算法
2.1 95帧视频图像的读取
由于视频是由95帧图像通过连续播放从而达到视频的效果的,所以要达到视频放映的效果,应首先对95帧图像序列进行顺序读取。95帧图像存储在MATLAB的默认路径中,文件名为00000xxx.bmp。要达到读取它们的目的,需要使用循环算法。算法由一个名为read_seqim(i)的函数实现,以下是函数的源程序:
function I=read_seqim(i)
if nargin==0
i=1;min=00000001;
end
name=num2str(i);
if i<=9
min=strcat('0000000',name,'.bmp');
elseif i<=99
min=strcat('000000',name,'.bmp');
else
min=strcat('00000',name,'.bmp');
end
I=imread(min);
其中i为读取图像的序号,通过以上的函数可以很方便的实现对95帧图像中任意一帧的读取,从而为后面的处理提供方便。
2.2 图像的阈值处理(图像分割)
阈值(Threshold),也叫门限。阈值化(Thresholding),即按给定阈值进行图像的二值化处理。阈值分割法可分为以下几种:
?简单阈值分割法;
?多阈值分割法;
?最大类间方差法;
?最佳阈值法。
许多情况,图像是由具有不同灰度级的几类区域组成。如文字与纸张、地物与云层(航空照片)等,阈值分割是利用同一区域的具有某种共同灰度特性进行分割。而用阈值分割法分割图像就是选取一个适当的灰度阈值,然后将图像中的每个像素和它进行比较,将灰度值超过阈值的点和低于阈值的点分别指定一个灰度值,就可以得到分割后的二值图像,此时目标和背景已经得到了分割。阈值分割法简单,快速,特别适用于灰度和背景占据不同灰度级范围的图像。这里我们使用多阈值分割法。
多阈值分割法就是假设一幅图像包含两个以上的不同类型的区域,可以使用几个门限来分割图象。分割函数如下:
1阈值的确定
由于需要分析的95帧图像的灰度分布大致是相当的,所以我们任意选取一帧图像来求取它的阈值,这里我们选取第50帧图像,具体的源代码如下:
I0=read_seqim(40);%任意读取一帧图像
figure(1),imshow(I0);%原图像显示
I0=double(I0);
figure(2),hist(I0,300);%原图像直方图显示
所得到的图像如下:
011122
2,(,)(,),(,),(,)f f x y T g x y f T f x y T f f x y T ≤??=<≤??>?
上图为读取一帧图像的图像显示,下图为它所对应的直方图显示
2图像的阈值分割
第一图中的小球是我们所要跟踪的目标。
第二图中我们可以看出我们所要得到的目标灰度分布于灰度值在140-95的区域内;图中灰度在40-140区域内为背景的灰度表示,所以这里我们就设定两个阈值T1=150;T2=220.在两阈值中间的区域为目标区域。通过图像分割把目标从图像中提取出来,具体源代码如下:
T1=150;T2=220;%观察并找出阈值
for i=1:95
I=read_seqim(i);
M=double(I);
for m=1:180
for n=1:315
if (M(m,n)>=T1)&&(M(m,n)<=T2)
M(m,n)=1;%设置背景灰度