目标跟踪的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. C#中时间的Ticks属性

    C#中时间的Ticks属性是一个很大的长整数,单位是 100 毫微秒.表示自 0001 年 1 月 1 日午夜 12:00:00 以来已经过的时间的以 100 毫微秒为间隔的间隔数,已经说得很清楚了, ...

  2. Redis慢查询,redis-cli,redis-benchmark,info

    一.慢查询: 1.慢查询的作用:通过慢查询分析,找到有问题的命令进行优化. 2.慢查询的redis的配置参数: slowlog-log-slower-than 慢查询预设阈值(单位是微秒1秒=1000 ...

  3. PAT 天梯赛 L1-006. 连续因子 【循环】

    题目链接 https://www.patest.cn/contests/gplt/L1-006 思路 输出的连续因子 的乘积 也要是这个数的因子 就每个数先找它的单因子 然后每个单因子往上一个一个遍历 ...

  4. java 分页工具类

    //13年写的,今天(17)拷贝到博客园 package com.sicdt.sicsign.web.utils; import java.io.Serializable; import java.u ...

  5. vue引入bootstrap.min.css报错:Cannot find module "./assets/css/bootstrap.min.css"

    问题如下图: 明明文件就在那里,就是报错说找不到模板,然后我就用了网上的方法,重新建立了一个项目,请参考如下: http://blog.csdn.net/ansu2009/article/detail ...

  6. php数组函数-array_keys()

    array_keys()函数返回包含数组中所有键名的一个新数组 如果提供了第二个参数,则返回键值为该值得键名 如果strict参数指定为true,则php会使用全等(===)来严格检查键值的 数据类型 ...

  7. Java基础面试集合

    1.面向对象的特征有哪些方面? 抽象 封装 继承 多态,多态性是指允许不同子类型的对象对同一消息作出不同的响应.简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情.多态性分为编译时的多态性和 ...

  8. OC_内存管理

      引言:      1.OC中的对象都是分配在堆中的                声明对象的格式:                     Person *person = [Person new ...

  9. Python面向对象编程高级特性

    ***这里还是根据网上资料,主要是廖雪峰老师的教程学习的笔记,主要介绍python面向对象的高级特性,笔记不全,只是记录自己觉得容易出错的地方*** 1.python作为一种动态语言,他的动态绑定机制 ...

  10. tensorFlow 神经网络2

    learnrate 太大容易跑飞,设置激活函数 可以一定程度上增加learnrate,不跑飞 self.saver = tf.train.Saver() 和 self.init_variable = ...