目标跟踪的kalman滤波器介绍


  Kalman滤波器是通过前一状态预测当前状态,并使用当前观测状态进行校正,从而保证输出状态平稳变化,可有效抵抗观测误差。因此在运动目标跟踪中也被广泛使用。在视频处理的运动目标跟踪里,每个目标的状态可表示为(x,y,w,h),x和y表示目标位置,w和h表示目标宽高。一般地认为目标的宽高是不变的,而其运动速度是匀速,那么目标的状态向量就应该扩展为(x,y,w,h,dx,dy),其中dx和dy是目标当前时刻的速度。通过kalman滤波器来估计每个时刻目标状态的大致过程为:

  对视频进行运动目标检测,通过简单匹配方法来给出目标的第一个和第二个状态,从第三个状态开始,就先使用kalman滤波器预测出当前状态,再用当前帧图像的检测结果作为观测值输入给kalman滤波器,得到的校正结果就被认为是目标在当前帧的真实状态。

有何问题?


  上面是大部分的做法,包括opencv都是如此实现的。但是,上面所述的使用方法也存在一定的问题。通常的监控场景都存在景深,一般而言,相机俯角不会太大(通常小于30度),那么在视频中同一个人在近处会比远处大很多,同样的其速度也会大很多(这里也假设目标真实世界中是匀速运动)。比如近端1个像素代表5mm,那么在远端则可能代表10mm,那人的大小和速度在近端都要大1倍。这样表现出来的现象就是对从近向远运动的目标,其输出的大小比实际大小大,位置会稍微超前;反之,从远向近运动的目标的输出状态大小则比实际大小小,位置会滞后。

如何解决?


  通常见过一种做法,是把目标状态向量扩展为(x,y,w,h,dx,dy,ax,ay,dw,dh),其中ax,ay表示目标加速度,dw,dh表示目标大小的变化速度,相当于假定了目标在视频中是匀变速运动,且其宽高也在匀速变化。但是实际测试来看,该做法效果一般,并不能有效解决上述问题,目前原因不是很明确,估计是由于成像景深并不能满足上面的假设(即目标匀变速运动,宽高匀速变化这一假设)。

  另一种有效的方法是把图像中的目标状态转换到真实状态,即是从图像坐标系映射到世界坐标系。在视频中目标任意一个确定状态(x,y,w,h)都可以唯一对应到真实世界中的(x1,y1,w1,h1),那么在真实世界中,目标通常是满足宽高不变,匀速运动的假设条件的,那么就可以使用kalman滤波器,最终只要将结构反映射回图像坐标系即可。  

  当然,需要做这样的映射,就必须要确定相机的架设参数,包括高度,俯角和焦距。架设固定后,高度可直接给出,焦距和俯角可以在此基础上通过视频标定计算出。另外一种情况是双目/多目成像,有2个或多个相机同时成像就可以直接实现目标在坐标系的转换,这一点是当时在几篇论文上看到的,实际没这么做过。

  对于上面的视频标定,有时候可能显得过于麻烦,且计算也没那么方便,这时我们可以退一步来考虑,基于前面的假设,可以确定只要目标在同一种度量下,目标的大小和速度也会保持不变,那就可以简单点把图像中的目标都映射到图像同一位置后再进行kalman滤波,做法和映射到世界坐标系一样,但是该方法的标定就更为简单了,只要分别标出一个近景远景框即可,完全不需要理会相机架设参数。

  当时的实验结果来看,采用近景远景框标定,只要标定准确,上述做法能完全解决直接在图像中使用kalman滤波的问题。

