首页 > 代码库 > 【转】 运动目标检测跟踪主流算法

【转】 运动目标检测跟踪主流算法

不全,需要慢慢补充

 一.运动目标检测

 (一)背景差

 1.帧差

2.GMM

 背景减算法可以对背景的光照变化、噪声干扰以及周期性运动等进行建模,在各种不同情况下它都可以准确地检测出运动目标。因此对于固定摄像头的情形,目前大多数的跟踪算法中都采用背景减算法来进行目标检测。背景减算法的局限性在于它需要一个静态的固定摄像头。

 (二)运动场

 光流法

 光流估计的方法都是基于以下假设:图像灰度分布的变化完全是目标或者场景的运动引起的,也就是说,目标与场景的灰度不随时间变化。这使得光流方法抗噪声能力较差,其应用范围一般局限于目标与场景的灰度保持不变这个假设条件下。另外,大多数的光流计算方法相当复杂,如果没有特别的硬件装置,其处理速度相当慢,达不到实时处理的要求。

 二.目标跟踪

 1.区域与区域匹配

 这种算法的优点在于当目标未被遮挡时,跟踪精度非常高,跟踪非常稳定。但其缺点首先是费时,当搜索区域较大时情况尤其严重;其次,算法要求目标变形不大,且不能有太大遮挡,否则相关精度下降会造成目标的丢失。

 2.特征点(关键点)跟踪

KLT:Shi和Tomasi 在1994年提出的KLT 跟踪算法是一种被广泛应用的基于特征点跟踪算法。由于特征点分布在整个目标上,因此即使有一部分被遮挡,仍然可以跟踪到另外一部分特征点,这也是基于特征点跟踪算法的优点。

基于特征点的跟踪算法中,比较困难的问题是当目标发生旋转或者被遮挡时,如何准确地完成特征点的提取、保存、删除等工作

 3.基于主动轮廓的跟踪算法

主动轮廓模型也称为Snake 模型,这种方法能较精确地跟踪上目标的轮廓。Snake 模型非常适合可变形目标的跟踪,如对运动细胞的跟踪。这种模型与卡尔曼滤波相结合能够更好地进行跟踪。Snake模型比较适合单目标的跟踪,对于多目标跟踪更多地是采用基于水平集(Level Set)方法的主动轮廓模型

 4.光流

Lucas-Kanade稀疏光流calcOpticalFlowPyrLK(利用金字塔)

Horn-Schunck稠密光流calcOpticalFlowHS

 稠密光流需要很大的计算量,OpenCV中对此方法做了简化,即对前后连续帧的一个像素的邻域进行匹配,这种方法叫块匹配。

稀疏光流需要在跟踪之前指定一组点,如果这些点具有某些明显特征,那么跟踪就会相对稳定和可靠。可见,其运算量比稠密光流要小很多。

 首先利用goodFeaturesToTrack函数得到图像中的强边界作为跟踪的特征点,接下来要调用calcOpticalFlowPyrLK函数,输入两幅连续的图像,并在第一幅图像里选择一组特征点,输出为这组点在下一幅图像中的位置。再把得到的跟踪结果过滤一下,去掉不好的特征点。再把特征点的跟踪路径标示出来。

 (实际效果一般)

 5.mean-shift和 camshift

 Mean-shift优缺点

meanShift算法用于视频目标跟踪时,采用目标的颜色直方图作为搜索特征,通过不断迭代meanShift向量使得算法收敛于目标的真实位置,从而达到跟踪的目的。

传统的meanShift算法在跟踪中有几个优势:

(1)算法计算量不大,在目标区域已知的情况下完全可以做到实时跟踪;

(2)采用核函数直方图模型,对边缘遮挡、目标旋转、变形和背景运动不敏感。

同时,meanShift算法也存在着以下一些缺点:

(1)缺乏必要的模板更新;

(2)跟踪过程中由于窗口宽度大小保持不变,当目标尺度有所变化时,跟踪就会失败;

(3)当目标速度较快时,跟踪效果不好;

(4)直方图特征在目标颜色特征描述方面略显匮乏,缺少空间信息;

由于其计算速度快,对目标变形和遮挡有一定的鲁棒性,所以,在目标跟踪领域,meanShift算法目前依然受到大家的重视。但考虑到其缺点,在工程实际中也可以对其作出一些改进和调整;例如:

(1)引入一定的目标位置变化的预测机制,从而更进一步减少meanShift跟踪的搜索时间,降低计算量;

(2)可以采用一定的方式来增加用于目标匹配的“特征”;

(3)将传统meanShift算法中的核函数固定带宽改为动态变化的带宽;

(4)采用一定的方式对整体模板进行学习和更新;

  

CamShift算法

CamShift算法的全称是"ContinuouslyAdaptive Mean-SHIFT",即:连续自适应的MeanShift算法。其基本思想是对视频序列的所有图像帧都作MeanShift运算,并将上一帧的结果(即搜索窗口的中心位置和窗口大小)作为下一帧MeanShift算法的搜索窗口的初始值,如此迭代下去。简单点说,meanShift是针对单张图片寻找最优迭代结果,而camShift则是针对视频序列来处理,并对该序列中的每一帧图片都调用meanShift来寻找最优迭代结果。正是由于camShift针对一个视频序列进行处理,从而保证其可以不断调整窗口的大小,如此一来,当目标的大小发生变化的时候,该算法就可以自适应地调整目标区域继续跟踪。

 

在OpenCV自带的camShift的例子当中,是通过计算目标在HSV空间下的H分量直方图,通过直方图反向投影得到目标像素的概率分布,然后通过调用OpenCV的CAMSHIFT算法,自动跟踪并调整目标窗口的中心位置与大小。该算法对于简单背景下的单目标跟踪效果较好,但如果被跟踪目标与背景颜色或周围其它目标颜色比较接近,则跟踪效果较差。另外,由于采用颜色特征,所以它对被跟踪目标的形状变化有一定的抵抗能力。 

    OpenCV自带例子中的camShift算法,可以分为三个部分:

 A、计算色彩投影图(反向投影):

 (1)为了减少光照变化对目标跟踪的影响,首先将图像从RGB颜色空间转换到HSV颜色空间;

 (2)对H分量进行直方图统计,直方图代表了不同H分量取值出现的概率,或者说可以据此查找出H分量的大小为x时的概率或像素个数,即,得到颜色概率查找表;

 (3)将图像中每个像素的值用其颜色出现的概率进行替换,由此得到颜色概率分布图;

   以上三个步骤称之为反向投影,需要提醒的是,颜色概率分布图是一个灰度图像;

 B、meanShift寻优

 前面提到过meanShift算法(http://blog.csdn.net/carson2005/article/details/7337432)是一种非参数概率密度估计方法,它通过不断迭代计算得到最优搜索窗口的位置和大小。

 C、camShift跟踪算法

 前面提到,camShift其实就是在视频序列的每一帧当中都运用meanShift,并将上一帧的meanShift结果作为下一帧的初始值,如此不断循环迭代,就可以实现目标的跟踪了。

  

6.kalman滤波(预估器)

 

转:http://blog.csdn.net/loadstar_kun/article/details/8599327

【转】 运动目标检测跟踪主流算法