目标跟踪的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. Objective-C 继承和多态

    学习Java我们知道类有三大特征,封装,继承,多态.而在Objective-C中也有继承的概念,今天就来看看Objective-C中的继承和多态. 首先,我们来看看示例代码: //Animal.h # ...

  2. Kattis - register 【水】

    题意 就是 有一堆容器,然后可以执行加的操作,每个容量是 2, 3, 5, 7, 11, 13, 17, 19 然后 有进位 比如第一个 容器,到2了,就会重置为0,然后 下一个容器+ 1, 但是要保 ...

  3. asp.net,缓存Cache

    缓存Cache: >直接使用Cache["content"],缓存与Session不同,所有用户都可以共享.永不过期,由服务器自己维护,当内存不够时,会将老的缓存释放掉. & ...

  4. Java技术路线

    1.计算机基础: 1.1数据机构基础: 主要学习: 1.向量,链表,栈,队列和堆,词典.熟悉 2.树,二叉搜索树.熟悉 3.图,有向图,无向图,基本概念 4.二叉搜索A,B,C类熟练,9大排序熟悉. ...

  5. python中初始化实例属性

    虽然我们可以自由地给一个实例绑定各种属性,但是,现实世界中,一种类型的实例应该拥有相同名字的属性.例如,Person类应该在创建的时候就拥有 name.gender 和 birth 属性,怎么办? 在 ...

  6. DNS 主从同步配置

    DNS 主从同步配置 主从同步:主每次修改配置文件需要修改一下序列号,主从同步主要 看序列号. 从DNS:从是可以单独修改,主从不会报错.但从修改后,主端同步给从后 从端修改数据会丢失 主从原理:从会 ...

  7. 2020年将热门的8大IT职业领域

    近日,外媒梳理了未来5年内,也是就是2020年仍将受到热捧的八大科技领域,为IT从业者如何做好长远规划.有针对性地培养自身技能.又不偏离热门岗位提供了参考.(图片来自网易) 2020年将热门的8大IT ...

  8. .NET及JAVA 中如何使用代码启动程序

    .NET 中: System.Diagnostics.Process.Start("应用程序");    JAVA中: ProcessBuilder pb=new ProcessB ...

  9. Classloader机制

    1.概述? 类加载器:负责.class文件加载到内存中,并为之生成对应的Class对象,也就是字节码对象.这样就可以使用这个类中的成员变量和方法了.而被加载到内存中的class文件就会变成class对 ...

  10. HTTP 指纹识别v0.1

    // Winhttp.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #include ...