因需要学习卡尔曼和粒子滤波,转载了本篇文章!!
转载地址:http://skpsun.blog.163.com/blog/static/2760055201010251210841/
Kalman Filter建立在高斯模型上的,这是说目标的model,即状态噪音的概率密度函数(state probability density)和观察模型(observation model)是高斯分布。Kalman的数学基础是指,将两个高斯模型结合起来时,将得到一个新的高斯模型,并且新高斯模型的参数(均值和方差)可完全由原来两个高斯模型的参数计算得到。应用在时间序列中,就是说,知道了t-1时刻和t时刻state噪音的分布(符合高斯模型),就可算出t+1刻state的分布。从而实现迭代运算。
同时,Kalman Filter又是线性的,t时刻的state可以由t-1时刻的state经过一个矩阵相乘得到。
前面提到,噪音是高斯白噪音,白噪音是指其分布和时间不相关。噪音分为两个部分,状态量中的噪音和观测量中的噪音。即分别为下述式(1)的W(t)和和式(2)中V(k)。
所以在高斯和线性两个假设之下,我们既可以得到state的取值(由线性假设得到),又可以得到state取值的概率密度(由高斯假设得到),这时就可以通过迭代实现对系统每一时刻状态的预测。再结合(assimilate)上观测值,对预测结果纠正,从而实现一个完整的跟随预测系统。也就是说,卡尔曼滤波器就是一个信息融合器,把我们不准确的预测结果和不准确的测量结果融合在一起,得到一个估计结果。
以上过程可由一个线性随机微分方程(Linear Stochastic Difference equation)来描述:
X(t)=F X(t-1)+B U(t)+W(t) -------------------------式(1)
再加上系统的测量值:
Z(t)=H X(t)+V(t) ------------------------------------式(2)
上 两式子中,X(k)是k时刻的系统状态,U(k)是k时刻对系统的控制量。F(dynamic model或transition model)和B(control model)是系统参数,对于state vector维度高于一的系统,他们为矩阵。Z(k)是k时刻的测量值,H 是测量系统的参数,对于多测量系统,H为矩阵。W(k)和V(k)分别表示过程和测量的噪声。他们被假设成高斯白噪声(White Gaussian Noise),他们的covariance 分别是Q,R。这里要注意区分状态量(state)X(t)和观测量(measurement)Z(t)的区别。比如若state是追踪目标的图像位置(x,y)以及速度v,即state vector是一个三维向量,而观测时可能只能对目标的位置进行直接观测,即观测量是(x,y)这样一个二维向量。这两者的不同,体现在矩阵F和H上。
Kalman Filter中的高斯和线性假设有时并不能满足实际情况,因为高斯模型是单峰的(uni-modal)。比如当一个运动目标被遮挡后,我们不知道它将在遮挡物的后面做什么运动,是继续前进,或是停下,还是转向或后退。这种情况下,Kalman Filter只能给出一个位置的预测,至多加大这个预测的不确定性(即增大协方差矩阵,或,若state是单维度时的方差)。这种情况下,预测位置的不确定噪音事实上已不是高斯模型,它将具有多个峰值(multi-modal)。而且,这种噪音常常无法解析表达。这就引入了Particle Filter。
Particle Filter是基于蒙特卡洛方法(Monte Carlo Method),简言之就是用点来表达概率密度函数。点密集的地方,概率密度就大。在时间序列中,就是时间序列蒙特卡洛(Sequential Monte Carlo)。所以Particle Filter在机器视觉中的应用,称为CONDENSATION(Conditional Density Propagation),它和Bootstrap Filter一样,同属于Sequential Monte Carlo范畴。
具体实施上,PF对state的更新不再采用KF中的高斯模型更新,而是采用factored sampling方法。简单说就是对t-1时刻的所有Particle,根据每个Particle的概率,重新对他们采样。高概率的Particle将得到高的采样几率,而低概率的Particle对应低的采样几率。这样,高概率Particle将可能被多次采样,而低概率Particle可能就被放弃。这样得到t时刻的Particle。然后将t时刻每一个Particle所对应的测量值结合起来,为t时刻的Particle重新赋以新的概率,以用于t+1时刻新Particle的生成。
所以可以总结, KF和PF相同的是,都分为三个步骤:Prediction,Measurement和Assimilation(或称为correction)。只是每步的实现上不同。
在Prediction阶段,KF利用高斯模型进行预测,而PF采用factored sampling对原Particle重采样。
在Measurement阶段,KF将得到唯一的measurement,而PF将为每一个Particle得到一份measurement。
在Assimilation阶段,KF将由state计算得到的观测值和实际观测值比较结合,得到更新后的系统参数。而PF通过比较 每个Particle所对应的观测值和模型预测值之间的差别,更新每个Particle的概率。
所以,KF和PF最大的不同就在于对状态概率密度函数的表达方式上。KF采用高斯模型,而PF利用用无参数的点来近似。