文档库 最新最全的文档下载
当前位置:文档库 › 基于MeanShift的目标跟踪算法及实现

基于MeanShift的目标跟踪算法及实现

基于MeanShift的目标跟踪算法及实现
基于MeanShift的目标跟踪算法及实现

基于MeanShift的目标跟踪算法及实现

这次将介绍基于MeanShift的目标跟踪算法,首先谈谈简介,然后给出算法实现流程,最后实现了一个单目标跟踪的MeanShift算法【matlab/c两个版本】

csdn贴公式比较烦,原谅我直接截图了…

一、简介

首先扯扯无参密度估计理论,无参密度估计也叫做非参数估计,属于数理统计的一个分支,和参数密度估计共同构成了概率密度估计方法。参数密度估计方法要求特征空间服从一个已知的概率密度函数,在实际的应用中这个条件很难达到。而无参数密度估计方法对先验知识要求最少,完全依靠训练数据进行估计,并且可以用于任意形状的密度估计。所以依靠无参密度估计方法,即不事先规定概率密度函数的结构形式,在某一连续点处的密度函数值可由该点邻域中的若干样本点估计得出。常用的无参密度估计方法有:直方图法、最近邻域法和核密度估计法。

MeanShift算法正是属于核密度估计法,它不需要任何先验知识而完全依靠特征空间中样本点的计算其密度函数值。对于一组采样数据,直方图法通常把数据的值域分成若干相等的区间,数据按区间分成若干组,每组数据的个数与

总参数个数的比率就是每个单元的概率值;核密度估计法的原理相似于直方图法,只是多了一个用于平滑数据的核函数。采用核函数估计法,在采样充分的情况下,能够渐进地收敛于任意的密度函数,即可以对服从任何分布的数据进行密度估计。

然后谈谈MeanShift的基本思想及物理含义:此外,从公式1中可以看到,只要是落入Sh的采样点,无论其离中心x的远近,对最终的Mh(x)计算的贡献是一样的。然而在现实跟踪过程中,当跟踪目标出现遮挡等影响时,由于外层的像素值容易受遮挡或背景的影响,所以目标模型中心附近的像素比靠外的像素更可靠。因此,对于所有采样点,每个样本点的重要性应该是不同的,离中心点越远,其权值应该越小。故引入核函数和权重系数来提高跟踪算法的鲁棒性并增加搜索跟踪能力。

接下来,谈谈核函数:

核函数也叫窗口函数,在核估计中起到平滑的作用。常用的核函数有:Uniform,Epannechnikov,Gaussian等。本文算法只用到了Epannechnikov,它数序定义如下:

二、基于MeanShift的目标跟踪算法

基于均值漂移的目标跟踪算法通过分别计算目标区域和候选区域内像素的特征值概率得到关于目标模型和候选模型的描述,然后利用相似函数度量初始帧目标模型和当前帧的候选模版的相似性,选择使相似函数最大的候选模型并得到关于目标模型的Meanshift向量,这个向量正是目标由初始位置向正确位置移动的向量。由于均值漂移算法的快速收敛性,通过不断迭代计算Meanshift向量,算法最终将收敛到目标的真实位置,达到跟踪的目的。

下面通过图示直观的说明MeanShift跟踪算法的基本原理。如下图所示:目标跟踪开始于数据点xi0(空心圆点xi0,xi1,…,xiN表示的是中心点,上标表示的是的迭代次数,周围的黑色圆点表示不断移动中的窗口样本点,虚线圆圈代表的是密度估计窗口的大小)。箭头表示样本点相对于核函数中心点的漂移向量,平均的漂移向量会指向样本点最密集的方向,也就是梯度方向。因为Meanshift 算法是收敛的,因此在当前帧中通过反复迭代搜索特征空间中样本点最密集的区域,搜索点沿着样本点密度增加的方向“漂移”到局部密度极大点点xiN,也就是被认为的目标位置,从而达到跟踪的目的,MeanShift 跟踪过程结束。

运动目标的实现过程【具体算法】:

三、代码实现

说明:

1. RGB颜色空间刨分,采用16*16*16的直方图

2. 目标模型和候选模型的概率密度计算公式参照上文

3. opencv版本运行:按P停止,截取目标,再按P,进行单目标跟踪

4. Matlab版本,将视频改为图片序列,第一帧停止,手工标定目标,双击目标区域,进行单目标跟踪。

matlab版本:

[plain] view plaincopyfunction [] = select()

close all;

clear all;

%%%%%%%%%%%%%%%%%%根据一幅目标全可见的

图像圈定跟踪目标%%%%%%%%%%%%%%%%%%%%%%%

I=imread('result72.jpg');

figure(1);

imshow(I);

[temp,rect]=imcrop(I);

[a,b,c]=size(temp); %a:row,b:col

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %计算目标图像的权值矩阵%%%%%%%%%%%%%%%%%%%%%%%

y(1)=a/2;

y(2)=b/2;

tic_x=rect(1)+rect(3)/2;

tic_y=rect(2)+rect(4)/2;

m_wei=zeros(a,b);%权值矩阵

h=y(1)^2+y(2)^2 ;%带宽

for i=1:a

for j=1:b

dist=(i-y(1))^2+(j-y(2))^2;

m_wei(i,j)=1-dist/h; %epanechnikov profile end

end

C=1/sum(sum(m_wei));%归一化系数

%计算目标权值直方图qu

%hist1=C*wei_hist(temp,m_wei,a,b);%target model

hist1=zeros(1,4096);

for i=1:a

for j=1:b

%rgb颜色空间量化为16*16*16 bins

q_r=fix(double(temp(i,j,1))/16); %fix为趋近0取整函数

q_g=fix(double(temp(i,j,2))/16);

q_b=fix(double(temp(i,j,3))/16);

q_temp=q_r*256+q_g*16+q_b; %设置每个像素点红色、绿色、蓝色分量所占比重

hist1(q_temp+1)=

hist1(q_temp+1)+m_wei(i,j); %计算直方图统计中每个像素点占的权重

end

end

hist1=hist1*C;

rect(3)=ceil(rect(3));

rect(4)=ceil(rect(4));

%%%%%%%%%%%%%%%%%%%%%%%%%读取序列图像

myfile=dir('D:\matlab7\work\mean shift\image\*.jpg'); lengthfile=length(myfile);

for l=1:lengthfile

Im=imread(myfile(l).name);

num=0;

Y=[2,2];

%%%%%%%mean shift迭代

while((Y(1)^2+Y(2)^2>0.5)&num<20) %迭代条件

num=num+1;

temp1=imcrop(Im,rect);

%计算侯选区域直方图

%hist2=C*wei_hist(temp1,m_wei,a,b);%target candidates pu

