前言: 目标跟踪是计算机视觉领域研究的一个热点问题,其利用视频或图像序列的上下文信息,对目标的外观和运动信息进行建模,从而对目标运动状态进行预测并标定目标的位置。目标跟踪算法从构建模型的角度可以分为生成式(generative)模型和判别式(discrimination)模型两类;从跟踪目标数量可分为单目标跟踪和多目标跟踪。目标跟踪融合了图像处理、机器学习、最优化等多个领域的理论和算法,是完成更高层级的图像理解( 如目标行为识别) 任务的前提和基础。
目标跟踪的基本任务是在一段视频序列中给定目标的初始位置,在后续每一帧中对目标进行持续的跟踪定位,在此过程中不会提供关于目标的颜色、形状、大小等先验条件,即跟踪算法只有通过在第一帧中对目标进行学习才能进行跟踪。一般来说,跟踪过程中的技术难点主要包括以下几个方面:
① 遮挡与消失
② 形态变化
③ 运动模糊
④ 复杂背景
⑤ 准确性与实时性
1 传统的目标跟踪方法
传统的目标跟踪算法是目标跟踪领域出现最早的算法,虽然在如今看来,这些算法存在一定局限性,但我们不能忽视它们为目标跟踪领域蓬勃发展奠定的基础。其中的经典算法包括光流法、卡尔曼滤波、粒子滤波、均值漂移等。
1.1 光流法:
光流(optical flow)的概念于1950 年由 Gibson 首先提出,是目标、场景或摄像机在连续两帧图像间运动时造成的目标的运动。是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。其计算方法可以分为三类:
(1)基于区域或者基于特征的匹配方法;
(2)基于频域的方法;
(3)基于梯度的方法;
简单来说,光流是空间运动物体在观测成像平面上的像素运动的“瞬时速度”。光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”。研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场。
注:运动场,其实就是物体在三维真实世界中的运动;光流场,是运动场在二维图像平面上的投影。
光流法的前提假设:
(1)相邻帧之间的亮度恒定;
(2)相邻视频帧的取帧时间连续,或者,相邻帧之间物体的运动比较“微小”;
(3)保持空间一致性;即,同一子图像的像素点具有相同的运动
光流法用于目标检测的原理:给图像中的每个像素点赋予一个速度矢量,这样就形成了一个运动矢量场。在某一特定时刻,图像上的点与三维物体上的点一一对应,这种对应关系可以通过投影来计算得到。根据各个像素点的速度矢量特征,可以对图像进行动态分析。如果图像中没有运动目标,则光流矢量在整个图像区域是连续变化的。当图像中有运动物体时,目标和背景存在着相对运动。运动物体所形成的速度矢量必然和背景的速度矢量有所不同,如此便可以计算出运动物体的位置。需要提醒的是,利用光流法进行运动物体检测时,计算量较大,无法保证实时性和实用性。
光流法用于目标跟踪的原理:
(1)对一个连续的视频帧序列进行处理;
(2)针对每一个视频序列,利用一定的目标检测方法,检测可能出现的前景目标;
(3)如果某一帧出现了前景目标,找到其具有代表性的关键特征点(可以随机产生,也可以利用角点来做特征点);
(4)对之后的任意两个相邻视频帧而言,寻找上一帧中出现的关键特征点在当前帧中的最佳位置,从而得到前景目标在当前帧中的位置坐标;
(5)如此迭代进行,便可实现目标的跟踪;
1.2 卡尔曼滤波
卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,卡尔曼滤波器到底是干嘛的?我们来看下wiki上的解释:卡尔曼滤波的一个典型实例是从一组有限的,包含噪声的,对物体位置的观察序列(可能有偏差)预测出物体的位置的坐标及速度。例如,对于雷达来说,人们感兴趣的是其能够跟踪目标。但目标的位置、速度、加速度的测量值往往在任何时候都有噪声。卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的好的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),也可以是对过去位置的估计(插值或平滑)。
什么是卡尔曼滤波?
① 你可以在任何含有不确定信息的动态系统中使用卡尔曼滤波,对系统下一步的走向做出有根据的预测,即使伴随着各种干扰,卡尔曼滤波总是能指出真实发生的情况。 在连续变化的系统中使用卡尔曼滤波是非常理想的,它具有占用内存小的优点(除了前一个状态量外,不需要保留其它历史数据),并且速度很快,很适合应用于实时问题和嵌入式系统。
② 卡尔曼滤波器是一种高效的递归滤波器,它能够从一系列的不完全及包含噪声的测量中,估计动态系统的状态。
③ 对于一个线性系统,卡尔曼滤波器能够从不精确的预测状态和观测状态中,估算出高精度的系统状态,并且估计过程只需要保留最近一次的估算结果,具有速度快、资源需求低的特点。
④ 其滤波过程为:根据当前状态和系统方程估算下一状态 → 获取下一状态的观测结果