opencv跟踪

 

Mean-Shift算法和Camshift追踪

Mean-Shift算法

Mean-Shift算法是一种在数据集密度分布中寻找局部极值的鲁棒方法

鲁棒(robust)指统计学意义,忽略了离群点,只处理局部窗口中的点

cv::meanShift()是矩形窗口Mean-Shift算法的一种形式,但也可以用于跟踪

首先选择特征分布表示对象,然后通过对象生成的特征分布开始Mean-Shift窗口

Camshift

它和Mean-Shift算法的主要不同之处是搜索窗口可以调整自身大小

运动模板

运动模板是跟踪一般运动的有效方式,尤其适用于手势识别

使用运动模板需要一个目标轮廓,获得轮廓的方法:

  1. 使用静态相机,采用帧到帧的差分,产生目标的移动边缘
  2. 使用色度键控,比如背景颜色已知为亮绿色,将不是亮绿色的东西作为背景
  3. 学习一个背景模型
  4. 使用动态轮廓技术
  5. 使用热像仪
  6. 分割技术

新轮廓为白色,较老的运动为较暗的图形,依次变暗的轮廓巨鹿了先前运动的历史,被称为运动历史图像

时间戳超过当前系统时间戳的指定duration(持续时间)的轮廓被设为0

完成运动模板构建的opencv函数是cv::motempl::updateMotionHistory()

求梯度导出整体运动的情况,设定最小和最大梯度幅度消除太大的梯度

找到每一个局部最新轮廓,然后使用漫水填充隔离局部运动,利用隔离区域内梯度计算运动,删除局部区域搜索下一个最新轮廓区域…..

估计

假设一个走动的人,我们希望最大限度地利用所做的测量来估计这个人的动作

传感器的误差,处理的近似,阴影等不准确的因素统称为测量过程中的噪声

多个测量的累计让我们检测出的人的观测轨迹中不受噪声影响的部分

—-预测阶段:为了估计目标的下一个位置,使用过去学习的信息进一步完善我们的模型

—-校正阶段,进行测量,并根据以前的测量(模型)进行预测,最后将当前测量值和预测值融合

能够完成两阶段任务的机器叫估计器(estimator),卡尔曼滤波是使用最广泛的技术,另一个重要方法是凝聚算法,它们的主要区别是如何描述状态概率密度