使用MATLAB的Kalman Filter做目标跟踪——来自MathWorks网站的技术文档

目录

1.前言

2.正文

2.1 介绍

2.2 目标跟踪的挑战

2.3 使用卡尔曼滤波器跟踪单个目标

2.4 卡尔曼滤波器参数配置

2.5 多目标跟踪

3. 本例中用到的函数


  • 1.前言

本文来自MathWorks官方的技术文档——Using Kalman Filter for Object Tracking。在自己理解的基础上翻译了部分英文注释,并添加了一些注释。有关卡尔曼滤波的基本原理,可以参考B站UP主的视频“卡尔曼滤波器的原理以及在matlab中的实现”。其他可能会用到的资料,以及我整理好的.m文件放在文章的最后。

  • 2.正文

  • 2.1 介绍

卡尔曼滤波(Kalman filter)在机电控制、导航、计算机视觉以及时间序列计量经济学等领域具有广泛的应用。MathWorks的官方技术文档中介绍了如何使用卡尔曼滤波器进行目标跟踪,主要聚焦于以下几个方面。

  1. 目标将来将来位置的预测(轨迹预测);
  2. 减少由于噪声导致的探测不准确;
  3. 促进多目标轨迹相互关联的过程(这个还不太明白什么意思)。

  • 2.2 目标跟踪的挑战

这里给了一段视频,可以在C:\Program Files\MATLAB\R20**\toolbox\vision\visiondata文件夹中找到,文件名为“singleball.mp4”。视频中有一个小球从画面左端运动到画面右端,如下:

singleball.mp4

可以使用说明中的“showDetections()”函数显示该视频,showDetections()函数的.m文件也附在最后。

showDetections();

showDetections()函数处理后,小球显示为一团高亮的白色像素,showDetections()调用了vision.ForegroundDetector前景检测函数,可以检测静止相机拍摄图像中的前景对象。检测后的视频如下:

singleBall1.avi

前景检测由于球的边缘和地板的对比度比较低,引入了噪声,因此只能检测到球的一部分。把所有帧叠加到单幅图片上可以得到检测到的小球轨迹,如下图。

检测结果暴露了两个问题:

  1. 检测得到的区域中心与球的中心不完全重合,定位球的位置的时候存在误差;
  2. 并不是时刻都能检测到球的位置,比如当球被箱子遮挡的时候。

上述两个问题可以通过卡尔曼滤波来解决。

2.3 使用卡尔曼滤波器跟踪单个目标

函数trackSingleObject 展示了如何实现上述功能,包括:

  1. 使用configureKalmanFilter创建卡尔曼滤波器;
  2. 使用预测和矫正的方法消除跟踪系统中存在的误差;
  3. 当小球被遮挡时,使用预测方法估计小球的位置。

使用configureKalmanFilter可以简化卡尔曼滤波器构造的过程。trackSingleObject 函数中还包含了一些内嵌函数,用于实现部分功能。下面的全局变量用于在主函数和各个嵌套函数中传递数据。

frame            = [];  % A video frame
detectedLocation = [];  % The detected location
trackedLocation  = [];  % The tracked location
label            =
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值