Opencv学习笔记(二)meanshift之我见

       

         今天看到了opencv cookbook一书的第四章,看到了meanshift这个概念。其实以前也看到过这个概念,知道可以用meanshift来做目标跟踪和图像分割。但那时候只知道这个东西叫做均值漂移,并不知道它是怎么做图像分割的。冥冥之中感觉这玩意儿对我现在写的论文有帮助,今天对着Dorin Comaniciu 等人2002年写的《Mean Shift:A Robust Approach Toward Feature Space Analysis》研究了一下,大致理清了它的概念。

        公式就不写了。meanshift其实原理挺简单的,就是随便找个种子点,然后开始在该种子点邻域内寻找其目标点的密度中心,那么种子点到密度中心点的向量方向就是密度上升方向了,更新密度中心点为种子点,迭代,直到到达截止条件(opencv里的meanshift把截止条件定为迭代次数和截止精度,当然这两者可以随意组合)。

        改进的meanshift使用了核函数(区别种子点附近和远处点的权重)和权重系数(区别不同样本的权重),但基本原理还是一样的。

        这篇论文很长,但作为牛逼的论文嘛,在实现该方法的同时,它系统地证明了meanshift算法是沿着最大密度梯度方向搜索的,并且随着多次迭代,种子点趋于稳定。

        其实在上面讲述的时候去掉了一个背景,就是所有样本都采样自概率密度函数,但这并不影响理解其原理。

        

        通过分析meanshift的原理,其目的就是寻找的是局部最优点,这样很容易联想到其在图像分割或聚类上的应用。

        对于其应用到图像处理上来,其样本可认为是(x,y),x值二维坐标,y是颜色空间(p维,maybe  1or3),那么总维数是      p+2。

         meanshift也可用作图像平滑,但是对每一个像素点操作用迭代截止值代替,算法复杂度肯定很高了。

         目前用meanshift的很多其实还是目标跟踪,先预先取一个目标矩形框,在目标动的时候,就会迭代更新密度中心点到当前目标的密度中心,这样只是一个固定的矩形框的局部范围搜索,算法复杂度肯定可以接受,实时性就不错了。但是通过分析发现用meanshift做跟踪的话,目标突然消失又突然出现,这个算法肯定傻逼了,所以换句话说,目标必须连续移动。

        好吧,其实我最初是想做一幅复杂背景图片里的前景区域(可能有很多颜色和前景类似物体,但假定它们的size比前景物体要小很多)的提取,该算法的局部收敛让我很郁闷,谁能给我个好的建议啊,感激不尽啊!!!



你可能感兴趣的:(算法,图像处理,联想)