之前做的一个项目:在手机上实现波波球、人脸的跟踪。采用的是opencv的Camshift跟踪算法,其结果是对人脸的跟踪效果较好,对小球的跟踪效果较差。通过分析之后发现根本原因是小球移动过快,而人脸的移动较慢,所以Camshift跟踪的上人脸但跟综不上小球,任何一个跟踪算法都有其跟踪速度的极限。还有另外的一个原因是:人脸在视频中占有的区域较大 ,所以背景较简单(相对于人脸),相对于小球在视频中占用的区域较小,所以背景叫复杂(相对于小球而言),为了更好地解释这一原因这面就描述一下Camshift算法的优缺点。
Camshift的优点:简单,计算量较少,因为Camshift的本质就局部检测,在局部里检测“密度”最大的位置。
Camshift的缺点:Camshift的优点有时候也正是其缺点,因为其简单,所以对于复杂背景或者纹理丰富的物体跟踪效果较差。因为Camshift是对直方图反投影所形成的二值图像进行处理的,如果背景较为复杂或者物体的纹理较为丰富,那么此二值图像的噪声就很多(具体原因可参考直方图反投影的原理),这将直接干扰Camshift对物体位置的判断。
所以对Camshift的总结为:Camshift适用于物体表面颜色较为单一,且和背景颜色差距较大
为了实现手机下的小球跟踪,现进行了如下改进:对直方图反投影图像进行滤波处理,采用的是中值滤波,但滤波处理的计算量较大,这将影响跟踪的速度,所以这里将图像的分辨率减小至原来的三分之一,使整个工程的计算量跟之前的差不多,滤波之后就没有了噪声的影响,但是小球移动过快的情况下依然跟踪失败,这里就将Camshift的局部检测改为全局下的检测,因为没有了噪声(实际效果的确如此),所以这样做是可行的,从而实现了对小球的跟踪