目录
-
1.前言
本文来自MathWorks官方的技术文档——Using Kalman Filter for Object Tracking。在自己理解的基础上翻译了部分英文注释,并添加了一些注释。有关卡尔曼滤波的基本原理,可以参考B站UP主的视频“卡尔曼滤波器的原理以及在matlab中的实现”。其他可能会用到的资料,以及我整理好的.m文件放在文章的最后。
-
2.正文
-
2.1 介绍
卡尔曼滤波(Kalman filter)在机电控制、导航、计算机视觉以及时间序列计量经济学等领域具有广泛的应用。MathWorks的官方技术文档中介绍了如何使用卡尔曼滤波器进行目标跟踪,主要聚焦于以下几个方面。
- 目标将来将来位置的预测(轨迹预测);
- 减少由于噪声导致的探测不准确;
- 促进多目标轨迹相互关联的过程(这个还不太明白什么意思)。
-
2.2 目标跟踪的挑战
这里给了一段视频,可以在C:\Program Files\MATLAB\R20**\toolbox\vision\visiondata文件夹中找到,文件名为“singleball.mp4”。视频中有一个小球从画面左端运动到画面右端,如下:
singleball.mp4
可以使用说明中的“showDetections()”函数显示该视频,showDetections()函数的.m文件也附在最后。
showDetections();
showDetections()函数处理后,小球显示为一团高亮的白色像素,showDetections()调用了vision.ForegroundDetector前景检测函数,可以检测静止相机拍摄图像中的前景对象。检测后的视频如下:
singleBall1.avi
前景检测由于球的边缘和地板的对比度比较低,引入了噪声,因此只能检测到球的一部分。把所有帧叠加到单幅图片上可以得到检测到的小球轨迹,如下图。

检测结果暴露了两个问题:
- 检测得到的区域中心与球的中心不完全重合,定位球的位置的时候存在误差;
- 并不是时刻都能检测到球的位置,比如当球被箱子遮挡的时候。
上述两个问题可以通过卡尔曼滤波来解决。
2.3 使用卡尔曼滤波器跟踪单个目标
函数trackSingleObject 展示了如何实现上述功能,包括:
- 使用configureKalmanFilter创建卡尔曼滤波器;
- 使用预测和矫正的方法消除跟踪系统中存在的误差;
- 当小球被遮挡时,使用预测方法估计小球的位置。
使用configureKalmanFilter可以简化卡尔曼滤波器构造的过程。trackSingleObject 函数中还包含了一些内嵌函数,用于实现部分功能。下面的全局变量用于在主函数和各个嵌套函数中传递数据。
frame = []; % A video frame
detectedLocation = []; % The detected location
trackedLocation = []; % The tracked location
label =

最低0.47元/天 解锁文章
569





