监控视频的行人追踪
概述
- 要求:根据提供的监控视频图像,追踪视频中行人并对其运动轨迹做出预判。
实现
- 视频图像的行人认定为图像的前景区域,识别新人即为分割图像的前景背景,故可使用knn实现分割
- 利用opencv的BackgroundSubtractorKNN实现的分割效果如下图所示:
- 对分割出的前景区域,可以计算该区域的HSV颜色模型并计算反投影,再利用camshift( 原理是均值漂移算法 )实现对前景区域即行人的追踪。
- 同样,利用opencv的cv2.CamShift() 实现效果如下:
- 图中,红色矩形框即为camshift计算出的目标区域。
- 最后,预判行人的运动轨迹,这里可以使用卡尔曼滤波来实现。
- 设定卡尔曼滤波所需测量的维度是2,即为目标区域的x,y坐标。同时,设定卡尔曼滤波的维度是4,即坐标x, y以及在xy坐标下的速度vx, vy。行人的vx, vy均可认为是匀速运动(当然需要加上各自的噪声项)。
- 根据knn实现的背景分割矩形中心来校正卡尔曼滤波器,滤波器预测的结果即为目标区域矩形的中心点。
- 根据上述假设,利用opencv的cv2.KalmanFilter()函数可建立卡尔曼滤波器模型。
- 下面是算法的实现效果(图中绿点即为预测结果):