从cvchina.net上发现的介绍目标跟踪的文章。
目标跟踪是绝大多数视觉系统中不可或缺的环节。在二维视频跟踪算法中,基于目标颜色信息或基于目标运动信息等方法是常用的跟踪方法。从以往的研究中我们发现,大多数普通摄像头(彩色摄像头)下非基于背景建模的跟踪算法都极易受光照条件的影响。这是因为颜色变化在某种程度上是光学的色彩变化造成的。如基于体素和图像像素守恒假设的光流算法它也是假设一个物体的颜色在前后两帧没有巨大而明显的变化。
但在特定的场景应用中(如视频监控等领域),不失有一些经典的跟踪算法可以实现较好的跟踪效果。以下主要介绍三种经典的跟踪算法:CamShift算法、光流跟踪以及粒子滤波算法。最后将给出一个各种跟踪方法间的比较。
1、 CamShift(Continuously Adaptive Mean Shift)跟踪算法
CamShift算法是一种基于均值漂移的算法。均值移动的理论基础是概率密度估计。均值移动的过程实际上就是在概率密度空间中寻找局部极大点。从其全称可知CamShift的算法基础实际上是MeanShift算法,均值移动的操作过程可用如下几步来表示:
(a) 计算以初始点x 0为中心的某一核窗所对应的均值移动向量mG(x0);
(b) 根据mG(x0)来移动核窗的中心位置,也即把mG(x0)中的加权平均值部分赋予x0,把x0作为新的初始点,并转回步骤(a);
(c) 重复(a)、(b)过程,直到满足某一预定的条件。
因此,均值移动过程就是寻找数据分布最密处的过程。
均值移动的实现过程可图示为:
(1) 计算目标区域的均值、移动目标区域
<IGNORE_JS_OP>
(2) 重新计算目标区域均值,还存在移动向量,继续移动目标区域
<IGNORE_JS_OP>
(3) 移动向量越来越小
<IGNORE_JS_OP>
(4) 找到局部极大点,停止移动
<IGNORE_JS_OP>
以上过程只是一次MeanShift算法过程,在连续帧上使用MeanShift算法就是CamShift跟踪算法。CamShift同经典的均值移动跟踪算法的基本思想是相同的,所不同的它是建立在颜色概率分布图和矩的基础之上。CamShift对室内环境下的目标跟踪具有较高的鲁棒性。
1、 光流跟踪算法
将三维空间中的目标和场景对应于二维图像平面运动时,他们在二维图像平面的投影就形成了运动,这种运动以图像平面亮度模式表现出来的流动就称为光流。光流法是对运动序列图像进行分析的一个重要方法,光流不仅包含图像中目标的运动信息,而且包含了三维物理结构的丰富信息,因此可用来确定目标的运动情况以及反映图像其它等信息。
光流是空间运动物体在观测成像面上的像素运动的瞬时速度。光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”,即研究图像灰度在时间上的变化与景象中物体结构及其运动的关系。一般情况下,光流由相机运动、场景中目标运动或两者的共同运动产生。光流计算方法大致可分为三类:基于匹配的、频域的和梯度的方法。
(1) 基于匹配的光流计算方法包括基于特征和基于区域两种。基于特征的方法不断地对目标主要特征进行定位和跟踪,对大目标的运动和亮度变化具有鲁棒性。存在的问题是光流通常很稀疏,而且特征提取和精确匹配也十分困难。基于区域的方法先对类似的区域进行定位,然后通过相似区域的位移计算光流。这种方法在视频编码中得到了广泛的应用。然而,它计算的光流仍不稠密。
(2) 基于频域的方法利用速度可调的滤波组输出频率或相位信息。虽然能获得高精度的初始光流估计,但往往涉及复杂的计算。另外,进行可靠性评价也十分困难。
(3) 基于梯度的方法利用图像序列的时空微分计算2D速度场(光流)。由于计算简单和较好的效果,基于梯度的方法得到了广泛的研究。虽然很多基于梯度的光流估计方法取得了较好的光流估计,但由于在计算光流时涉及到可调参数的人工选取、可靠性评价因子的选择困难,以及预处理对光流计算结果的影响,在应用光流对目标进行实时监测与自动跟踪时仍存在很多问题。
光流法检测运动物体的基本原理是:给图像中的每一个像素点赋予一个速度矢量,这就形成了一个图像运动场,在运动的一个特定时刻,图像上的点与三维物体上的点一一对应,这种对应关系可由投影关系得到,根据各个像素点的速度矢量特征,可以对图像进行动态分析。如果图像中没有运动物体,则光流矢量在整个图像区域是连续变化的。当图像中有运动物体时,目标和图像背景存在相对运动,运动物体所形成的速度矢量必然和邻域背景速度矢量不同,从而检测出运动物体及位置。采用光流法进行运动物体检测的问题主要在于大多数光流法计算耗时,实时性和实用性都较差。但是光流法的优点在于光流不仅携带了运动物体的运动信息,而且还携带了有关景物三维结构的丰富信息,它能够在不知道场景的任何信息的情况下,检测出运动对象。
<IGNORE_JS_OP>
对于视频监控系统来说,所用的图像基本都是摄像机静止状态下摄取得,所以对有实时性和准确性要求的系统来说,纯粹使用光流法来检测目标不太实际。更多的是利用光流计算方法与其它方法相结合来实现对目标检测和运动估计。
然而,在实际应用中,由于遮挡性、多光源、透明性和噪声等原因,使得光流场基本方程的灰度守恒假设条件不能满足,不能求解出正确的光流场,同时大多数的光流计算方法相当复杂,计算量巨大,不能满足实时的要求,因此,一般不被对精度和实时性要求比较高的监控系统所采用。
3、 粒子滤波跟踪算法
粒子滤波算法有很多变种,以Rob Hess实现的这种最基本的粒子滤波算法为例。它的核心思想是随机采样和重要性重采样。在不知道目标在哪里的情况下,随机向场景中分散粒子,撒完粒子后,根据特征相似度计算每个粒子的重要性,然后在重要的地方多撒粒子,不重要的地方少撒粒子。所以说粒子滤波较之蒙特卡洛滤波计算量较小。这种思想虽然简单,但效果往往很好。
粒子滤波实现对目标的跟踪通常分以下四个步骤:
(1) 初始化阶段-提取跟踪目标特征
该阶段要人工指定跟踪目标,程序计算跟踪目标的特征,比如可以采用目标的颜色特征。这点和CamShift算法类似,不能实现自动初始化。但我们可以在初始时给定一个颜色样本,实现程序的半自动初始化。然后计算该区域色调(Hue)空间的直方图,即为目标的特征。直方图可以用一个向量来表示,所以目标特征就是一个N*1的向量V。
(2) 搜索阶段—分撒搜索粒子
获取目标特征后,在场景中分撒许多搜索粒子去搜索目标对象。粒子分撒有许多种方式。比如,a) 均匀分撒。即在整个图像平面均匀的撒粒子(uniform distribution);b)在上一帧得到的目标附近按照高斯分布来放,可以理解成,靠近目标的地方多放,远离目标的地方少放。Rob Hess的代码用的是后一种方法。粒子放出去后按照初始化阶段得到的目标特征(色调直方图,向量V)计算它所处的位置处图像的颜色特征,得到一个色调直方图,向量Vi,计算该直方图与目标直方图的相似性(直方图匹配)。相似性有多种度量,最简单的一种是计算sum(abs(Vi-V))。每个粒子算出相似度后再做一次归一化,使得所有的粒子得到的相似度加起来等于1。
(3) 决策阶段
分撒出去的每个粒子将返回其所处位置的图像信息。比如,“一号粒子处图像与目标的相似度是0.3”,“二号粒子处图像与目标的相似度是0.02”,“三号粒子处图像与目标的相似度是0.0003”,“N号粒子处图像与目标的相似度是0.013”然后做加权平均。设N号粒子的图像像素坐标是(Xn,Yn),它报告的相似度是Wn,于是目标最可能的像素坐标X = sum(Xn*Wn),Y = sum(Yn*Wn)。
(4) 重采样阶段Resampling
在新的一帧图像里,为了搜索到目标的新位置,需要再分撒粒子进行搜索。但现在应该怎样分撒呢?这要根据上一帧各个粒子返回的相似度报告。比如,“一号粒子处图像与目标的相似度是0.3”,“二号粒子处图像与目标的相似度是0.02”,“三号粒子处图像与目标的相似度是0.0003”,“N号粒子处图像与目标的相似度是0.013”。综合所有粒子的报告,一号粒子处的相似度最高,三号粒子处的相似度最低,于是要重新分撒粒子,在相似度最高的粒子那里放更多条粒子,在相似度最低的粒子那里少放粒子,甚至把原来那条粒子也撤回来。这就是Sampling Importance Resampling,根据重要性重采样(更具重要性重新放粒子)。
(2)->(3)->(4)->(2)如是反复循环,即完成了目标的动态跟踪。
粒子滤波跟踪算法可用于视频监控领域,可以跟踪速度较快的跟踪目标。
4、 其他跟踪算法及优缺点
将其他一些常用的跟踪算法及优缺点形成了一个表,其原理不做赘述,可参阅相关文献。
<IGNORE_JS_OP>
local orientation correlation (LOC) , flocks of features tracking (FF) , optical flow tracking using templates on a regular grid (OF) and local feature tracking, KLT-tracker(KLT) , and boosted detection (BD).
参考
[1] 《基于均值移动的人脸跟踪简介》未公开
[2] http://kb.cnblogs.com/a/1742263/
[3] AIDIA – Adaptive Interface for Display Interaction