目标跟踪之粒子滤波

今天还有时间,再说说粒子滤波。

粒子滤波这个东西听起来挺玄乎的,从百度百科上看又是什么基于蒙特卡洛方法,又是粒子集表示概率,我原以为是不是和高斯混合模型有什么联系,直到看到了yangyangcv大神写的一篇关于粒子滤波进行物体跟踪的讲解才大概了解这东西是怎么一回事。
以下就以RobHess的粒子滤波为例,讲讲粒子滤波进行目标跟踪的方法和流程。

yangyangcv大神把粒子滤波进行目标跟踪的算法流程形象的拆解为了4步:

提取目标特征-放狗-评估狗狗反馈的报告-狗狗重分配
其中提取目标特征应该是只有第一帧会做的工作,之后的每帧只做之后的三步就好(当然也不排除一些改良的粒子滤波算法会逐帧更新前景特征直方图),采用的前景对比模板都是第一帧提取得到的前景特征直方图。

①提取目标特征
所谓提取目标特征,其实就像上一篇关于meanshift里的描述一样,目的是为了将我们选定的前景目标框内的特征使其与背景区别开来。meanshift统计的是HSV空间的H分量,而这次的粒子滤波考虑全了HSV空间的三个通道,分两种情况计算前景框内任一像素点处的特征值。
1.当该点处的S分量或V分量小于所定的阈值时,特征值 = NH*NS+V
其中NH、NS、NV分别表示H、S、V分量在直方图上的分布的上限(我yangyangcv大神提供的代码里三个分量的分布均定义为0-10)
2.其他情况下,特征值 = S×NH+H
上述特征值计算公式的由来应该是和HSV空间特性有关,没有考察太过深入。
上述的工作完成后统计完成后即可得到特征值分布空间的前景概率分布。

②放狗
放狗是一种形象的比喻,对应的真实操作是将粒子以指定的位置为中心,以满足高斯分布的方式分布出去(即越靠近中心分布的点越多),代码中的实现方式是为每个粒子生成一个满足高斯分布的随机数,然后将该粒子从指定的位置处开始,做该随机数值的偏移。第一帧时将所有粒子的指定位置设置为选定框的中心,所以当完成第一帧的初始化后整个粒子的分布应该就是一个以框中心为原点的高斯分布(从第二帧开始,粒子会根据反馈的报告结果来重新分配位置,所以不满足以框中心为原点的高斯分布了,这个我们将在第四步时阐述)。

③评估狗狗反馈的报告
狗狗会反馈什么报告给我们呢,它们反馈的是它们所处的位置周围一块区域与目标区域的相似程度,也就是以每个粒子为中心,划出与选定框大小相同的框,用步骤①同样的公式提取该区域的特征直方图分布,并计算其与前景直方图的相似程度,这种相似程度是用巴氏距离描述的。
代码中所用到的巴氏距离公式:L = 1-sum(sqrt(histA[i]*histB[i])),其中histA和histB分别为粒子和目标的特征直方图分布。

④狗狗重分配
通过步骤③的相似度比较,其实我们已经得到了每个粒子处是目标的概率,以各粒子的相似度为权值,将所有粒子做加成统计并平均后即可估算处该帧的目标所处位置。
但是还有一项工作是需要做的,就是狗狗的再分配问题。为了不浪费有限的资源,我们需要以上一帧的结果为参考,为粒子重新分配位置。而重新分配的原则就是相似度高的地方多分配粒子,低的地方少分配或者不分配,比如总共50个粒子,相似度最高的位置分配10个粒子,第二高的位置分配8个...(正所谓好钢用在刀刃上)。下一帧时各粒子会从给它们分配的位置出发,以满足高斯分布的形式再次散布出去。

yangyangcv大神也提供了他自己的实现代码,需要的可以下载,
提供链接:http://www.cnblogs.com/yangyangcv/archive/2010/05/23/1742263.html

你可能感兴趣的:(图像处理基础)