第一个问题无参数密度估计.docx
《第一个问题无参数密度估计.docx》由会员分享,可在线阅读,更多相关《第一个问题无参数密度估计.docx(11页珍藏版)》请在冰豆网上搜索。
![第一个问题无参数密度估计.docx](https://file1.bdocx.com/fileroot1/2023-1/2/fe6c98e0-96a0-4a87-b0fb-0b72f65b6cf8/fe6c98e0-96a0-4a87-b0fb-0b72f65b6cf81.gif)
第一个问题无参数密度估计
第一个问题:
无参数密度估计
给定任意一组观测数据或数据采样值,估计出样本的分布。
无参数密度估计,它对数据分布规律没有附加任何假设,而是直接从数据样本本身出发研究数据分布特征,对先验知识要求最少,完全依靠训练数据进行估计,而且能处理任意的概率分布。
例如:
直方图法,最近邻域法,核密度估计方法。
有参数密度估计:
高斯统计模型。
更形象的说明:
已经有N个点,它们的坐标分布如下面所示,如何求出这个区域中,哪个位置的样本分布密度最大,换句话说,如果有第N+1个点,它最大的可能出现在哪个位置。
下面我们就用MeanShift的原理来解决这类的问题。
第二个问题:
核函数的密度估计
给定
维空间
中的样本集合
,则点
关于核函数
和带宽矩阵
的核函数密度估计表示为:
其中
其中
表示
带宽矩阵。
我们用比例单位矩阵
来表示
,将上面的核密度方程写成下面的典型的表达式:
由于
,可将密度估计写成关于核函数的轮廓函数形式:
由上面的式子可以看出,核函数是一种权值函数,其作用是将每个样本点按到中心
点距离的远近进行加权,距离中心点近的样本点概率密度估计影响大,赋予大的权值,反之,赋予小的权值。
第三个问题:
MeanShift向量
们在第二个问题中,已经由核函数来估计出来了一个样本集合的概率密度,现在我们要根据这个概率密度方程,来分析数据集合中密度最大数据的分布位置,我们可以对密度函数求导,分析梯度变化。
令上面的导数
,则可以得到
也就是说上面的点
就是概率密度最大的点。
第二个中括号内的内容就是MeanShift向量,表示为
:
为了更直观的说明上面公式的意义,我们把核函数
,这样上面的式子就可以写为:
中间的实心黑点表示x点,也是核函数的中心。
周围的空心白点是样本点。
箭头表示样本点相对于核函数中心点的偏移向量,平均的偏移量会指向样本点最密的方向,也就是梯度方向。
因此,MeanShift向量应该转移到样本点相对点变化最多的地方,其方向也就是密度梯度的方向。
但是上面中所有样本点
对
的贡献是一样的。
一般而言,离
越近的采样点对估计
周围的统计特性越重要,因此引入核函数的概念,式中
就是对每个采样点的权值。
4.1直方图
灰度直方图
直方图反映了图像中每一种颜色出现的次数。
那么彩色直方图的话就是每一种(R,G,B)这样的组合出现的次数。
灰度图像直方图横坐标0-255
而彩色直方图,共有256*256*256种色彩,就是直方图的横坐标0-16777215
我们通过降维来简化彩色颜色直方图
我们把R,G,B三个通道0-255区间内的值都分为16个区间,即将0-255转换为0-15
比如(35,122,200)按上面将转换为(2,7,12),这样整个颜色空间就可以用16*16*16种组合来表示。
将三维向量映射为一维的
(R,G,B)==256*R+16*G+B
4.2目标模型
设
是目标模板区域的像素位置,且目标区域的中心为
,定义函数
为像素
处的颜色索引函数,
为
处像素点有相应直方图中颜色索引值。
则目标模型中第
个特征值估计的概率密度为:
其中,为目标特征值。
为核函数的轮廓函数,是一种加权函数,其作用是给目标区域中的像素点设置权值,对靠近目标模板中心像素赋予较大的权值,而对于远离目标模板中心的像素赋予较小的权值。
目标区域中心的权值最大,区域边缘的权值小,对于远离目标模板中心的像素容易受到边缘噪声,干扰物的影响,加权后进行密度估计时增加了它们的鲁棒性,提高了跟踪的抗干扰能力。
由于
,即所有特征值的概率和为1。
因为可以推导出:
颜色索引函数的值为:
4.3候选目标模型的表示
同理,设
(n为候选区域中像素点的个数)是候选目标区域的像素位置,在当前帧以y为中心,候选模型的特征值为
的颜色概率估计密度为:
其中归一化常数为:
4.4相似性度量
选用Bhattacharrya系数相似性函数来表示目标模型和目标候选模型的相似程度。
用Bhattacharrya系数
表示
和
的相似程度如下式:
和
越相似,
的值越大,在理想情况下
和
的概率分布是完全相同的,
值为1,否则
的值介于0~1之间
使用上式,两个模型的距离就可以表示为:
4.5目标定位
当有了目标和候选目标的模型以及度量它们似度的准则后,目标跟踪的任务就是在当前帧中找到目标的新位置。
我们可以通过最小化
的距离值来获得目标当前帧的最可能的位置
。
在当前帧对寻找目标的新位置是根据前一帧目标位置的估计
开始的,并在
周围邻域内寻找。
于是,必须先计算出在当前帧中位于处的候选目标的颜色概率
,对
在
处进行泰勒展开,可以得到下面的式子:
其中,
我们只分析后面的第二项,
可以看出第二项就是在当前帧中利用核函数和图像像素加权值计算得到的概率密度估计。
根据MeanShift向量,我们就可以得到候选区域中心
移向真实目标区域
的向量
4.6跟踪目标窗口自适应大小
采用
的带宽来计算三次候选目标的颜色直方图,然后按下面的公式分别计算相似性:
最其中
最小的带宽作为目标窗口的大小
%第一帧用鼠标选择要跟踪的物体
clearall;
rgb=imread('0300.jpg');
figure
(1),imshow(rgb);
[temp,rect]=imcrop(rgb);%temp为裁剪的图像块,rect为裁剪区域左上角顶点的坐标及长宽【x1,y1,列数,行数】;
[a,b,c]=size(temp);
%目标中心坐标
y
(1)=a/2;
y
(2)=b/2;
m_wei=zeros(a,b);%权值矩阵
h=y
(1)^2+y
(2)^2;%带宽,用来限定要考虑的候选目标的像素个数
%计算权值矩阵
fori=1:
a
forj=1:
b
dist=(i-y
(1))^2+(j-y
(2))^2;%Epanechnikov核函数
m_wei(i,j)=1-dist/h;%EpanechnikovprofileEpanechnikov核函数对应的剖面函数
end
end
C=1/sum(sum(m_wei));%归一化系数
%计算目标权值直方图qu
%hist1=C*wei_hist(temp,m_wei,a,b);%targetmodel
hist1=zeros(1,4096);%4096=16^3
fori=1:
a
forj=1:
b
%rgb颜色空间量化为16*16*16bins
q_r=fix(double(temp(i,j,1))/16);
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));
jishu=1;
%%%%%%%%%%%%%%%%%%%%%%%%%读取序列图像
fori=0300:
0370;
Im=imread(['0',int2str(i),'.jpg']);
jishu=jishu+1;
%Im=medfilt2(Im);
num=0;
Y=[2,2];
tic
%%%%%%%meanshift迭代
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);%targetcandidatespu
%
hist2=zeros(1,4096);
fori=1:
a
forj=1:
b
q_r=fix(double(temp1(i,j,1))/16);%向最靠近0取整
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;
%bdist1=bhattacharyya(hist1,hist2)
w=weights(hist1,hist2);
%w=sqrt(hist1./hist2);
%变量初始化
sum_w=0;
xw=[0,0];
fori=1:
a;
forj=1:
b
bitwei(i,j)=w(uint32(q_temp1(i,j))+1);
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
v1=rect
(1);
v2=rect
(2);
v3=rect(3);
v4=rect(4);
%%显示跟踪结果
figure
(2)
clf
imshow(uint8(Im))
holdon;
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',1,'Color','w')
t(jishu)=toc;%统计程序运行时间
end