第5章 基于MATLAB的图像跟踪算法
目标从图像中提取出来,具体源代码如下:
T1=50;T2=200;%观察并找出阈值 for i=1:200
I=read_seqim(i); M=double(I); for m=1:272 for n=1:512
if (M(m,n)>=T1)&&(M(m,n)<=T2) M(m,n)=1;%设置背景灰度 else
M(m,n)=0;%设置目标灰度 end end
end%%图像的分割和阈值处理 end
所得到的阈值处理(图像分割)后的图像(如图5-3所示)如下:
图5-3 阀值处理后的图像
27
5.3 形心(距心)的求取
成像跟踪系统经过图像的预处理、图像的分割识别等一系列信息处理,最终实现对目标位置的实时精确测量,即对目标或目标的局部实施稳定跟踪。目标跟踪的方法具体有以下几种:
矩心(质心、形心)跟踪;边缘跟踪;峰值跟踪;相关跟踪;滤波跟踪。 这里我们使用矩心(质心、形心)跟踪。矩心也叫质心或重心,是物体对某轴的静力矩作用中心。如果把目标图像看成是一块质量密度不均匀的薄板,以图像上各像素点的灰度作为各点的质量密度。这样就可以借用矩心的定义式来计算目标图像的矩心。由于计算重心的过程是个统计平均过程, 它算出的跟踪点不是个别的最亮点位置, 而是图像中各个像元灰度加权平均的位置, 所以, 以重心为跟踪点, 跟踪的随机误差小, 精度高, 稳定性好。具体的计算方法如下:
??xf(x,y)X?x?0y?0N?1M?1x?0y?0N?1M?1??yf(x,y) Y?x?0y?0N?1M?1x?0y?0N?1M?1 (5-2)
??f(x,y)??f(x,y)其中f(x,y)为(x,y)处的灰度值,N和M分别为图像的列数和行数,以下为求取形心的源程序:
for i=1:200
X=0;Y=0;X1=0;Y1=0;PINJUN=0;PINJUN1=0; for m=1:272 for n=1:512
x=m*M(m,n); y=n*M(m,n); pinjun=M(m,n); X=X+x;Y=Y+y;PINJUN=PINJUN+pinjun; end X1=X1+X; Y1=Y1+Y;
PINJUN1=PINJUN1+PINJUN;
28
第5章 基于MATLAB的图像跟踪算法
end
Xmean=X1/PINJUN1;
Ymean=Y1/PINJUN1; %求取形心的计算 Xmean=(Xmean*100-mod(Xmean*100,100))/100;
Ymean=(Ymean*100-mod(Ymean*100,100))/100;%形心数值取整 end
5.4 设置跟踪波门
为了实现对视频目标的跟踪,设置波门是一个十分必要的工作。对边缘跟踪及矩心跟踪来说,都要设置一个波门。波门的尺寸略大于目标图象,波门紧紧套住目标图象。波门是随目标图象视频信号而产生的。在波门以内的信号当作感兴趣的信号予以检出而摒除波门以外的其它信号;也可以针对视场中出现的苦干个目标面同时设置几个波门,分别检出各个波门中的信号。从整个视场中检出波门内的信号的方法属于选通技术的范畴。利用选通技术可以对目标进行有选择的跟踪,同时也可以非常有效地排除背景干扰。
这里的波门设置方法为以形心位置为中心,在图像中包含目标的区域添加一个合适矩形框(即跟踪波门,这里我们取64×32 pixels),以实现对100 帧图像的实时跟踪,以下为波门设置源代码:
for m=(Xmean-16):(Xmean+16) n=Ymean-32; I(m,n)=1; end
for m=(Xmean-16):(Xmean+16) n=Ymean+32; I(m,n)=1; end
for n=(Ymean-32):(Ymean+32)
29
m=Xmean-16; I(m,n)=1; end
for n=(Ymean-32):(Ymean+32) m=Xmean+16; I(m,n)=1; end%画出跟踪波门 波门设置后的图像实现(如图5-4所示):
图5-4 波门设置后的图像
通过上图我们不难看出,我们已经找到了正确的波门,并且实现了目标的定位和跟踪,通过以上简单的方法实现了简易图像跟踪系统的设计,并且较稳定地对目标图像进行了跟踪。
30
第5章 基于MATLAB的图像跟踪算法
以下附上实现简易图像跟踪系统的完整matlab程序: I0=read_seqim(50);%任意读取一帧图像 figure(1),imshow(I0);%原图像显示 I0=double(I0);
figure(2),hist(I0,300);%原图像直方图显示 T1=50;T2=200;%观察并找出阈值 for i=1:200
I=read_seqim(i); M=double(I); for m=1:272 for n=1:512
if (M(m,n)>=T1)&&(M(m,n)<=T2) M(m,n)=1;%设置背景灰度 else
M(m,n)=0;%设置目标灰度 end end
end%%图像的分割和阈值处理
X=0;Y=0;X1=0;Y1=0;PINJUN=0;PINJUN1=0; for m=1:272 for n=1:512
x=m*M(m,n); y=n*M(m,n); pinjun=M(m,n); X=X+x;Y=Y+y;PINJUN=PINJUN+pinjun; end X1=X1+X;
31