从meanshift目标跟踪到粒子滤波

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/s110500617/article/details/51872817

本文一开始总结我对meanshift算法在图像分割、视频目标跟踪的一些粗浅认识,进一步引申到粒子滤波在目标跟踪中如何应用,由于本人学术水平尚浅,必然有很多认识有误,希望得到大家的批评指正,不胜感激。

在初学均值漂移算法的时候,有个总体印象,就是算法希望通过寻找密度最大的位置作为收敛位置,用白话讲,其实就是要找一个区域内的重心而已,这个重心为什么不是区域的所有粒子的平均呢?因为每个粒子还带个权重,这个权重我们用物理力学中的重心公式想想就明白,权重代表每个粒子对重心的贡献程度,那么,做个最极端的近似,当所有粒子的权重都是1,那么这时候重心刚刚好就是所有粒子的平均值,现在加个权重,用Pazen窗来进行加权,Pazen窗最大的特点就是概率值随着距离变化而变化,换句话说就是当一个粒子xi离我关心的x点距离远的话,这个权小些,就这样,我们把原先的平均值变成了加权平均,这就是meanshift的本质,一言概括之,meanshift就是以Pazen窗加了权后的加权平均,直到找到重心的位置不变了,就停止迭代,其实就是求重心的过程。
    在初学过程中,我一直很纳闷,一个图像中,所有像素不都是均匀分布的吗?哪来的某个位置粒子最密呢?这是大误解,我们在图像分割中应用meanshift算法,其实不是以像素的位置密度作为密度衡量的,而是以直方图来作为研究对象,将某个区域内频率最高的某个区间定义为密度最大,那么,如果我以半径为2来找一个区域,只要通过meanshift算法把这个区域中密度最大的那个灰度作为这个区域的代表,就实现了图像分割。
    关于meanshift算法在目标跟踪中的应用,一开始受到meanshift图像分割应用的干扰,没理解如何通过meanshift进行跟踪的,其实关键问题还在于这个密度怎么定义的,不再是灰度直方图中概率来衡量密度了,如果这种想法是对的,那么跟踪必然失效,因为你要跟踪的物体不见得就是整个图中灰度最大的,而且跟踪的目标更多情况下是存在很多种灰度的,用图像分割那套方法,你只能跟踪到灰度最大位置,这不是我们想要的,那么怎么跟踪目标呢?我们需要目标的特征,什么特征最直观呢?目标区域的目标灰度分布!需要再引入巴氏相似度,用于衡量跟踪区域的灰度分布和目标灰度分布直接的相似度,显然,最理想的情况就是这个让跟踪收敛的区域和目标区域的灰度分布一致,所以,在目标跟踪中是否跟踪上目标是以跟踪区域灰度直方图分布和目标区域灰度直方图的相似度来衡量的。
   将目标跟踪的基本原理搞清楚,我们就能用粒子滤波来实现目标跟踪,怎么做呢?你拿到一个视频,一开始,把想跟踪的区域框出来,目标区域就有了,那么跟踪它,你要有个特征,什么特征呢?就是目标区域的直方图分布,好,接下来,我们在视频一帧图像中广泛撒粒子,就是随机产生N个块的patch,这些小块就是粒子,一开始我们并不知道哪个粒子或者说方块是想跟踪的,怎么办呢,最直接的方法,比对,以什么准则比对呢?当然就是 巴氏相似度了, 通过N个粒子的直方图和目标直方图的巴氏相似度计算,可以得出N个不同的权重,这时候就等于给N个粒子加上了权重,我们知道,粒子滤波中的后验概率就是由蒙特卡洛采样粒子的加权dirac函数组合而成的,那么有了权重后就有了后验概率,进一步就可以进行状态估计了,这个过程中粒子权重不同,我们称这个求期望或者说求积分的过程为重要性采样。那么如何从提议函数或者说重要性函数中进行抽样呢?注意,这个过程并不是重要性采样,重要性采样是利用重要性函数采样后求积分的过程,所以重要性函数中的采样并非重要性采样,这里特别强调一下!好,在经典粒子滤波教材中都会提到,重要性函数往往直接是用状态转移概率来替代,那么在上一个时刻中的粒子通过状态转移就能得到重要性函数在下一个时刻的抽样粒子,这就实现了提议函数的粒子采样。重新采样是对加权粒子的累积概率与0到1的随机值对比,如果累积概率大于随机值就取这个粒子,作为重采样后,才从重要性函数中采样,所以采样分成两步,第一步,根据权值做重采样,第二步,根据转移概率获得转移概率密度中的采样,到这里得到的才是一次完整的采样。应该指出,当粒子权重过渡集中,导致粒子退化的时候,则需要将权重归一化为1/N。经过人为指定的步数后,或者当估计状态不再变化或变化很小的时候,我们认为,目标跟踪到了,这就是粒子滤波目标跟踪算法的整个过程。



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页