DeepSORT(目标跟踪算法) 卡尔曼滤波 状态向量是如何映射到观测向量(测量向量)的即观测矩阵的构建方式

本文主要是介绍DeepSORT(目标跟踪算法) 卡尔曼滤波 状态向量是如何映射到观测向量(测量向量)的即观测矩阵的构建方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DeepSORT(目标跟踪算法) 卡尔曼滤波 状态向量是如何映射到观测向量(测量向量)的即观测矩阵的构建方式

flyfish
测量向量和观测变量在卡尔曼滤波的上下文中通常是同一个意思。它们都指的是从系统中直接获得的数据,这些数据用于更新系统的状态估计。可以是从传感器或测量设备直接获得的数据。这些数据反映了系统在某一时刻的状态或者实际观测到的值,但通常带有噪声。

状态向量映射到观测向量的过程通过观测矩阵 H \mathbf{H} H 实现。观测矩阵 H \mathbf{H} H 描述了系统状态如何映射到观测值。下面通过一个具体的例子来详细说明这一过程。

构造观测矩阵 H \mathbf{H} H 的步骤包括:

  1. 定义状态变量:明确系统的状态变量。
  2. 定义观测变量:明确系统的观测变量。
  3. 写出观测方程:根据观测变量和状态变量之间的关系写出观测方程。
  4. 构造观测矩阵:根据观测方程提取观测矩阵 H \mathbf{H} H

例子:一维位置和速度的观测

假设我们有一个物体在一维直线上运动,我们希望估计其位置和速度,并且我们可以直接观测到位置,但不能直接观测到速度。

定义状态变量

状态向量定义为:
x k = [ x k v k ] \mathbf{x}_k = \begin{bmatrix} x_k \\ v_k \end{bmatrix} xk=[xkvk]
其中, x k x_k xk 是位置, v k v_k vk 是速度。

观测模型

我们可以直接测量位置 x k x_k xk,但不能直接测量速度 v k v_k vk。因此,观测向量定义为:
z k = [ z k ] \mathbf{z}_k = \begin{bmatrix} z_k \end{bmatrix} zk=[zk]
其中, z k z_k zk 是我们观测到的位置。

观测方程

观测方程描述了观测向量如何由状态向量生成。在这个例子中,观测向量只包含位置,因此观测矩阵 H \mathbf{H} H 为:
z k = H x k + v k \mathbf{z}_k = \mathbf{H} \mathbf{x}_k + \mathbf{v}_k zk=Hxk+vk
其中, v k \mathbf{v}_k vk 是观测噪声。

对于这个例子,观测矩阵 H \mathbf{H} H 是:
H = [ 1 0 ] \mathbf{H} = \begin{bmatrix} 1 & 0 \end{bmatrix} H=[10]

这样,观测方程可以写成:
z k = 1 ⋅ x k + 0 ⋅ v k + v k z_k = 1 \cdot x_k + 0 \cdot v_k + v_k zk=1xk+0vk+vk

即:
z k = x k + v k z_k = x_k + v_k zk=xk+vk

构造观测矩阵 H \mathbf{H} H

通过上面的分析,我们得到了观测矩阵 H \mathbf{H} H
H = [ 1 0 ] \mathbf{H} = \begin{bmatrix} 1 & 0 \end{bmatrix} H=[10]

另一个例子:二维位置和速度的观测

假设我们有一个物体在二维平面上运动,我们希望估计其二维位置和速度,并且我们可以直接观测到位置,但不能直接观测到速度。

定义状态变量

状态向量定义为:
x k = [ x k y k v x , k v y , k ] \mathbf{x}_k = \begin{bmatrix} x_k \\ y_k \\ v_{x,k} \\ v_{y,k} \end{bmatrix} xk= xkykvx,kvy,k
其中, x k x_k xk y k y_k yk 是位置, v x , k v_{x,k} vx,k v y , k v_{y,k} vy,k 是速度。

观测模型

我们可以直接测量位置 x k x_k xk y k y_k yk,但不能直接测量速度 v x , k v_{x,k} vx,k v y , k v_{y,k} vy,k。因此,观测向量定义为:
z k = [ z x , k z y , k ] \mathbf{z}_k = \begin{bmatrix} z_{x,k} \\ z_{y,k} \end{bmatrix} zk=[zx,kzy,k]
其中, z x , k z_{x,k} zx,k z y , k z_{y,k} zy,k 是我们观测到的位置。

观测方程

