首页 > 模式识别 > Camshift跟踪算法

Camshift跟踪算法

2012年7月28日 发表评论 阅读评论

基于图像处理的人机交互算法中,Camshift是一个很入门很基本的目标跟踪算法,不过当年学得很窝火,因为一开始不知道在网络上找,所以就研究论文里面这个算法的详情,结果看了好久也没看懂,因为那些狗屎论文个个都在装逼,明明一个很简单的算法,非要用数学封装起来,你数学就算了,非要把一个过程用连续的积分表示出来,好吧,我原谅你积分,你为了得到一个更为一般的表达式,给我他喵的抽象出一个变换核出来!!然后引进一大堆▽,∂什么的,你知道对于一个刚学习图像处理的孩子来说,这要多伤人心!!

好吧,废话说完,简单介绍一下这个算法,以慰藉当年死去的脑细胞,如果那个孩子有幸正好要学这个却又不知道的话,哈哈,你运气好啦~


首先呢,Camshift这个算法是由均值漂移算法meanshift发展而来的,全称是连续自适应的MeanShift算法(Continuously Adaptive MeanSHIFT);

然后要说camshift是什么之前就要先简单说一下什么是meanshift先,对于meanshift的应用,我们举个没啥用的例子先把,比如有一块平面板,上面各处的密度不均匀,再假设一种简单的情况,上面的密度分布像个单峰的山,也就是说只有一个局部密度最高点;然后给你一个任务,让你找出这个板的密度最高点来!

对于这个任务,meanshift是怎么做的呢?首先在这块板上随便画出一个矩形,找出这个矩形内部的重心(别告诉我你重心表达是不会求),然后呢,我们看这个重心的位置和矩形中心的位置是否重叠(或者距离小于指定ε),如果不是,那就把矩形的中心移到刚刚求得的重心那里,再求现在这个矩形位置处的新的重心,你懂啦,只要重心和中心的距离大于ε,那我们就不断的把中心移到重心出,知道满足重心和中心的距离小于ε为止,此时,我们所求得的中心或者重心就是密度最高点。

然后怎么将Meanshift用于图像处理中的目标跟踪呢?对于单幅图像而言,我们一般称之为搜索。首先我们要有目标的图像(为了有更好的跟踪效果,一般要求这个目标的颜色基本单一,比如肤色那种就可以用于手势跟踪),然后计算出这个目标图的颜色分量(一般是先把图像从RGB转换到HSV颜色空间中,提取其中的H分量,当然这只是为了是跟踪效果更好而已),然后我们就有了这个目标的颜色分量的统计图,然后对于要进行搜索的图像也做相同的颜色空间转换,因为一般讨论的是HSV中的一个分量,所以那个图像就相当于理解成上面所说的板一样,上面有不同的密度,密度是什么呢,我们可以直接把某一点对应的颜色在目标的统计图中所占的比例作为他的密度。

为了说得更清楚,我们假设目标颜色很单一,95%的像素点的H值都等于100,其余的只占了5%,那么在要搜索的那张图中,H值等于100的点的权重(相当于板的密度)就是95(乘以一个系数也无所谓),然后再在初始位置开始用上面搜索板的密度最大值点的算法寻找目标图中“密度”最大值点,这样就找到了目标了。

好了,我们知道了什么是meanshift后,camshift就一句话说完,视频流中下一帧图像的起始位置就是上一帧的结果,然后继续不断的用meanshift算法就可以了~

我。。。应该说清楚了吧。。


不过呢,这个camshift算法,大家应该可以理解,只能跟踪比较单一颜色的物体,颜色多了理论上可以跟踪,但是实验结果表示一塌糊涂。然后呢,就是如果非目标的颜色和目标的颜色很接近时,你就会发现那个跟踪矩形框各种SB。。。虽然如此,对于一些简单的目标跟踪,camshift不仅效果很好,而且非常快!!

补充一下,对于研究camshift的算法,可以研究一下那个camshift跟丢的判断条件以及跟丢后要怎么找回目标这个问题,这个问题解决了你又可以发一篇paper了。。哈哈。。


【完】

本文内容遵从CC版权协议,转载请注明出自http://www.kylen314.com

  1. 本文目前尚无任何评论.
验证码:0 + 8 = ?

友情提示:留言可以使用大部分html标签和属性;

添加代码示例:[code lang="cpp"]your code...[/code]

添加公式请用Latex代码,前后分别添加两个$$