如何理解ORB-SLAM g2o优化中的卡方分布

协方差矩阵

为了后续能更好的说明多维向量的卡方分布,有必要先简单介绍下协方差矩阵。

方差和协方差的定义

在统计学中,方差是用来度量单个随机变量的离散程度,而协方差则一般用来刻画两个随机变量的相似程度,其中,方差的计算公式为
σ x 2 = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) 2 \sigma_{x}^{2}=\frac{1}{n-1} \sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2} σx2=n11i=1n(xixˉ)2
在此基础上,协方差的计算公式被定义为
σ ( x , y ) = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) \sigma(x, y)=\frac{1}{n-1} \sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)\left(y_{i}-\bar{y}\right) σ(x,y)=n11i=1n(xixˉ)(yiyˉ)
在公式中,符号 x ˉ \bar{x} xˉ, y ˉ \bar{y} yˉ分别表示两个随机变量所对应的观测样本均值,据此,我们发现:方差 σ x 2 \sigma_{x}^{2} σx2 可视作随机变量 x x x 关于其自身的协方差 σ ( x , x ) \sigma(x, x) σ(x,x) .

对于 d d d维向量,为了表明向量任意两个维度之间的相似程度(协方差),我们定义协方差矩阵
Σ = [ σ ( x 1 , x 1 ) ⋯ σ ( x 1 , x d ) ⋮ ⋱ ⋮ σ ( x d , x 1 ) ⋯ σ ( x d , x d ) ] ∈ R d × d \Sigma=\left[\begin{array}{ccc} \sigma\left(x_{1}, x_{1}\right) & \cdots & \sigma\left(x_{1}, x_{d}\right) \\ \vdots & \ddots & \vdots \\ \sigma\left(x_{d}, x_{1}\right) & \cdots & \sigma\left(x_{d}, x_{d}\right) \end{array}\right] \in \mathbb{R}^{d \times d} Σ=σ(x1,x1)σ(xd,x1)σ(x1,xd)σ(xd,xd)Rd×d

特别地,若协方差矩阵为对角阵,则说明任意两个维度的变量相互独立。

卡方分布

若n个相互独立的随机变量ξ₁,ξ₂,…,ξn ,均服从标准正态分布(也称独立同分布于标准正态分布),则这n个服从标准正态分布的随机变量的平方和构成一新的随机变量,其分布规律称为卡方分布(chi-square distribution)

ORB-SLAM中的卡方分布

误差

就特征点法的视觉SLAM而言,一般会计算重投影误差。具体而言,记 u u u 为特征点的2D位置, u ˉ \bar{u} uˉ 为由地图点投影到图像上的2D位置。重投影误差为
e = u − u ‾ \mathbf{e}=\mathbf{u}-\overline{\mathbf{u}} e=uu
重投影误差服从高斯分布
e ∼ N ( 0 , Σ ) \mathbf{e} \sim \mathcal{N}(\mathbf{0}, \mathbf{\Sigma}) eN(0,Σ)
其中,协方差 Σ \mathbf{\Sigma} Σ一般根据特征点提取的金字塔层级确定。具体的,记提取ORB特征时,图像金字塔的每层缩小尺度为 s s s (ORB-SLAM中为1.2)。在ORB-SLAM中假设第0层的标准差为 p p p 个pixel (ORB-SLAM中设为了1个pixel);那么,一个在金字塔第 n n n层提取的特征的重投影误差的协方差为
Σ = ( s n × p ) 2 [ 1 0 0 1 ] \boldsymbol{\Sigma}=\left(s^{n} \times p\right)^{2}\left[\begin{array}{ll} 1 & 0 \\ 0 & 1 \end{array}\right] Σ=(sn×p)2[1001]
误差向量 e e e的第一维表示投影在 x x x轴方向的误差,第一维表示投影在 y y y轴方向的误差, 根据协方差矩阵可以看出,我们认为在 x x x轴和 y y y方向上的误差是独立的,且服从均值为0,方差为对角线元素的高斯分布。此方差与特征点所在金字塔层数有关,层数越高,方差越大。因为层数越高,则产生一个像素误差所造成的不确定性越大。所以
e ∼ N ( 0 , Σ ) \mathbf{e} \sim \mathcal{N}(\mathbf{0}, \mathbf{\Sigma}) eN(0,Σ)
参照视觉SLAM十四讲P124-P124,对于一个正态分布的向量,我们要最小化马氏距离,故误差项定为
r = e T Σ − 1 e r=\mathbf{e}^{T} \mathbf{\Sigma}^{-1} \mathbf{e} r=eTΣ1e
利用协方差加权,起到了归一化的作用。上式,可以变为
r = ( Σ − 1 2 e ) T ( Σ − 1 2 e ) r=\left(\boldsymbol{\Sigma}^{-\frac{1}{2}} \mathbf{e}\right)^{T}\left(\boldsymbol{\Sigma}^{-\frac{1}{2}} \mathbf{e}\right) r=(Σ21e)T(Σ21e)

( Σ − 1 2 e ) ∼ N ( 0 , I ) \left(\boldsymbol{\Sigma}^{-\frac{1}{2}} \mathbf{e}\right) \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) (Σ21e)N(0,I)
为多维标准正太分布。也就是说不同金字塔层提取的特征,计算的重投影误差都被归一化了,或者说去量纲化了,白化了。。。那么,我们只用一个阈值就可以了。
若把 r r r写为标量形式,则为两个误差随机变量的平方和,且这两个误差随机变量都服从标准正太分布。故 r r r服从卡方分布

阈值

误差的问题已经解决了,下面的问题是如何选择阈值。 r r r 可以看做两个独立的服从标准正太分布随机变量的平方和,它服从2个自由度的Chi-squared distribution卡方分布。
记概率分布(累积分布函数)为 α = F ( x ) \alpha=F(x) α=F(x) 。给定一个 α \alpha α可以确定一个区间 [ 0 , F − 1 ( α ) ] \left[0, F^{-1}(\alpha)\right] [0,F1(α)] 。可以认为, r r r 落在这个区间内,则为内点,落在这个区间外则为外点。 F − 1 ( α ) F^{-1}(\alpha) F1(α) 就是我们要找的阈值 x x x
{  内点  r < x  外点  r ⩾ x , x = F − 1 ( α ) \left\{\begin{array}{l} \text { 内点 } r<x \\ \text { 外点 } r \geqslant x \end{array}, x=F^{-1}(\alpha)\right. { 内点 r<x 外点 rx,x=F1(α)
一般取 α \alpha α为95%,一个内点只有5%的可能被错误的认为是外点。关于 F − 1 ( α ) F^{-1}(\alpha) F1(α) ,前人已经搞了一个表。根据卡方分布表ORB-SLAM2取 α = 95 \alpha=95% α=95,对应的单目投影为2自由度,因此阈值为5.99;对应的双目投影为3个自由度,因此阈值为7.81。

参考:

  1. https://zhuanlan.zhihu.com/p/58556978
  2. https://zhuanlan.zhihu.com/p/37609917
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值