hist2=zeros(1,4096);

for i=1:a

for j=1:b

q_r=fix(double(temp1(i,j,1))/16);

q_g=fix(double(temp1(i,j,2))/16);

q_b=fix(double(temp1(i,j,3))/16);

q_temp1(i,j)=q_r*256+q_g*16+q_b;

hist2(q_temp1(i,j)+1)=

hist2(q_temp1(i,j)+1)+m_wei(i,j);

end

end

hist2=hist2*C;

figure(2);

subplot(1,2,1);

plot(hist2);

hold on;

w=zeros(1,4096);

for i=1:4096

if(hist2(i)~=0) %不等于

w(i)=sqrt(hist1(i)/hist2(i));

else

w(i)=0;

end

end

%变量初始化

sum_w=0;

xw=[0,0];

for i=1:a;

for j=1:b

sum_w=sum_w+w(uint32(q_temp1(i,j))+1);

xw=xw+w(uint32(q_temp1(i,j))+1)*[i-y(1)-0.5,j-y(2)-0.5];

end

end

Y=xw/sum_w;

%中心点位置更新

rect(1)=rect(1)+Y(2);

rect(2)=rect(2)+Y(1);

end

%%%跟踪轨迹矩阵%%%

tic_x=[tic_x;rect(1)+rect(3)/2];

tic_y=[tic_y;rect(2)+rect(4)/2];

v1=rect(1);

v2=rect(2);

v3=rect(3);

v4=rect(4);

%%%显示跟踪结果%%% subplot(1,2,2);

imshow(uint8(Im));

title('目标跟踪结果及其运动轨迹'); hold on;

plot([v1,v1+v3],[v2,v2],[v1,v1],[v2,v2+v4],[v1,v1+v3],[v2+v4, v2+v4],[v1+v3,v1+v3],[v2,v2+v4],'LineWidth',2,'Color','r');

plot(tic_x,tic_y,'LineWidth',2,'Color','b');

end 运行结果:

opencv版本:

[cpp] view plaincopy#include "stdafx.h"

#include "cv.h"

#include "highgui.h"

#define u_char unsigned char

#define DIST 0.5

#define NUM 20

//全局变量

bool pause = false;

bool is_tracking = false;

CvRect drawing_box;

IplImage *current;

double *hist1, *hist2;

double *m_wei;

//权值矩阵

double C = 0.0;

//归一化系数

void init_target(double *hist1, double *m_wei, IplImage *current)

{

IplImage *pic_hist = 0;

int t_h, t_w, t_x, t_y;

double h, dist;

int i, j;

int q_r, q_g, q_b, q_temp;

t_h = drawing_box.height;

t_w = drawing_box.width;

t_x = drawing_box.x;

t_y = drawing_box.y;

h = pow(((double)t_w)/2,2) + pow(((double)t_h)/2,2);

//带宽

pic_hist =

cvCreateImage(cvSize(300,200),IPL_DEPTH_8U,3); //生成直方图图像

//初始化权值矩阵和目标直方图

for (i = 0;i < t_w*t_h;i++)

{

m_wei[i] = 0.0;

}

for (i=0;i<4096;i++)

{

hist1[i] = 0.0;

}

for (i = 0;i < t_h; i++)

{

for (j = 0;j < t_w; j++)

{

dist = pow(i - (double)t_h/2,2) + pow(j - (double)t_w/2,2);

m_wei[i * t_w + j] = 1 - dist / h;

//printf("%f\n",m_wei[i * t_w + j]);

C += m_wei[i * t_w + j] ;

}

}

//计算目标权值直方

for (i = t_y;i < t_y + t_h; i++)

{

for (j = t_x;j < t_x + t_w; j++)

{

//rgb颜色空间量化为16*16*16 bins

q_r = ((u_char)current->imageData[i * current->widthStep + j * 3 + 2]) / 16;

q_g = ((u_char)current->imageData[i * current->widthStep + j * 3 + 1]) / 16;

q_b = ((u_char)current->imageData[i * current->widthStep + j * 3 + 0]) / 16;

q_temp = q_r * 256 + q_g * 16 + q_b;

hist1[q_temp] = hist1[q_temp] + m_wei[(i -

t_y) * t_w + (j - t_x)] ;

}

}

//归一化直方图

for (i=0;i<4096;i++)

{

hist1[i] = hist1[i] / C;

//printf("%f\n",hist1[i]);

}

//生成目标直方图

double temp_max=0.0;

for (i = 0;i < 4096;i++) //求直方图最大值,为了归一化

{

//printf("%f\n",val_hist[i]);

if (temp_max < hist1[i])

{

temp_max = hist1[i];

}

}

//画直方图

CvPoint p1,p2;

double bin_width=(double)pic_hist->width/4096;

double bin_unith=(double)pic_hist->height/temp_max;

for (i = 0;i < 4096; i++)

{

p1.x = i * bin_width;

p1.y = pic_hist->height;

p2.x = (i + 1)*bin_width;

p2.y = pic_hist->height - hist1[i] * bin_unith;

//printf("%d,%d,%d,%d\n",p1.x,p1.y,p2.x,p2.y);

cvRectangle(pic_hist,p1,p2,cvScalar(0,255,0),-1,8,0);

}

cvSaveImage("hist1.jpg",pic_hist);

cvReleaseImage(&pic_hist);

}

void MeanShift_Tracking(IplImage *current)

