第三章 运动目标跟踪
目标检测之后就是目标跟踪,目标跟踪是在事先不了解目标运动信息的条件下,通过来自信息源的数据实时估计出目标的运动状态,从而实现对目标的位置和运动趋势的判定。
基于边缘的目标跟踪,是假设已知边缘的状态变量,包括边缘线段位置、方向、强度,通过图像变形获得包含目标的备选区域,再对规范化边缘进行跟踪。
基于背景估计的目标跟踪,是在背景静止或背景缓慢变化的情况下进行目标跟踪的,主要通过背景建模,利用图像序列帧来估计图像序列中不变的背景,进而提取当前帧中的非背景像素集合(运动目标包含其中)。
基于运动场估计的目标跟踪,主要有光流法(OFE)、块匹配(BMA)、基于贝叶斯最大后验概率(MAP)模型的统计方法。
基于团块的目标跟踪,是对候选像素进行图像分割,判断该像素是属于目标还是属于背景或是其他区域。与传统的图像分割不同在于:目标视觉跟踪目的在于在图像序列中进行目标定位,可以有一定程度的像素分类不准确,只需分割结果足以区分目标和背景;而传统的图像分割算法需要精确的目标轮廓,分割线索一般有目标的运动特征,纹理特征和图像深度信息等。
基于模板匹配的区域跟踪是对图像的外部特征做匹配运算,与参考模板区域匹配程度最高的就是目标。
基于主动轮廓线的目标跟踪,Snake模型,根据图像信息来改变曲线位置和形状。中心思想是最小化图像能量函数,Snake利用对光照变化相对不敏感的轮廓信息来对目标物体进行建模,并对轮廓的曲率和物体的运动加入平滑性约束。
1. 运动目标的分割
在利用背景差分算法获得的前景后,采用连通区域标记算法来获得每个运动区域。一般使用目标像素的左上、上、右下、左这四个邻域像素的标记作为标准,通过分析得出当前目标像素可能遇到的情形的标记:
在标记完每个目标像素后要将等价对合并,这样就可以确定出连通区域,一般以最小外接矩形来表示每个连通区域。这种传统的标记算法标记的对象是像素,为了提高运动目标分割的效率,目前有基于边缘轮廓和线段的标记的方法。OpenCV提供了cvFindContours函数完成目标边缘的提取。利用此函数可以方便地得到背景差分检测出来的运动前景图像中的目标轮廓,并得到运动目标的外接轮廓或者外接矩形以及所处的位置。
如果处理的图像中目标出现粘连,处理办法有求取区域内核种子点和分水岭算法,这些算法基于线段编码的图像,轮廓跟踪获取的轮廓是链码格式,就需要将链码转换为线段表。
2. 卡尔曼滤波跟踪
卡尔曼滤波器是一个最优化自回归数据处理算法,对于离散控制过程的系统,可用一个线性随机微分方程来描述:
系统的测量值:
X(k)是k时刻的系统状态,U(k)是k时刻对系统的控制量。A和B是系统参数,对于多模型系统,他们为矩阵。Z(k)是k时刻的测量值,H是测量系统的参数,对于多测量系统,H为矩阵。W(k)和V(k)分别正态分布的运动和测量噪声,他们的先验误差分别是Q,R(假设不随系统状态变化而变化)。
假设现在的系统状态是k,根据系统的模型,可以基于系统的上一状态而预测出现在状态:
(1)
X(klk-1)是利用上一状态预测的结果,X(k-l lk-1)是上一状态最优的结果,U(k)为现在状态的控制量,如果没有控制量,它可以为0。
用P表示先验误差的矩阵
(2)
P(klk-1)是X(klk-1)对应的先验误差,P(k-Ilk-1)是X(k-Ilk-1)对应的后验误差, 表示A的转置矩阵,Q是系统过程的先验误差。式子(1)(2)表示对系统的预测。
结合预测值和测量值,我们可以得到现在状态(k)的最优化估算值X(klk):
(3)
其中K为卡尔曼增益矩阵:
(4)
更新k状态下X(klk)的先验误差:
(5)
式子1、2、3、4、5是卡尔曼滤波器的5个基本公式。OpneCV提供了卡尔曼滤波器的数据结构CvKalman与函数CreateKalman、KalmanPredict、KalmanCorrect和ReleaseKalman来完成卡尔曼滤波。
3. CamShift跟踪算法
该算法的基本原理是将跟踪目标的色彩信息作为特征,将这些信息计算处理后投影到下一帧图像中,计算出这幅图像中的目标,用这幅图像作为新的源图,分析下一帧图像,重复这个过程就可以实现对目标的连续跟踪。该算法是通过颜色匹配找到运动目标,在运动目标运动的过程中,颜色信息变化不大,故该算法具有良好的鲁棒性。
灰色的部分是Camshifl算法的核心——MeanShift算法,主要目标是在视频图像到运动目标所在的位置。MeanShift算法中,给定一个彩色图像和该图像某个初始搜索区域对应的色度直方图, 就可以使用这个直方图作为一个查找表来创建以像素色调浓度为灰度值的单通道反射投影图像,MeanShift利用这个反射投影图像,用迭代的方法寻找目标中心,当搜索窗口中心的移动RoU小于某个定值,或者已经到达最大迭代次数的时候,就返回已经求取到的目标的位置信息。在彩色图像将MeanShifl算法扩展到连续图像序列,这样就形成了CamShifl算法。它的基本思想是将视频图像的所有帧作MeanShift运算,并将对上一帧的运算结果作为对下一帧运算的输入值,如此循环迭代,就可以实现对活动目标的在每个图像帧中的检测和跟踪。
1) 图像的色彩特征
常见的色彩空间有:RGB、CMYK、YcrCb(YUV)、HSV。
RGB空间。RGB空间是按照光谱理论形成的,在RGB色彩空间,所有的颜色是通过红、绿、蓝三个分量按照一定的比例混合实现的,每一个分量被称作一个色彩通道。
HSV空间。HSV空间反应了人类感知色彩的方式,亮度(value)和反映色彩本质特性的两个参数色度(Hue)和饱和度(Saturation)一一分开。当我们需要对彩色图像进行分析的时候,直接利用能够反映色彩本质特征的色度和饱和度会获得比较好的效果。MeanShift算法主要运用的就是HSV空间中的色度(Hue)信息。
2) MeanShift算法
把图像转换到HSV空间后,就可以将H通道分离出来建立一个新单通道灰度图像,其灰度值就是HSV空间中的色度Hue值。然后在这个单通道图像以中建立初始搜索区域灰度直方图——也就是原图像在搜索区域的色度直方图。
从区域色度直方图反向投影的过程是以初始搜索区域建立的色度直方图为查找表,将Hue通道图像中超过查找表数值的像素按坐标位置映射到新的灰度图像中,这样就建立了一张反射图像。
在反射图像中计算目标质心,假定(x,y)为搜索窗口中的像素位置,I(x,y)是投影图中(x,y)处的像素值,定义搜索窗口的零阶矩 和一阶矩 、 分别如下:
搜索窗口内的质心位置为:
4. OpenCV的跟踪框架
1) 前景检测模块:判断每一个像素是前景还是背景。输入数据为当前帧图像,输出为当前帧的前景掩码。
前景检测模块将当前帧上的像素分为前景像素和背景像素。运动的物体为前景、不动的部分都被当做背景区域。
2) 团块特征检测模块:使用前景检测的结果检测场景中运动物体的像素集合一团块,输入数据为当前帧的掩码和已有的团块,输出数据为新检测到的团块,为了满足在雷达系统上的应用,团块的图形特征和运动相关性分析都要考虑,而且要考虑团块之间以及团块与背景像素融合以后的处理。
3) 团块跟踪模块:包括团块列表和单团块跟踪,使用新团块检测的结果,输入数据为当前帧、当前帧掩码和新团块,输出数据为当前帧的团块信息(ID信息、位置信息等)。
4) 轨迹生成模块:收集所有团块的位置,建立轨迹列表,进行相关性处理。输入数据为当前帧的所有团块,输出数据为保存的轨迹列表。
5) 轨迹后处理模块:进行运动物体标定时去除位置和运动趋势的抖动,对轨迹进行平滑处理。此模块可以是卡尔曼滤波或其他平滑滤波。