基于mean shift算法的物体跟踪(python+opencv代码)
Posted happylife_mini
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于mean shift算法的物体跟踪(python+opencv代码)相关的知识,希望对你有一定的参考价值。
代码链接:python+opencv+meanshift算法实现物体跟踪
效果如下: (输入一段视频,调整代码中的 r,h,c,w 四个参数确定到水瓶的位置,你也可以输入自己的视频并尝试调整参数使得方框初始包含想要跟踪的物体)
1. Mean shift算法实现原理
Mean Shift算法原理其实和聚类很相似,是一个迭代的过程,即先算出当前点的偏移均值,将该点移动到该偏移均值,以此为新的起始点,继续移动,直到满足最终的条件。
(1)设想在一个有N个样本点的特征空间,初始确定一个中心点center;
(2)计算在设置的半径为D的圆形空间内所有的点(xi)与中心点center的向量;
(3)计算整个圆形空间内所有向量的平均值,得到一个偏移均值
(4)将中心点center移动到偏移均值位置;
(5)重复移动,直到满足一定条件结束。
Meanshift背后的直觉很简单,假设你有点的集合。(它可以是像素分布,例如直方图反投影)。你会得到一个小窗口(可能是一个圆形),并且必须将该窗口移到最大像素密度(或最大点数)的区域。如下图所示:
初始窗口以蓝色圆圈显示,名称为“C1”。其原始中心以蓝色矩形标记,名称为“C1_o”。但是,如果找到该窗口内点的质心,则会得到点“C1_r”(标记为蓝色小圆圈),它是窗口的真实质心。当然,它们不匹配。因此,移动窗口,使新窗口的圆与上一个质心匹配。再次找到新的质心。很可能不会匹配。因此,再次移动它,并继续迭代,以使窗口的中心及其质心落在同一位置(或在很小的期望误差内)。因此,最终您获得的是一个具有最大像素分布的窗口。它带有一个绿色圆圈,名为“C2”。正如您在图像中看到的,它具有最大的点数。
2. 直方图反投影
它用于图像分割或在图像中查找感兴趣的对象。简而言之,它创建的图像大小与输入图像相同(但只有一个通道),其中每个像素对应于该像素属于我们物体的概率。用更简单的话来说,与其余部分相比,输出图像将在可能有对象的区域具有更多的白色值。
写的比较简单,其实很多东西看完代码就懂了,看再多原理有时候不如看代码(个人感觉)。最后,放上代码链接:
python+opencv+meanshift算法实现物体跟踪
以上是关于基于mean shift算法的物体跟踪(python+opencv代码)的主要内容,如果未能解决你的问题,请参考以下文章
目标跟踪基于matlab Mean-shift算法目标跟踪含Matlab源码 2326期
目标检测基于matlab GUI背景差分算法视频运动物体跟踪含Matlab源码 1915期