{

int num = 0, i = 0, j = 0;

int t_w = 0, t_h = 0, t_x = 0, t_y = 0;

double *w = 0, *hist2 = 0;

double sum_w = 0, x1 = 0, x2 = 0,y1 = 2.0, y2 = 2.0;

int q_r, q_g, q_b;

int *q_temp;

IplImage *pic_hist = 0;

t_w = drawing_box.width;

t_h = drawing_box.height;

pic_hist =

cvCreateImage(cvSize(300,200),IPL_DEPTH_8U,3); //生成直方图图像

hist2 = (double *)malloc(sizeof(double)*4096);

w = (double *)malloc(sizeof(double)*4096);

q_temp = (int *)malloc(sizeof(int)*t_w*t_h);

while ((pow(y2,2) + pow(y1,2) > 0.5)&& (num < NUM))

{

num++;

t_x = drawing_box.x;

t_y = drawing_box.y;

memset(q_temp,0,sizeof(int)*t_w*t_h);

for (i = 0;i<4096;i++)

{

w[i] = 0.0;

hist2[i] = 0.0;

}

for (i = t_y;i < t_h + t_y;i++)

{

for (j = t_x;j < t_w + t_x;j++)

{

//rgb颜色空间量化为16*16*16 bins

q_r = ((u_char)current->imageData[i * current->widthStep + j * 3 + 2]) / 16;

q_g = ((u_char)current->imageData[i * current->widthStep + j * 3 + 1]) / 16;

q_b = ((u_char)current->imageData[i * current->widthStep + j * 3 + 0]) / 16;

q_temp[(i - t_y) *t_w + j - t_x] = q_r * 256 + q_g * 16 + q_b;

hist2[q_temp[(i - t_y) *t_w + j - t_x]] =

hist2[q_temp[(i - t_y) *t_w + j - t_x]] + m_wei[(i - t_y) * t_w + j - t_x] ;

}

}

//归一化直方图

for (i=0;i<4096;i++)

{

hist2[i] = hist2[i] / C;

//printf("%f\n",hist2[i]);

}

//生成目标直方图

double temp_max=0.0;

for (i=0;i<4096;i++) //求直方图最大值,为了归一化

{

if (temp_max < hist2[i])

{

temp_max = hist2[i];

}

}

//画直方图

CvPoint p1,p2;

double bin_width=(double)pic_hist->width/(4368);

double

bin_unith=(double)pic_hist->height/temp_max;

for (i = 0;i < 4096; i++)

{

p1.x = i * bin_width;

p1.y = pic_hist->height;

p2.x = (i + 1)*bin_width;

p2.y = pic_hist->height - hist2[i] * bin_unith;

cvRectangle(pic_hist,p1,p2,cvScalar(0,255,0),-1,8,0);

}

cvSaveImage("hist2.jpg",pic_hist);

for (i = 0;i < 4096;i++)

{

if (hist2[i] != 0)

{

w[i] = sqrt(hist1[i]/hist2[i]);

传统meanshift跟踪算法流程

传统meanshift 跟踪算法实现流程 一、 Meanshift 算法流程图 视频流 手动选定跟踪目标 提取目标灰度加权直方图特征hist1 提取候选目 标区域 提取候选目标的灰度加权直方图特征hist2 均值漂移得到均值漂移向量及新的候选区域位 置 是否满足迭代结束条件 第二帧之后图像 第一帧图像 得到当前帧目标位置 是 否 图1 meanshift 流程图 二、 各模块概述 1、 手动选定目标区域:手动框出目标区域,并把该区域提取出来作为目标模板 区域; 2、 提取目标灰度加权直方图特征hist1; 2.1构造距离权值矩阵m_wei ; 使用Epanechnikov 核函数构造距离加权直方图矩阵:设目标区域中像素

点(,)i j 到该区域中心的距离为dist ,则 _(,)1/m wei i j dist h =-,这里h 是核函数窗宽,h 为目标区域中离区域中心 最远的像素点到中心的距离:若所选目标区域为矩形区域,区域的半宽度为 x h ,半高度为y h ,则22()x y h sqrt h h =+; 2.2得到归一化系数C ; 1/C M =,其中M 是m_wei 中所有元素值之和; 2.3计算目标的加权直方图特征向量hist1; 若图像为彩色图像,则把图像的,,r g b 分量归一化到[0,15]之间(分量值与16取余,余数即为归化后的分量值),然后为不同的分量值赋予不同的权值得到每个像素点的特征值_q temp : _256*16*q t e m p r g b = ++ 对于像素点(,)i j ,设其特征值为_q temp ,则另 1(_1)1(_1)_(,)hist q temp hist q temp m wei i j +=++; 若图像是灰度图像,则直接利用每个像素的灰度值作为每个像素的特征值,然后统计得到hist1; 把一维数组hist1归一化:11*hist hist C =;归一化后的数组hist1即为目标的加权直方图特征向量; 3、 从第二帧开始的图像,通过迭代的方式找到该帧图像中目标的位置; 3.1提取候选目标区域:以上一帧图像中目标的位置或上一次迭代得到的目标位置为中心提取出目标模板区域大小的区域; 3.2提取候选目标区域的加权直方图特征向量hist2:提取方法同步骤2.3; 计算候选目标区域的特征值矩阵_1q temp : _1 (,)256*(,) 16*(,)q t e m p i j r i j g i j b i j =++; 3.3均值漂移到新的目标区域; 3.3.1计算候选目标区域相对于目标区域的均值漂移权值w : ( 1()/2()),2(2w s q r t h i s t i h i s t i h i s t =≠ 2() 0h i s t i =时,()0;w i = 3.3.2 根据每个像素点所占的均值漂移权值计算漂移矩阵xw : 11(_1(,)1)*[(1),(2)]a b i j xw xw w q temp i j i y j y ===++--∑∑ 3.3.2得到权值归一化后的均值漂移向量Y :

目标跟踪算法

clc; clear; x=[0 16 25 33 50 65 75 82 100]; y=[0 172.5 227.5 324.2 330.7 286.1 237.7 201.7 0]; plot(xx,yy); 的图为 xx = 0:.01:100; yy = spline(x,y,xx); plot(xx,yy)

Matlab画平滑曲线的两种方法(拟合或插值后再用plot即可) 分类:MATLAB2012-12-02 11:15 25540人阅读评论(4) 收藏举报自然状态下,用plot画的是折线,而不是平滑曲线。 有两种方法可以画平滑曲线,第一种是拟合的方法,第二种是用spcrv,其实原理应该都一样就是插值。下面是源程序,大家可以根据需要自行选择,更改拟合的参数。 clc,clear; a = 1:1:6; %横坐标 b = [8.0 9.0 10.0 15.0 35.0 40.0]; %纵坐标

plot(a, b, 'b'); %自然状态的画图效果 hold on; %第一种,画平滑曲线的方法 c = polyfit(a, b, 2); %进行拟合,c为2次拟合后的系数 d = polyval(c, a, 1); %拟合后,每一个横坐标对应的值即为d plot(a, d, 'r'); %拟合后的曲线 plot(a, b, '*'); %将每个点用*画出来 hold on; %第二种,画平滑曲线的方法 values = spcrv([[a(1) a a(end)];[b(1) b b(end)]],3); plot(values(1,:),values(2,:), 'g');

基于meanshift的目标跟踪算法——完整版

基于Mean Shift的目标跟踪算法研究 指导教师:

摘要:该文把Itti视觉注意力模型融入到Mean Shift跟踪方法,提出了一种基于视觉显著图的Mean Shift跟踪方法。首先利用Itti视觉注意力模型,提取多种特征,得到显著图,在此基础上建立目标模型的直方图,然后运用Mean Shift方法进行跟踪。实验证明,该方法可适用于复杂背景目标的跟踪,跟踪结果稳定。 关键词:显著图目标跟踪Mean Shift Mean Shift Tracking Based on Saliency Map Abstract:In this paper, an improved Mean Shift tracking algorithm based on saliency map is proposed. Firstly, Itti visual attention model is used to extract multiple features, then to generate a saliency map,The histogram of the target based on the saliency map, can have a better description of objectives, and then use Mean Shift algorithm to tracking. Experimental results show that improved Mean Shift algorithm is able to be applied in complex background to tracking target and tracking results are stability. 1 引言 Mean Shift方法采用核概率密度来描述目标的特征,然后利用Mean Shift搜寻目标位置。这种方法具有很高的稳定行,能够适应目标的形状、大小的连续变化,而且计算速度很快,抗干扰能力强,能够保证系统的实时性和稳定性[1]。近年来在目标跟踪领域得到了广泛应用[2-3]。但是,核函数直方图对目标特征的描述比较弱,在目标周围存在与目标颜色分布相似的物体时,跟踪算法容易跟丢目标。目前对目标特征描述的改进只限于选择单一的特征,如文献[4]通过选择跟踪区域中表示目标主要特征的Harris点建立目标模型;文献[5]将初始帧的目标模型和前一帧的模型即两者的直方图分布都考虑进来,建立混合模型;文献[6]提出了以代表图像的梯度方向信息的方向直方图为目标模型;文献[7-8]提出二阶直方图,是对颜色直方图一种改进,是以颜色直方图为基础,颜色直方图只包含了颜色分布信息,二阶直方图在包含颜色信息的前提下包含了像素的均值向量和协方差。文献[9]提出目标中心加权距离,为离目标中心近的点赋予较大的权值,离目标中心远的点赋予较小的权值。文献[4-9]都是关注于目标和目标的某一种特征。但是使用单一特征的目标模型不能适应光线及背景的变化,而且当有遮挡和相似物体靠近时,容易丢失目标;若只是考虑改进目标模型,不考虑减弱背景的干扰,得到的效果毕竟是有限的。 针对上述问题,文本结合Itti 提出的视觉注意模型[5],将自底向上的视觉注意机制引入到Mean Shift跟踪中,提出了基于视觉显著图的Mean Shift跟踪方法。此方法在显著图基础上建立目标模型,由此得到的目标模型是用多种特征来描述的,同时可以降低背景对目标的干扰。 2 基于视觉显著图的Mean Shift跟踪方法

目标跟踪算法的分类

运动目标跟踪就是在一段序列图像中的每幅图像中实时地找到所感兴趣的运动目标 (包括位置、速度及加速度等运动参数)。在运动目标跟踪问题的研究上,总体来说有两种思路: a)不依赖于先验知识,直接从图像序列中检测到运动目标,并进行目标识别,最终跟踪感兴趣的运动目标; b)依赖于目标的先验知识,首先为运动目标建模,然后在图像序列中实时找到相匹配的运动目标。 一、运动目标检测 对于不依赖先验知识的目标跟踪来讲,运动检测是实现跟踪的第一步。运动检测即为从序列图像中将变化区域从背景图像中提取出来。运动目标检测的算法依照目标与摄像机之间的关系可以分为静态背景下运动检测和动态背景下运动检测。 静态背景下运动检测就是摄像机在整个监视过程中不发生移动,只有被监视目标在摄像机视场内运动,这个过程只有目标相对于摄像机的运动;动态背景下运动检测就是摄像机在整个监视过程中发生了移动 (如平动、旋转或多自由度运动),被监视目标在摄像机视场内也发生了运动,这个过程就产生了目标与摄像机之间复杂的相对运动。 1、静态背景 背景差分法 背景差分法是利用当前图像与背景图像的差分来检测运动区域的一种技术。它一般能够提供最完全的特征数据,但对于动态场景的变化,如天气、光照、背景扰动及背景物移入移出等特别敏感,运动目标的阴影也会影响检测结果的准确性及跟踪的精确性。其基本思想就是首先获得一个背景模型,然后将当前帧与背景模型相减,如果像素差值大于某一阈值,则判断此像素属于运动目标,否则属于背景图像。背景模型的建立与更新、阴影的去除等对跟踪结果的好坏至关重要。 帧间差分法 相邻帧间差分法是通过相邻两帧图像的差值计算,获得运动物体位置和形状等信息的运动目标检测方法。其对环境的适应性较强,特别是对于光照的变化适应性强,但由于运动目标上像素的纹理、灰度等信息比较相近,不能检测出完整

TLD目标跟踪算法

TLD目标跟踪算法 一、算法的背景 TLD(Tracking-Learning-Detection)是英国萨里大学的一个捷克籍博士生Zdenek 出的一种新的单目标长时间(long term tracking)跟踪算法。该算法与传统跟踪算法的显著区别在于将传统的跟踪算法和传统的检测算法相结合来解决被跟踪目标在被跟踪过程中发生的形变、部分遮挡等问题。同时,通过一种改进的在线学习机制不断更新跟踪模块的“显著特征点”和检测模块的目标模型及相关参数,从而使得跟踪效果更加稳定、鲁棒、可靠。 对于长时间跟踪而言,一个关键的问题是:当目标重新出现在相机视野中时,系统应该能重新检测到它,并开始重新跟踪。但是,长时间跟踪过程中,被跟踪目标将不可避免的发生形状变化、光照条件变化、尺度变化、遮挡等情况。传统的跟踪算法,前端需要跟检测模块相互配合,当检测到被跟踪目标之后,就开始进入跟踪模块,而此后,检测模块就不会介入到跟踪过程中。但这种方法有一个致命的缺陷:即,当被跟踪目标存在形状变化或遮挡时,跟踪就很容易失败;因此,对于长时间跟踪,或者被跟踪目标存在形状变化情况下的跟踪,很多人采用检测的方法来代替跟踪。该方法虽然在某些情况下可以改进跟踪效果,但它需要一个离线的学习过程。即:在检测之前,需要挑选大量的被跟踪目标的样本来进行学习和训练。这也就意味着,训练样本要涵盖被跟踪目标可能发生的各种形变和各种尺度、姿态变化和光照变化的情况。换言之,利用检测的方法来达到长时间跟踪的目的,对于训练样本的选择至关重要,否则,跟踪的鲁棒性就难以保证。 考虑到单纯的跟踪或者单纯的检测算法都无法在长时间跟踪过程中达到理想的效果,所以,TLD方法就考虑将两者予以结合,并加入一种改进的在线学习机制,从而使得整体的目标跟踪更加稳定、有效。 简单来说,TLD算法由三部分组成:跟踪模块、检测模块、学习模块;如下图所示 其运行机制为:检测模块和跟踪模块互补干涉的并行进行处理。首先,跟踪模块假设相邻视频帧之间物体的运动是有限的,且被跟踪目标是可见的,以此来估计目标的运动。 如果目标在相机视野中消失,将造成跟踪失败。检测模块假设每一个视帧都是彼此独立的,并且根据以往检测和学习到的目标模型,对每一帧图片进行全图搜索以定位目标可能出现的区域。同其它目标检测方法一样,TLD中的检测模块也有可能出现错误,且错误无非是错误的负样例和错误的正样例这两种情况。而学习模块则根据跟踪模块的结果对检测模块的这两种错误进行评估,并根据评估结果生成训练样本对检测模块的目标模型进行更新,同时对跟踪模块的“关键特征点”进行更新,以此来避免以后出现类似的

目标跟踪算法的分类

目标跟踪算法的分类

主要基于两种思路: a)不依赖于先验知识,直接从图像序列中检测到运动目标,并进行目标识别,最终跟踪感兴趣的运动目标; b)依赖于目标的先验知识,首先为运动目标建模,然后在图像序列中实时找到相匹配的运动目标。 一.运动目标检测 对于不依赖先验知识的目标跟踪来讲,运动检测是实现跟踪的第一步。运动检测即为从序列图像中将变化区域从背景图像中提取出来。运动目标检测的算法依照目标与摄像机之间的关系可以分为静态背景下运动检测和动态背景下运动检测 (一)静态背景 1.背景差 2.帧差 3.GMM 4.光流 背景减算法可以对背景的光照变化、噪声干扰以及周期性运动等进行建模,在各种不同情况下它都可以准确地检测出运动目标。因此对于固定

个关键技术: a)匹配法则,如最大相关、最小误差等 b)搜索方法,如三步搜索法、交叉搜索法等。 c) 块大小的确定,如分级、自适应等。 光流法 光流估计的方法都是基于以下假设:图像灰度分布的变化完全是目标或者场景的运动引起的,也就是说,目标与场景的灰度不随时间变化。这使得光流方法抗噪声能力较差,其应用范围一般局限于目标与场景的灰度保持不变这个假设条件下。另外,大多数的光流计算方法相当复杂,如果没有特别的硬件装置,其处理速度相当慢,达不到实时处理的要求。 二.目标跟踪 运动目标的跟踪,即通过目标的有效表达,在图像序列中寻找与目标模板最相似候选目标区位置的过程。简单说,就是在序列图像中为目标定位。运动目标的有效表达除了对运动目标建模外,目标跟踪中常用到的目标特性表达主要包括视觉特征 (图像边缘、轮廓、形状、纹理、区域)、统计特征 (直方图、各种矩特征)、变换系数特

