协方差矩阵
为了后续能更好的说明多维向量的卡方分布,有必要先简单介绍下协方差矩阵。
方差和协方差的定义
在统计学中,方差是用来度量单个随机变量的离散程度,而协方差则一般用来刻画两个随机变量的相似程度,其中,方差的计算公式为
σx2=n−11i=1∑n(xi−xˉ)2
在此基础上,协方差的计算公式被定义为
σ(x,y)=n−11i=1∑n(xi−xˉ)(yi−yˉ)
在公式中,符号
xˉ,
yˉ分别表示两个随机变量所对应的观测样本均值,据此,我们发现:方差
σx2 可视作随机变量
x 关于其自身的协方差
σ(x,x) .
对于
d维向量,为了表明向量任意两个维度之间的相似程度(协方差),我们定义协方差矩阵
Σ=⎣⎢⎡σ(x1,x1)⋮σ(xd,x1)⋯⋱⋯σ(x1,xd)⋮σ(xd,xd)⎦⎥⎤∈Rd×d
特别地,若协方差矩阵为对角阵,则说明任意两个维度的变量相互独立。
卡方分布
若n个相互独立的随机变量ξ₁,ξ₂,…,ξn ,均服从标准正态分布(也称独立同分布于标准正态分布),则这n个服从标准正态分布的随机变量的平方和构成一新的随机变量,其分布规律称为卡方分布(chi-square distribution)
ORB-SLAM中的卡方分布
误差
就特征点法的视觉SLAM而言,一般会计算重投影误差。具体而言,记
u 为特征点的2D位置,
uˉ 为由地图点投影到图像上的2D位置。重投影误差为
e=u−u
重投影误差服从高斯分布
e∼N(0,Σ)
其中,协方差
Σ一般根据特征点提取的金字塔层级确定。具体的,记提取ORB特征时,图像金字塔的每层缩小尺度为
s (ORB-SLAM中为1.2)。在ORB-SLAM中假设第0层的标准差为
p 个pixel (ORB-SLAM中设为了1个pixel);那么,一个在金字塔第
n层提取的特征的重投影误差的协方差为
Σ=(sn×p)2[1001]
误差向量
e的第一维表示投影在
x轴方向的误差,第一维表示投影在
y轴方向的误差, 根据协方差矩阵可以看出,我们认为在
x轴和
y方向上的误差是独立的,且服从均值为0,方差为对角线元素的高斯分布。此方差与特征点所在金字塔层数有关,层数越高,方差越大。因为层数越高,则产生一个像素误差所造成的不确定性越大。所以
e∼N(0,Σ)
参照视觉SLAM十四讲P124-P124,对于一个正态分布的向量,我们要最小化马氏距离,故误差项定为
r=eTΣ−1e
利用协方差加权,起到了归一化的作用。上式,可以变为
r=(Σ−21e)T(Σ−21e)
而
(Σ−21e)∼N(0,I)
为多维标准正太分布。也就是说不同金字塔层提取的特征,计算的重投影误差都被归一化了,或者说去量纲化了,白化了。。。那么,我们只用一个阈值就可以了。
若把
r写为标量形式,则为两个误差随机变量的平方和,且这两个误差随机变量都服从标准正太分布。故
r服从卡方分布
阈值
误差的问题已经解决了,下面的问题是如何选择阈值。
r 可以看做两个独立的服从标准正太分布随机变量的平方和,它服从2个自由度的Chi-squared distribution卡方分布。
记概率分布(累积分布函数)为
α=F(x) 。给定一个
α可以确定一个区间
[0,F−1(α)] 。可以认为,
r 落在这个区间内,则为内点,落在这个区间外则为外点。
F−1(α) 就是我们要找的阈值
x 。
{ 内点 r<x 外点 r⩾x,x=F−1(α)
一般取
α为95%,一个内点只有5%的可能被错误的认为是外点。关于
F−1(α) ,前人已经搞了一个表。根据卡方分布表ORB-SLAM2取
α=95,对应的单目投影为2自由度,因此阈值为5.99;对应的双目投影为3个自由度,因此阈值为7.81。
参考:
- https://zhuanlan.zhihu.com/p/58556978
- https://zhuanlan.zhihu.com/p/37609917