观测方程描述了观测向量如何由状态向量生成。在这个例子中,观测向量只包含位置,因此观测矩阵 H \mathbf{H} H 为:
z k = H x k + v k \mathbf{z}_k = \mathbf{H} \mathbf{x}_k + \mathbf{v}_k zk=Hxk+vk
其中, v k \mathbf{v}_k vk 是观测噪声。

对于这个例子,观测矩阵 H \mathbf{H} H 是:
H = [ 1 0 0 0 0 1 0 0 ] \mathbf{H} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix} H=[10010000]

这样,观测方程可以写成:
[ z x , k z y , k ] = [ 1 0 0 0 0 1 0 0 ] [ x k y k v x , k v y , k ] + [ v x , k v y , k ] \begin{bmatrix} z_{x,k} \\ z_{y,k} \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} x_k \\ y_k \\ v_{x,k} \\ v_{y,k} \end{bmatrix} + \begin{bmatrix} v_{x,k} \\ v_{y,k} \end{bmatrix} [zx,kzy,k]=[10010000] xkykvx,kvy,k +[vx,kvy,k]

即:
[ z x , k z y , k ] = [ x k y k ] + [ v x , k v y , k ] \begin{bmatrix} z_{x,k} \\ z_{y,k} \end{bmatrix} = \begin{bmatrix} x_k \\ y_k \end{bmatrix} + \begin{bmatrix} v_{x,k} \\ v_{y,k} \end{bmatrix} [zx,kzy,k]=[xkyk]+[vx,kvy,k]

构造观测矩阵 H \mathbf{H} H

通过上面的分析,我们得到了观测矩阵 H \mathbf{H} H
H = [ 1 0 0 0 0 1 0 0 ] \mathbf{H} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix} H=[10010000]

测量向量(Measurement Vector)

测量向量包含实际观测或测量得到的数据。它通常是状态向量的一部分或线性变换。

  • 记作 z k \mathbf{z}_k zk,反映了系统在时间 k k k 的观测数据。

观测矩阵(Observation Matrix)

观测矩阵将状态向量映射到测量向量,表示从状态向量到测量向量的关系。它定义了哪些状态变量是可观测的以及如何被观测。

  • 记作 H k \mathbf{H}_k Hk,用于从状态向量中提取测量向量:
    z k = H k x k + v k \mathbf{z}_k = \mathbf{H}_k \mathbf{x}_k + \mathbf{v}_k zk=Hkxk+vk

关系与应用

  • 测量向量与观测矩阵:观测矩阵 H k \mathbf{H}_k Hk 描述了如何从状态向量 x k \mathbf{x}_k xk 中提取测量向量 z k \mathbf{z}_k zk。例如,如果我们只能测量位置而不能直接测量速度,那么观测矩阵可能是: H k = [ 1 0 ] \mathbf{H}_k = \begin{bmatrix} 1 & 0 \end{bmatrix} Hk=[10]

例子

假设我们要跟踪一个在平面上运动的物体,其状态包括位置和速度:

  • 状态向量 x k \mathbf{x}_k xk: x k = [ x k y k x ˙ k y ˙ k ] \mathbf{x}_k = \begin{bmatrix} x_k \\ y_k \\ \dot{x}_k \\ \dot{y}_k \end{bmatrix} xk= xkykx˙ky˙k 这里 x k x_k xk y k y_k yk 是位置, x ˙ k \dot{x}_k x˙k y ˙ k \dot{y}_k y˙k 是速度。
  • 状态转移矩阵 A k \mathbf{A}_k Ak: A k = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] \mathbf{A}_k = \begin{bmatrix} 1 & 0 & \Delta t & 0 \\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} Ak= 10000100Δt0100Δt01 这表示位置随时间步长 Δ t \Delta t Δt 变化。
  • 测量向量 z k \mathbf{z}_k zk: z k = [ z x k z y k ] \mathbf{z}_k = \begin{bmatrix} z_{x_k} \\ z_{y_k} \end{bmatrix} zk=[zxkzyk]这里 z x k z_{x_k} zxk z y k z_{y_k} zyk 是测量得到的位置。
  • 观测矩阵 H k \mathbf{H}_k Hk: H k = [ 1 0 0 0 0 1 0 0 ] \mathbf{H}_k = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix} Hk=[10010000]这表示我们只测量位置,而速度不可测。

在卡尔曼滤波中,预测步骤利用状态转移矩阵和控制输入预测系统的下一个状态。具体步骤如下:

测量向量通过观测矩阵可以得到预测测量值。这一过程是将状态向量映射到测量空间的关键步骤,用于比较实际测量值和预测测量值,从而更新状态估计。观测矩阵和测量残差一起在卡尔曼滤波器中发挥作用,使得状态估计更加准确和可靠。