视频目标跟踪算法综述_蔡荣太

1引言 目标跟踪可分为主动跟踪和被动跟踪。视频目标跟踪属于被动跟踪。与无线电跟踪测量相比,视频目标跟踪测量具有精度高、隐蔽性好和直观性强的优点。这些优点使得视频目标跟踪测量在靶场光电测量、天文观测设备、武器控制系统、激光通信系统、交通监控、场景分析、人群分析、行人计数、步态识别、动作识别等领域得到了广泛的应用[1-2]。 根据被跟踪目标信息使用情况的不同,可将视觉跟踪算法分为基于对比度分析的目标跟踪、基于匹配的目标跟踪和基于运动检测的目标跟踪。基于对比度分析的跟踪算法主要利用目标和背景的对比度差异,实现目标的检测和跟踪。基于匹配的跟踪主要通过前后帧之间的特征匹配实现目标的定位。基于运动检测的跟踪主要根据目标运动和背景运动之间的差异实现目标的检测和跟踪。前两类方法都是对单帧图像进行处理,基于匹配的跟踪方法需要在帧与帧之间传递目标信息,对比度跟踪不需要在帧与帧之间传递目标信息。基于运动检测的跟踪需要对多帧图像进行处理。除此之外,还有一些算法不易归类到以上3类,如工程中的弹转机跟踪算法、多目标跟踪算法或其他一些综合算法。2基于对比度分析的目标跟踪算法基于对比度分析的目标跟踪算法利用目标与背景在对比度上的差异来提取、识别和跟踪目标。这类算法按照跟踪参考点的不同可以分为边缘跟踪、形心跟踪和质心跟踪等。这类算法不适合复杂背景中的目标跟踪,但在空中背景下的目标跟踪中非常有效。边缘跟踪的优点是脱靶量计算简单、响应快,在某些场合(如要求跟踪目标的左上角或右下角等)有其独到之处。缺点是跟踪点易受干扰,跟踪随机误差大。重心跟踪算法计算简便,精度较高,但容易受到目标的剧烈运动或目标被遮挡的影响。重心的计算不需要清楚的轮廓,在均匀背景下可以对整个跟踪窗口进行计算,不影响测量精度。重心跟踪特别适合背景均匀、对比度小的弱小目标跟踪等一些特殊场合。图像二值化之后,按重心公式计算出的是目标图像的形心。一般来说形心与重心略有差别[1-2]。 3基于匹配的目标跟踪算法 3.1特征匹配 特征是目标可区别与其他事物的属性,具有可区分性、可靠性、独立性和稀疏性。基于匹配的目标跟踪算法需要提取目标的特征,并在每一帧中寻找该特征。寻找的 文章编号:1002-8692(2010)12-0135-04 视频目标跟踪算法综述* 蔡荣太1,吴元昊2,王明佳2,吴庆祥1 (1.福建师范大学物理与光电信息科技学院,福建福州350108; 2.中国科学院长春光学精密机械与物理研究所,吉林长春130033) 【摘要】介绍了视频目标跟踪算法及其研究进展,包括基于对比度分析的目标跟踪算法、基于匹配的目标跟踪算法和基于运动检测的目标跟踪算法。重点分析了目标跟踪中特征匹配、贝叶斯滤波、概率图模型和核方法的主要内容及最新进展。此外,还介绍了多特征跟踪、利用上下文信息的目标跟踪和多目标跟踪算法及其进展。 【关键词】目标跟踪;特征匹配;贝叶斯滤波;概率图模型;均值漂移;粒子滤波 【中图分类号】TP391.41;TN911.73【文献标识码】A Survey of Visual Object Tracking Algorithms CAI Rong-tai1,WU Yuan-hao2,WANG Ming-jia2,WU Qing-xiang1 (1.School of Physics,Optics,Electronic Science and Technology,Fujian Normal University,Fuzhou350108,China; 2.Changchun Institute of Optics,Fine Mechanics and Physics,Chinese Academy of Science,Changchun130033,China)【Abstract】The field of visual object tracking algorithms are introduced,including visual tracking based on contrast analysis,visual tracking based on feature matching and visual tracking based on moving detection.Feature matching,Bayesian filtering,probabilistic graphical models,kernel tracking and their recent developments are analyzed.The development of multiple cues based tracking,contexts based tracking and multi-target tracking are also discussed. 【Key words】visual tracking;feature matching;Bayesian filtering;probabilistic graphical models;mean shift;particle filter ·论文·*国家“863”计划项目(2006AA703405F);福建省自然科学基金项目(2009J05141);福建省教育厅科技计划项目(JA09040)