运动目标跟踪中kalman滤波器的使用的更多相关文章

  1. 【计算机视觉】基于Kalman滤波器的进行物体的跟踪

    预估器 我们希望能够最大限度地使用測量结果来预计移动物体的运动. 所以,多个測量的累积能够让我们检測出不受噪声影响的部分观測轨迹. 一个关键的附加要素即此移动物体运动的模型. 有了这个模型,我们不仅能 ...

  2. Kalman滤波器原理和实现

    Kalman滤波器原理和实现 kalman filter Kalman滤波器的直观理解[1] 假设我们要测量一个房间下一刻钟的温度.据经验判断,房间内的温度不可能短时大幅度变化,也就是说可以依经验认为 ...

  3. Video Target Tracking Based on Online Learning—深度学习在目标跟踪中的应用

    摘要 近年来,深度学习方法在物体跟踪领域有不少成功应用,并逐渐在性能上超越传统方法.本文先对现有基于深度学习的目标跟踪算法进行了分类梳理,后续会分篇对各个算法进行详细描述. 看上方给出的3张图片,它们 ...

  4. Kalman滤波器从原理到实现

    Kalman滤波器的历史渊源 We are like dwarfs on the shoulders of giants, by whose grace we see farther than the ...

  5. 终于成功仿了一次Kalman滤波器

    终于成功仿了一次Kalman滤波器 首先是测试了从网上down的一段代码 % KALMANF - updates a system state vector estimate based upon a ...

  6. 关于视觉跟踪中评价标准的相关记录(The Evaluation of Visual Tracking Results on OTB-100 Dataset)

    关于视觉跟踪中评价标准的相关记录(The Evaluation of Visual Tracking Results on OTB-100 Dataset) 2018-01-22  21:49:17 ...

  7. 运动目标检测中基于HSV空间的阴影去除算法

    在运动目标检测中,常常会出现由于光线被遮挡,或场景其他物体的遮挡,在目标附近或场景里出现阴影,阴影的出现对后期目标的正确分割与处理带了很大的不便.如今,国内外已有不少文献来研究这个问题,并且提出了各种 ...

  8. CVE-2020-0668-Windows服务跟踪中的普通特权升级错误

    CVE-2020-0668-Windows服务跟踪中的普通特权升级错误 在这里中,我将讨论在Windows Service跟踪中发现的任意文件移动漏洞.从我的测试来看,它影响了从Vista到10的所有 ...

  9. Opencv-Python项目(1) | 基于meanshiftT算法的运动目标跟踪技术学习

    目标跟踪(object tracking)就是在连续的视频序列中,建立所要跟踪物体的位置关系,得到物体完整的运动轨迹. 目标跟踪分为单目标跟踪和多目标跟踪.本文如无特别指出,均指单目标跟踪. 通常的做 ...

随机推荐

  1. requirejs源码分析: config中shim

    shim处理的源码: //Merge shim                 if (cfg.shim) {                     eachProp(cfg.shim, funct ...

  2. LeetCode:学生的出勤记录|【551】

    LeetCode:学生的出勤记录|[551] 题目描述 给定一个字符串来代表一个学生的出勤纪录,这个纪录仅包含以下三个字符: 'A' : Absent,缺勤 'L' : Late,迟到 'P' : P ...

  3. 吐槽 坑爹的MySQL安装路径选择

    一般再windows下面安装MySQL我们都会选择msi安装模式,然而安装最新版的MySQL(mysql-installer-community-5.7.11.0.msi 下载地址)发现MySQL默认 ...

  4. iOS获取某个日期后n个月的日期

    一.给一个时间,给一个数,正数是以后n个月,负数是前n个月: -(NSDate *)getPriousorLaterDateFromDate:(NSDate *)date withMonth:(NSI ...

  5. nf_conntrack之解决方案

    1.现象 在/var/log/message中出现以下信息 Dec 8 11:22:29 product08 kernel: nf_conntrack: table full, dropping pa ...

  6. MySQL索引操作命令详解

    创建索引: MySql创建索引的语法如下: CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON table_ ...

  7. SpringMVC实现AJax以及RestFull风格

    RestFull风格就是url路径中不能出现?不能带参数,如https://www.baidu.com/user/item/1234这个格式,也叫url资源定位 1.需要在web.xml中开启put, ...

  8. 泛型学习第一天:List与IList的区别 (三)

    已经有很多人讨论过IList和List的区别,恩,我也赞同其中的一些观点,其实他们二者也是有优有劣的,看你着重用在哪个方面,先贴一下我赞同的意见,基本上也都是网友们总结的. 首先IList 泛型接口是 ...

  9. python使用笔记

    修改文件模板,支持中文. File -> Settings -> Editor -> File and Code templates -> python Scropt 在里面加 ...

  10. kvm 客户机系统的代码是如何运行的

    一个普通的 Linux 内核有两种执行模式:内核模式(Kenerl)和用户模式 (User).为了支持带有虚拟化功能的 CPU,KVM 向 Linux 内核增加了第三种模式即客户机模式(Guest), ...