观测矩阵的作用

观测矩阵(Observation Matrix)描述了状态向量与测量向量之间的关系。它将状态向量映射到测量空间,使得可以从状态向量中提取出测量向量。

测量向量与预测测量值

假设系统的状态向量为 x k \mathbf{x}_k xk,测量向量为 z k \mathbf{z}_k zk,观测矩阵为 H k \mathbf{H}_k Hk。观测矩阵将状态向量映射到测量空间,得到预测测量值(或估计测量值) z ^ k \hat{\mathbf{z}}_k z^k
z ^ k = H k x k \hat{\mathbf{z}}_k = \mathbf{H}_k \mathbf{x}_k z^k=Hkxk

具体步骤

  1. 预测步骤:利用状态转移矩阵和控制输入预测下一时刻的状态向量 x ^ k ∣ k − 1 \hat{\mathbf{x}}_{k|k-1} x^kk1
  2. 计算预测测量值:利用观测矩阵 H k \mathbf{H}_k Hk 将预测状态向量 x ^ k ∣ k − 1 \hat{\mathbf{x}}_{k|k-1} x^kk1 转换为预测测量值 z ^ k \hat{\mathbf{z}}_k z^k
    z ^ k = H k x ^ k ∣ k − 1 \hat{\mathbf{z}}_k = \mathbf{H}_k \hat{\mathbf{x}}_{k|k-1} z^k=Hkx^kk1
  3. 更新步骤:比较预测测量值 z ^ k \hat{\mathbf{z}}_k z^k 和实际测量值 z k \mathbf{z}_k zk,计算测量残差 y k \mathbf{y}_k yk,并用它来更新状态向量和误差协方差矩阵。

例子

假设我们跟踪一个物体,其状态向量包括位置和速度:
x k = [ x k y k x ˙ k y ˙ k ] \mathbf{x}_k = \begin{bmatrix} x_k \\ y_k \\ \dot{x}_k \\ \dot{y}_k \end{bmatrix} xk= xkykx˙ky˙k
假设我们只能测量位置,而不能直接测量速度,观测矩阵可以表示为:
H k = [ 1 0 0 0 0 1 0 0 ] \mathbf{H}_k = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix} Hk=[10010000]
假设在时间步长 k k k 的预测状态向量为:
x ^ k ∣ k − 1 = [ 10 15 1 − 1 ] \hat{\mathbf{x}}_{k|k-1} = \begin{bmatrix} 10 \\ 15 \\ 1 \\ -1 \end{bmatrix} x^kk1= 101511
观测矩阵将状态向量映射到测量空间,得到预测测量值:
z ^ k = H k x ^ k ∣ k − 1 = [ 1 0 0 0 0 1 0 0 ] [ 10 15 1 − 1 ] = [ 10 15 ] \hat{\mathbf{z}}_k = \mathbf{H}_k \hat{\mathbf{x}}_{k|k-1} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} 10 \\ 15 \\ 1 \\ -1 \end{bmatrix} = \begin{bmatrix} 10 \\ 15 \end{bmatrix} z^k=Hkx^kk1=[10010000] 101511 =[1015]

测量残差和更新

实际测量值可能为:
z k = [ 11 14 ] \mathbf{z}_k = \begin{bmatrix} 11 \\ 14 \end{bmatrix} zk=[1114]
测量残差(或创新)为:
y k = z k − z ^ k = [ 11 14 ] − [ 10 15 ] = [ 1 − 1 ] \mathbf{y}_k = \mathbf{z}_k - \hat{\mathbf{z}}_k = \begin{bmatrix} 11 \\ 14 \end{bmatrix} - \begin{bmatrix} 10 \\ 15 \end{bmatrix} = \begin{bmatrix} 1 \\ -1 \end{bmatrix} yk=zkz^k=[1114][1015]=[11]
测量残差用于更新预测状态,使其更接近实际测量值。更新后的状态向量和误差协方差矩阵通过卡尔曼增益 K k \mathbf{K}_k Kk 进行修正:
x ^ k ∣ k = x ^ k ∣ k − 1 + K k y k \hat{\mathbf{x}}_{k|k} = \hat{\mathbf{x}}_{k|k-1} + \mathbf{K}_k \mathbf{y}_k x^kk=x^kk1+Kkyk
P k ∣ k = ( I − K k H k ) P k ∣ k − 1 \mathbf{P}_{k|k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}_{k|k-1} Pkk=(IKkHk)Pkk1

这篇关于DeepSORT(目标跟踪算法) 卡尔曼滤波 状态向量是如何映射到观测向量(测量向量)的即观测矩阵的构建方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058435

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_