目标跟踪算法的分类

目标跟踪算法的分类主要基于 两种思路: a)不依赖于先验知识,直接从图像序列中检测到运动目标,并进行目标识别,最终跟踪感兴趣的运动目标; b)依赖于目标的先验知识,首先为运动目标建模然后在图像序列中实时找到相匹配的运动目标。 一.运动目标检测 对于不依赖先验知识的目标跟踪来讲,运动检测是实现跟踪的第一步。运动检测即为从序列图像中将变化区域从背景图像中提取出来。运动目标检测的算法依照目标与摄像机之间的关系可以分为静态背景下运动检测和动态背景下运动检测(一)静态背景

2.帧差 3.GMM 4.光流 背景减算法可以对背景的光照变化、噪声干扰以及周期性运动等进行建模,在各种不同情况下它都可以准确地检测出运动目标。因此对于固定摄像头的情形,目前大多数的跟踪算法中都采用背景减算法来进行目标检测。背景减算法的局限性在于它需要一个静态的固定摄像头。 (二)运动场通常情况下,摄像机的运动形式可以分为两种:a)摄像机的支架固定,但摄像机可以偏转、俯仰以及缩放;b)将摄像机装在某个移动的载体上。由于以上两种情况下的背景及前景图像都在做全局运动,要准确检测运动目标的首要任务是进行图像的全局运动估计与补偿。 考虑到图像帧上各点的全局运动矢量虽不尽相同(摄像机做平移运动除外),但它们均是在同一摄像机模型下的运动,因而应遵循相同的运动模型,可以用同一模型参数来表示。 全局运动的估计问题就被归结为全局运动模型参数的估计问题,通常使用块匹配法或光流估计法

