原文地址:http://www.360doc.com/content/13/1025/12/12105052_324083534.shtml
当翟师兄讲完meanshift算法后,几位资深的组内成员讨论的很激烈,由于自己刚加入该组没多久,接触计算机视觉方法的时间也就一个多月吧,所以就没参与讨论,但是我从他们的讨论中收获挺大的,我感觉我似乎是理解了meanshift算法,所以写点理解见解呵,希望大家别笑话我呵。
矩形窗口中的红色点代表指特征数据点,矩形中的圆圈代表选取窗口。
meanshift算法的目的是找到含有最多特征的窗口区域,即使圆心与概率密度函数的局部极值点重合,亦即使圆心与特征数据点最密集的地方中心尽量重合到一块。,
算法实现是通过 向 特征数据点密度函数上升梯度方向 逐步迭代偏移 至 上升梯度值 近似为零(到达最密集的地方)。
即在不改变选取局部窗口的情况下、通过给窗口一个向特征数据点更密集的方向一个偏移向量、然后将偏移后的选取 窗口作为当前选取窗口,根据选取窗口数据特征点密集情况 给出一个一个向特征数据点更密集的方向一个偏移向量……迭代偏移过程,直到偏移向量的模值近似为零即可。
我们来分析一下上述过程:
当选取窗口(圆形)有远靠近最密集点,再远离最密集点的过程中,圆形窗口中特征数据点的数量变化:理想情况下应是选取窗口包含的特征数据点越来越多,再到越来越少。(这个过程对应meanshift算法的基本形式,没有添加核函数时)
现在你可能要问为什么要用概率密度函数的上升梯度呢?
你看,概率密度函数可以表示大小不变的选取窗口中特征数据点的密度,我们要找的是概率密度最大的选取窗口,这样一来,我们只要使 下一个选取窗口的概率密度函数值 减去 当前选取窗口的概率密度函数值 大于0,就可以越来越靠近取窗口的概率密度函数的最大值,当下一个选取窗口与当前选取窗口非常接近时,就可以用概率密度梯度表示两窗口概率密度函数对应值的差,也就是说只要使选取窗口向概率密度函数梯度上升的方向偏移就可以在上升梯度值近似为零时取得概率密度函数的近似最大值。所以呀……。使用概率,是因为特征数据点本身是概率事件或说是标定与标准特征匹配程度的特征数据。
从上面的叙述可以看到,我们是在默认选取窗口中的各个特征数据点的权值是一样的,但实际中各个特征数据点对最终判定是否为目标的影响是不一样的,这时我们需要添加权值函数(即meanshift扩展方法中的核函数)以便影响判定果。 现在我们添加的权值函数应满足什么条件呢?
对某一选取窗口的概率密度函数值=各个特征数据点的总和相当量 除以 窗口面积的相当量。
当选取窗口为全局窗口时,目标一定出现,即此范围内权值函数的各个值的总和归一化后一定为1。
为了便于比较和求概率密度函数的梯度,加权函数亦即核函数在自变量取值范围内的积分为1.
所以核函数应满足的条件:自变量范围内积分,值为1.
介绍完了meanshift基本形式和扩展形式后,我们看看meanshift方法的适用范围及其优缺点:
meanshift方法适合概率密度函数有极值且在某一局部区域内唯一,即选择的特征数据点能够较为明显的判定目标,亦即显著特征点。显然此方法,meanshift的基本形式不适合等概率特征点,即特征点是均匀分布的情况。
meanshift算法,受初始值的影响很大,这就很可能涉及到经验,而经验确实一个说不太清的东西了。另外,算法收敛的速度和程度,很大程度上和选取的窗口有关,选取恰当的窗口非常重要。然而,窗口选取的是否恰当很大程度上决定与目标(特征数据点的分布状况),这就是说此方法在处理一类目标时,还是很有效的,最起码跟踪同一目标,在窗口经过恰当的线性变换后,跟踪效果应该还是不错的。即概率密度函数的极值在自变量区域压缩或扩大的过程中,极值仍存在,仍可跟踪到目标。
meanshift算法,若用于图割,则适用于:已经建立标准的特征数据点集,且通过恰当的概率密度函数和核函数可以唯一的确定目标时,可以将目标从批量图片中分割,挑选出来,但是取出的结果显示为选取窗口中所有的内容,也就是说可能会有目标物之外的图像或缺失部分目标物。若选取窗口为目标物的轮廓,那将非常不错,也就意味着窗口模板要更新或目标轮廓是不变的(实际中不变几乎是不可能的),更新以为误差与误差的积累,也就是说进行批量分割时、在我分析的这种情况下,效果是有限的。
meanshift的核心思想,我想应该是有极值,就可能跟踪到目标,或分割。