运动目标跟踪主流算法大致分类
主要基于两种思路:
a)不依赖于先验知识,直接从图像序列中检测到运动目标,并进行目标识别,最终跟踪感兴趣的运动目标;
b)依赖于目标的先验知识,首先为运动目标建模,然后在图像序列中实时找到相匹配的运动目标。
一.运动目标检测
对于不依赖先验知识的目标跟踪来讲,运动检测是实现跟踪的第一步。运动检测即为从序列图像中将变化区域从背景图像中提取出来。运动目标检测的算法依照目标与摄像机之间的关系可以分为静态背景下运动检测和动态背景下运动检测。
(一)静态背景
1.背景差
2.帧差
3.GMM
4.光流
背景减算法可以对背景的光照变化、噪声干扰以及周期性运动等进行建模,在各种不同情况下它都可以准确地检测出运动目标。因此对于固定摄像头的情形,目前大多数的跟踪算法中都采用背景减算法来进行目标检测。背景减算法的局限性在于它需要一个静态的固定摄像头。
(二)运动场
通常情况下,摄像机的运动形式可以分为两种:a)摄像机的支架固定,但摄像机可以偏转、俯仰以及缩放; b)将摄像机装在某个移动的载体上。由于以上两种情况下的背景及前景图像都在做全局运动,要准确检测运动目标的首要任务是进行图像的全局运动估计与补偿。
考虑到图像帧上各点的全局运动矢量虽不尽相同 (摄像机做平移运动除外 ),但它们均是在同一摄像机模型下的运动,因而应遵循相同的运动模型,可以用同一模型参数来表示。
全局运动的估计问题就被归结为全局运动模型参数的估计问题,通常使用块匹配法或光流估计法来进行运动参数的估计。
块匹配
基于块的运动估算和补偿可算是最通用的算法。可以将图像分割成不同的图像块,假定同一图像小块上的运动矢量是相同的,通过像素域搜索得到最佳的运动矢量估算。块匹配法主要有如下三个关键技术:
a)匹配法则,如最大相关、最小误差等
b)搜索方法,如三步搜索法、交叉搜索法等。
c) 块大小的确定,如分级、自适应等。
光流法
光流估计的方法都是基于以下假设:图像灰度分布的变化完全是目标或者场景的运动引起的,也就是说,目标与场景的灰度不随时间变化。这使得光流方法抗噪声能力较差,其应用范围一般局限于目标与场景的灰度保持不变这个假设条件下。另外,大多数的光流计算方法相当复杂,如果没有特别的硬件装置,其处理速度相当慢,达不到实时处理的要求。
二.目标跟踪
运动目标的跟踪,即通过目标的有效表达,在图像序列中寻找与目标模板最相似候选目标区位置的过程。简单说,就是在序列图像中为目标定位。运动目标的有效表达除了对运动目标建模外,目标跟踪中常用到的目标特性表达主要包括视觉特征 (图像边缘、轮廓、形状、纹理、区域)、统计特征 (直方图、各种矩特征)、变换系数特征 (傅里叶描绘子、自回归模型)、代数特征 (图像矩阵的奇异值分解)等。除了使用单一特征外,也可通过融合多个特征来提高跟踪的可靠性.
相似性度量算法
对运动目标进行特性提取之后,需要采用一定的相似性度量算法与帧图像进行匹配,从而实现目标跟踪。图像处理与分析理论中,常见的相似性度量方法有欧氏距离、街区距离、棋盘距离、加权距离、巴特查理亚系数、Hausdorff距离等,其中应用最多和最简单的是欧氏距离。
搜索算法
目标跟踪过程中,直接对场景中的所有内容进行匹配计算,寻找最佳匹配位置,需要处理大量的冗余信息,这样运算量比较大,而且没有必要。采用一定的搜索算法对未来时刻目标的位置状态进行估计假设,缩小目标搜索范围便具有了非常重要的意义。其中一类比较常用的方法是预测运动体下一帧可能出现的位置,在其相关区域内寻找最优点。常见的预测算法有Kalman滤波、扩展的Kalman滤波及粒子滤波方法等。
Kalman滤波器是一个对动态系统的状态序列进行线性最小方差估计的算法。它通过状态方程和观测方程来描述一个动态系统,基于系统以前的状态序列对下一个状态作最优估计,预测时具有无偏、稳定和最优的特点,且具有计算量小、可实时计算的特点,可以准确地预测目标的位置和速度,但其只适合于线性且呈高斯分布的系统。相对于卡尔曼滤波算法,粒子滤波器特别适用于非线性、非高斯系统。粒子滤波算法是一种基于蒙特卡洛和贝叶斯估计理论的最优算法,它以递归的方式对测量数据进行序贯处理,因而无须对以前的测量数据进行存储和再处理,节省了大量的存储空间。在跟踪多形式的目标以及在非线性运动和测量模型中,粒子滤波器具有极好的鲁棒性。
另一类减小搜索范围的算法是优化搜索方向。均值漂移算法 (Meanshift算法 )、连续自适应均值漂移算法 (Camshift算法 )和置信区域算法都是利用无参估计的方法优化目标模板和候选目标距离的迭代收敛过程,以达到缩小搜索范围的目的。Meanshift算法是利用梯度优化方法实现快速目标定位,能够对非刚性目标实时跟踪,适合于非线性运动目标的跟踪,对目标的变形、旋转等运动有较好的适用性。但是 Meanshift算法在目标跟踪过程中没有利用目标在空间中的运动方向和运动速度信息,当周围环境存在干扰时 (如光线、遮挡 ),容易丢失目标。Camshift算法是在Meanshift算法的基础上,进行了一定的扩展,结合目标色彩信息形成的一种改进的均值漂移算法。由于目标图像的直方图记录的是颜色出现的概率,这种方法不受目标形状变化的影响,可以有效地解决目标变形和部分遮挡的问题,且运算效率较高,但该算法在开始前需要由人工指定跟踪目标。
目标跟踪分类
依据运动目标的表达和相似性度量,运动目标跟踪算法可以分为四类:基于主动轮廓的跟踪、基于特征的跟踪、基于区域的跟踪和基于模型的跟踪。跟踪算法的精度和鲁棒性很大程度上取决于对运动目标的表达和相似性度量的定义,跟踪算法的实时性取决于匹配搜索策略和滤波预测算法。
1、基于主动轮廓的跟踪
Kass等人提出的主动轮廓模型,即Snake模型,是在图像域内定义的可变形曲线,通过对其能量函数的最小化,动态轮廓逐步调整自身形状与目标轮廓相一致,该可变形曲线又称为Snake曲线。Snake技术可以处理任意形状物体的任意形变,首先将分割得到的物体边界作为跟踪的初始模板然后确定表征物体真实边界的目标函数,并通过降低目标函数值,使初始轮廓逐渐向物体的真实边界移动。
基于主动轮廓跟踪的优点是不但考虑来自图像的灰度信息,而且考虑整体轮廓的几何信息,增强了跟踪的可靠性。由于跟踪过程实际上是解的寻优过程,带来的计算量比较大,而且由于 Snake模型的盲目性,对于快速运动的物体或者形变较大的情况,跟踪效果不够理想。
2、基于特征的跟踪
基于特征匹配的跟踪方法不考虑运动目标的整体特征,只通过目标图像的一些显著特征来进行跟踪。假定运动目标可以由惟一的特征集合表达,搜索到该相应的特征集合就认为跟踪上了运动目标。除了用单一的特征来实现跟踪外,还可以采用多个特征信息融合在一起作为跟踪特征。基于特征的跟踪主要包括特征提取和特征匹配两个方面。
(1)特征提取
特征提取是指从景物的原始图像中提取图像的描绘特征,理想的图像特征应具备的特点是:
a)特征应具有直观意义,符合人们的视觉特性;
b)特征应具备较好的分类能力,能够区分不同的图像内容;
c)特征计算应该相对简单,以便于快速识别;
d)特征应具备图像平移、旋转、尺度变化等不变性。
目标跟踪中常用的运动目标的特征主要包括颜色、纹理、边缘、块特征、光流特征、周长、面积、质心、角点等。提取对尺度伸缩、形变和亮度变化不敏感的有效特征至今仍是图像处理研究领域中一个比较活跃的方面。
(2)特征匹配
特征提取的目的是进行帧间目标特征的匹配,并以最优匹配来跟踪目标。常见的基于特征匹配的跟踪算法有基于二值化目标图像匹配的跟踪、基于边缘特征匹配或角点特征匹配的跟踪、基于目标灰度特征匹配的跟踪、基于目标颜色特征匹配的跟踪等。
基于特征的跟踪算法的优点在于对运动目标的尺度、形变和亮度等变化不敏感,即使目标的某一部分被遮挡,只要还有一部分特征可以被看到,就可以完成跟踪任务;另外,这种方法与 Kalman滤波器联合使用,也具有很好的跟踪效果。但是其对于图像模糊、噪声等比较敏感,图像特征的提取效果也依赖于各种提取算子及其参数的设置,此外,连续帧间的特征对应关系也较难确定,尤其是当每一帧图像的特征数目不一致、存在漏检、特征增加或减少等情况。
3、基于区域的跟踪
基于区域的跟踪算法基本思想是:
a)得到包含目标的模板,该模板可通过图像分割获得或预先人为确定,模板通常为略大于目标的矩形,也可为不规则形状;
b)在序列图像中,运用相关算法跟踪目标。
这种算法的优点在于当目标未被遮挡时,跟踪精度非常高、跟踪非常稳定。但其缺点首先是费时,当搜索区域较大时情况尤其严重;其次,算法要求目标变形不大,且不能有太大遮挡,否则相关精度下降会造成目标的丢失。近年来,对基于区域的跟踪方法关注较多的是如何处理模板变化时的情况,这种变化是由运动目标姿态变化引起的,如果能正确预测目标的姿态变化,则可实现稳定跟踪。
4、基于模型的跟踪
基于模型的跟踪是通过一定的先验知识对所跟踪目标建立模型,然后通过匹配跟踪目标进行模型的实时更新。对于刚体目标来说,其运动状态变换主要是平移、旋转等,可以利用该方法实现目标跟踪。但是实际应用中跟踪的不仅仅是刚体,还有一大部分是非刚体,目标确切的几何模型不容易得到。
这种方法不易受观测视角的影响,具有较强的鲁棒性,模型匹配跟踪精度高,适合于机动目标的各种运动变化,抗干扰能力强,但由于计算分析复杂、运算速度慢,模型的更新较为复杂,实时性较差。准确建立运动模型是模型匹配能否成功的关键
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结果作为下一帧的初始值,如此不断循环迭代,就可以实现目标的跟踪了。