来进行运动参数的估计。 块匹配 基于块的运动估算和补偿可算是最通用的算法。可以将图像分割成不同的图像块,假定同一图像小块上的运动矢量是相同的,通过像素域搜索得到最佳的运动矢量估算。块匹配法主要有如下三个关键技术: a)匹配法则,如最大相关、最小误差等 b)搜索方法,如三步搜索法、交叉搜索法等。 c)块大小的确定,如分级、自适应等。 光流法 光流估计的方法都是基于以下假设:图像灰度分布的变化完全是目标或者场景的运动引起的,也就是说,目标与场景的灰度不随时间变化。这使得光流方法抗噪声能力较差,其应用范围一般局限于目标与场景的灰度保持不变这个假设条件下。另外,大多数的光流计算方法相当复杂,如果没有特别的硬件装置,其处理速度相当慢,达不到实时处理的要求。 二.目标跟踪 运动目标的跟踪,即通过目标的有效表达,在图像序列中寻找与目标模板最相似候选目标区位置

目标跟踪的研究背景意义方法及现状

目标跟踪的研究背景意义方法及现状

目录 ? 1.课题背景与研究意义? 2.国内外研究现状 ? 3.存在的问题 ? 4.总结,发展与展望 ? 5.参考文献

1课题背景与研究意义 ?运动目标的跟踪就是在视频图像的每一幅图像中确定出我们感兴趣的运动目标的位置,并把不同帧中同一目标对应起来。 ?智能视频监控(IVS: Intelligent Video Surveillance)是计算机视觉领域近几年来发展较快,研究较多的一个应用方向。它能够利用计算机视觉技术对采集到的视频信号进行处理、分析和理解,并以此为基础对视频监控系统进行控制,从而使视频监控系统具备更好的智能性和鲁棒性。智能视频监控系统主要涉及到图像处理、计算机视觉、模式识别、人工智能等方面的科学知识,它的用途非常广泛,在民用和军事领域中都有着极大的应用前景。

2.国内外研究现状 视频目标跟踪算法 基于对比度分析基于匹配核方法运动检测其它方法 特征匹配贝叶斯 跟踪 Mean shift方法 光流法

基于对比度分析的方法 ?算法思想:基于对比度分析的目标跟踪算法利用目标与背景在对比度上的差异来提取、识别和跟踪目标。 ?分类:边缘跟踪,型心跟踪,质心跟踪。 ?优缺点:不适合复杂背景中的目标跟踪,但在空中背景下的目标跟踪中非常有效。

基于特征匹配的目标跟踪算法 ?算法思想:基于匹配的目标跟踪算法需要提取目标的特征,并在每一帧中寻找该特征。寻找的过程就是特征匹配过 程。 ?目标跟踪中用到的特征主要有几何形状、子空间特征、外形轮廓和特征点等。其中,特征点是匹配算法中常用的特征。特征点的提取算法很多,如Kanade Lucas Tomasi (KLT)算法、Harris 算法、SIFT 算法以及SURF 算法等。?优缺点:特征点一般是稀疏的,携带的信息较少,可以通过集成前几帧的信息进行补偿。目标在运动过程中,其特征(如姿态、几何形状、灰度或颜色分布等)也随之变化。 目标特征的变化具有随机性,这种随机变化可以采用统计数学的方法来描述。直方图是图像处理中天然的统计量,因此彩色和边缘方向直方图在跟踪算法中被广泛采用。

MeanShift-图像分割方法

摘要 在图像处理和计算机视觉里,图像分割是一个十分基础而且很重要的部分,决定了最终分析结果的好坏。图像分割问题的典型定义就是如何在图像处理过程中将图像中的一致性区域和感兴趣对象提取出来。 MeanShift 图像分割方法是一种统计迭代的核密度估计方法。MeanShift算法以其简单有效而被广泛应用,但该方法在多特征组合方面和数据量较大的图像处理上仍存在不足之处,本文针对这些问题对该算法的结构进行了优化。本文利用图像上下文信息对图像进行了区域合并以此来对输入数据进行了压缩;并实现特征空间中所有特征量的优化组合。 最后,总结了本文的研究成果。下一步需要深入的研究工作有:(1)考虑分割的多尺度性,实现基于Mean Shift算法的多尺度遥感图像分割;(2)考虑利用Gabor滤波器来提取纹理特征,或将更多的特征如形状等特征用于MeanShift遥感图像分割中。 关键词: Mean Shift, 图像分割, 遥感图像, 带宽

ABSTRACT mage segmentation is very essential and critical to image processing and computer vision, which is one of the most difficult tasks in image processing, and determines the quality of the final result of analysis. In image segmentation problem, the typical goal is to extract continuous regions and interest objects in the case of image processing. The Mean Shift algorithm for segmentation is a statistical iterative algorithm based on kernel density estimation. Mean Shift algorithm has been widely applied for its simplicity and efficiency. But the algorithm has some deficiencies in feature combination and image processing for large data. According to the deficiencies of the Mean Shift algorithm, this paper optimizes the structure of the algorithm for segmentation. Firstly, this paper introduces a method of data compressing by merging the nearest points with similar properties into consistency regions. Secondly, We optimize the combination of features. At last, after concluding all research work in this paper, further work need to be in-depth studied: (1) Consider multi-scale factors of remote sensing, and realize multi-scale remote sensing image segmentation based on Mean Shift algorithm. (2) Consider extracting textures features by using Gabor filter, or use more features such as shape features to segment remote sensing images based on Mean Shift algorithm. KEY WORDS: Mean Shift, image segmentation, remote sensing images, bandwidth,

目标定位跟踪算法及仿真程序(修改后)

目标定位跟踪算法及仿真程序 质心算法是最简单的定位算法,如图2-1所示,四个小圆为观测站,实线三角形是目标真实的位置,假设四个圆形观测站都探测到目标的存在,则根据质心定位算法,目标的位置(x,y )可以表示为:4 4 321x x x x x +++= , 4 4 321y y y y y +++= ,这里观测站得位置为),(i i y x ,同理,当观测站数目为N 时,这时候的质心定位算法可以表示为: ???? ? ??? ????=??????∑ ∑ ==N i i N i i y N x N y x 1 1 11 图1 质心定位 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 质心定位算法Matlab 程序 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function main % 定位初始化 Length=100; % 场地空间,单位:米 Width=100; % 场地空间,单位:米 d=50; % 目标离观测站50米以内都能探测到,反之则不能 Node_number=6; % 观测站的个数 for i=1:Node_number % 观测站的位置初始化,这里位置是随机给定的 Node(i).x=Width*rand; Node(i).y=Length*rand; end % 目标的真实位置,这里也随机给定 Target.x=Width*rand; Target.y=Length*rand; % 观测站探测目标 X=[]; for i=1:Node_number

MeanShift算法

核函数也称“窗口函数”。一维空间用到的核函数有高斯(Gaussian)、余弦弧(Cosinus arch)、双指数(Double Exponential)、均匀(Uniform)、三角(Trangle)、依潘涅契科夫(Epanechikov)、双依潘涅契科夫(DoubleEpanechnikov)、及双权(Biweight)函数。图2.1给出了最常用的几个核函数

给定一组一维空间的n个数据点集合令该数据集合 的概率密度函数假设为f (x),核函数取值为,那么在数据点x处的密度估计可以按下式计算: 上式就是核密度估计的定义。其中,x为核函数要处理的数据的中心点,即数据集合相对于点x几何图形对称。核密度估计的含义可以理解为:核估计器在被估计点为中心的窗口内计算数据点加权的局部平均。或者:将在每个采样点为中心的局部函数的平均效果作为该采样点概率密度函数的估计值。

MeanShift实现: 1.选择窗的大小和初始位置. 2.计算此时窗口内的Mass Center. 3.调整窗口的中心到Mass Center. 4.重复2和3,直到窗口中心"会聚",即每次窗口移动的距离小于一定的阈值,或者迭代次数达到设定值。 meanshift算法思想其实很简单:利用概率密度的梯度爬升来寻找局部最优。它要做的就是输入一个在图像的范围,然后一直迭代(朝着重心迭代)直到满足你的要求为止。但是他是怎么用于做图像跟踪的呢?这是我自从学习meanshift以来,一直的困惑。而且网上也没有合理的解释。经过这几天的思考,和对反向投影的理解使得我对它的原理有了大致的认识。 在opencv中,进行meanshift其实很简单,输入一张图像(imgProb),再输入一个开始迭代的方框(windowIn)和一个迭代条件(criteria),输出的是迭代完成的位置(comp )。 这是函数原型: int cvMeanShift( const void* imgProb, CvRect windowIn,CvTermCriteria criteria, CvConnectedComp* comp ) 但是当它用于跟踪时,这张输入的图像就必须是反向投影图了。 为什么必须是反向投影图呢?首先我们要理解什么是反向投影图。 简单理解它其实实际上是一张概率密度图。经过反向投影时的输入是一个目标图像的直方图(也可以认为是目标图像),还一个输入是当前图像就是你要跟踪的全图,输出大小与全图一样大,它上像素点表征着一种概率,就是全图上这个点是目标图像一部分的概率。如果这个点越亮,就说明这个点属于物体的概率越大。现在我们明白了这原来是一张概率图了。当用meanshift跟踪时,输入的原来是这样一幅图像,那也不难怪它可以进行跟踪了。 半自动跟踪思路:输入视频,用画笔圈出要跟踪的目标,然后对物体跟踪。用过opencv的都知道,这其实是camshiftdemo的工作过程。 第一步:选中物体,记录你输入的方框和物体。 第二步:求出视频中有关物体的反向投影图。

多目标跟踪算法

多目标跟踪算法 先来回顾下卡尔曼滤波器: 假定k k x |表示当前k 时刻目标的状态,k 1k x |+表示下一个时刻目标的状态,k z 则表示k 时刻的实际观测。一般地模型都假定为线性的: 这里的1k x +为k+1时刻目标的状态,k x 为k 时刻的状态,为状态转移矩阵,而是服从均值为0方差为的正态分布,表示由噪声等引起的干扰。卡尔曼滤波采取初步估 计: 这里的估计只是初步的估计,状态估计与实际状态的误差矩阵等于状态1k x +的的方差,即: 更新(修正): 这里已知了实际观察,同样是假定观测与状态的似然关系是线性的,即满足: 服从一个均值为0方差为 的正态分布。 卡尔曼滤波器给出了经过更新后得到的比较合理的k+1时刻的估计为: 相应地得到了更新后方差的估计: 这里: 其实这些都是通过最小二乘法推出来的,即使得误差: 最小,而初步估计也是通过最小二乘法获得,即使得: 最小。有了上述估计方程后,便可以获得一个估计流程:

下面再介绍下贝叶斯公式 先看一个定义 马氏链: 设{} ,,,k j i E =为有限集或可列集,称()0n n X ≥为定义在概率空间()P F,,Ω上,取值于空间E 的马氏链,如果满足下面的马氏性:对一切n 10i i i ,,, 有 [][]1n 1n n n 1n 1n 00n n i X i X P i X i X i X P ----======|,,| 若左边的条件概率有定义,则称[]i X j X P 1n n ==-|为在n-1时刻状态为i,在n 时刻在j 的转移概率函数,若它与n 无关,则记为ij p ,并称为时齐的或齐次的。显然这里的马氏性接近于独立性,在一定程度上可以称为无记忆性或无后效性。 下面我们来推导贝叶斯公式: 容易由条件概率公式定义知 而 ()()()()()()( ) ()() ()( ) ()() ( )() ()()() 1 k 1 k 1k k k 1 k k 1k k k 1k k 1k k k 1k k k k k 1k 1k 1k k k 1k k k k k 1k 1k 1k k k 1k 1k 1k k k 1k 1k 1k 1k 1k z x f dx x f x z f x f x z f z f dx x f x z f x z f z f x f x z f x z f dx z x f x z f z x f x z f x f +++++++++++++++++++++++== ? == ?? ?||||||||||||||||||||||||| 就得到了更新后的公式如下: 这里记 于是就可以得到贝叶斯滤波器跟踪流程如下: 实际上可以证明,卡尔曼滤波器是贝叶斯滤波器的一种特殊形式,由于假定噪声服从正态分布,同样地观测与状态估计的误差也是服从正态分布,那么不难得:

Matlab实例之MeanShift的跟踪算法程序

MeanShiftCluster.m %testDistCluters clear clc profile on nPtsPerClust = 250; nClust = 3; totalNumPts = nPtsPerClust*nClust; m(:,1) = [1 1]'; m(:,2) = [-1 -1]'; m(:,3) = [1 -1]'; var = .6; bandwidth = .75; clustMed = []; %clustCent; x = var*randn(2,nPtsPerClust*nClust); %*** build the point set for i = 1:nClust x(:,1+(i-1)*nPtsPerClust:(i)*nPtsPerClust) = x(:,1+(i- 1)*nPtsPerClust:(i)*nPtsPerClust) + repmat(m(:,i),1,nPtsPerClust); end tic [clustCent,point2cluster,clustMembsCell] = MeanShiftCluster(x,bandwidth); toc

numClust = length(clustMembsCell); figure(10),clf,hold on cVec = 'bgrcmykbgrcmykbgrcmykbgrcmyk';%, cVec = [cVec cVec]; for k = 1:min(numClust,length(cVec)) myMembers = clustMembsCell{k}; myClustCen = clustCent(:,k); plot(x(1,myMembers),x(2,myMembers),[cVec(k) '.']) plot(myClustCen(1),myClustCen(2),'o','MarkerEdgeColor','k','MarkerFaceColor',cVec(k ), 'MarkerSize',10) end title(['no shifting, numClust:' int2str(numClust)]) testMeanShift.m %testDistCluters clear clc profile on nPtsPerClust = 250; nClust = 3; totalNumPts = nPtsPerClust*nClust; m(:,1) = [1 1]'; m(:,2) = [-1 -1]'; m(:,3) = [1 -1]'; var = .6; bandwidth = .75;

meanshift公式

meanshift 公式 第一步:rect (含有四个参数:矩形框的左上点坐标,矩形框的宽和高) 矩形框的中心坐标: _(1)(3)/2 _(2)(4)/2 tic x rect rect tic y rect rect =+=+ 第二步:矩形框的高为a ,宽为b (a 为行数,b 为列数) (1)/2 (2)/2 y a y b == 带宽 (1)^2(2)^2(/2)^2(/2)^2h y y a b =+=+ 计算矩形区域每一点的权重矩阵(模板帧) 111212122 21211...111...1_............11...1b b a a ab a a a a a a m wei a a a ------= --- m_wei 是一个axb 的矩阵其中 11(1/2)^2(1/2)^2 11(/2)^2(/2)^2 a b a a b -+--=- + 即 (/2)^2(/2)^2 11(/2)^2(/2)^2 ij i a j b a a b -+--=- + ((1,),(1,))i a j b ∈∈ 归一化系数C 为矩阵m_wei 中每个元素相加的和的倒数 11 1 (/2)^2(/2)^21(/2)^2(/2)^2a b i j C i a j b a b === -+--+∑∑ 第三步:rgb 颜色空间量化为16x16x16bins 矩形框区域内每个像素点中的RGB 分量为q_R,q_B,q_G ____*256*16161616 q R q G q B q temp = ++ 求出的q_temp 用来作为的是hist1矩阵的列向量下标形式为 1(_1)1q temp hist + 第四步:计算权重矩阵 111213141516140961......hist h h h h h h h =

基于MeanShift的目标跟踪算法及实现

基于MeanShift的目标跟踪算法及实现 这次将介绍基于MeanShift的目标跟踪算法,首先谈谈简介,然后给出算法实现流程,最后实现了一个单目标跟踪的MeanShift算法【matlab/c两个版本】 csdn贴公式比较烦,原谅我直接截图了… 一、简介 首先扯扯无参密度估计理论,无参密度估计也叫做非参数估计,属于数理统计的一个分支,和参数密度估计共同构成了概率密度估计方法。参数密度估计方法要求特征空间服从一个已知的概率密度函数,在实际的应用中这个条件很难达到。而无参数密度估计方法对先验知识要求最少,完全依靠训练数据进行估计,并且可以用于任意形状的密度估计。所以依靠无参密度估计方法,即不事先规定概率密度函数的结构形式,在某一连续点处的密度函数值可由该点邻域中的若干样本点估计得出。常用的无参密度估计方法有:直方图法、最近邻域法和核密度估计法。 MeanShift算法正是属于核密度估计法,它不需要任何先验知识而完全依靠特征空间中样本点的计算其密度函数值。对于一组采样数据,直方图法通常把数据的值域分成若干相等的区间,数据按区间分成若干组,每组数据的个数与

总参数个数的比率就是每个单元的概率值;核密度估计法的原理相似于直方图法,只是多了一个用于平滑数据的核函数。采用核函数估计法,在采样充分的情况下,能够渐进地收敛于任意的密度函数,即可以对服从任何分布的数据进行密度估计。 然后谈谈MeanShift的基本思想及物理含义:此外,从公式1中可以看到,只要是落入Sh的采样点,无论其离中心x的远近,对最终的Mh(x)计算的贡献是一样的。然而在现实跟踪过程中,当跟踪目标出现遮挡等影响时,由于外层的像素值容易受遮挡或背景的影响,所以目标模型中心附近的像素比靠外的像素更可靠。因此,对于所有采样点,每个样本点的重要性应该是不同的,离中心点越远,其权值应该越小。故引入核函数和权重系数来提高跟踪算法的鲁棒性并增加搜索跟踪能力。 接下来,谈谈核函数: 核函数也叫窗口函数,在核估计中起到平滑的作用。常用的核函数有:Uniform,Epannechnikov,Gaussian等。本文算法只用到了Epannechnikov,它数序定义如下: 二、基于MeanShift的目标跟踪算法

相关文档