1. 协方差矩阵
在统计学中,方差是用来度量单个随机变量的离散程度,而协方差则一般用来刻画两个随机变量的相似程度. 其中,方差的计算公式为
其中,n 表示样本量,符号
表示观测样本的均值。
在此基础上,协方差的计算公式被定义为
在公式中,符号
,
分别表示两个随机变量所对应的观测样本均值,据此,我们发现:方差
可视作随机变量
关于其自身的协方差 .
2. 信息矩阵和协方差矩阵
1:运动方程有协方差矩阵R,观测方程有协方差矩阵Q。它们表示的意义是,到当前时刻t为止,所有测量的样本的协方差矩阵,用来衡量本次测量的不确定性。
2:信息矩阵是协方差矩阵的逆,用来表示本次测量的可靠性,即不确定越小,则可靠性就越大。
3:因此,公式推导里出现的相邻两个状态之间的协方差矩阵,实际上是到当前状态为止,之前所有样本的协方差矩阵。也就是说协方差矩阵随着样本的增加在不断的更新。
3. 协方差矩阵和信息矩阵在SLAM中的应用
首先,ORB是没有尺度不变性的,opencv中和orbslam中都是通过建立图像金字塔,来实现特征点的尺度不变性。通过设置一个比例因子scaleFactor(opencv和orbslam设置的都是1.2)和金字塔的层数nlevels(opencv和orbslam设置的都是8),将原图像按比例因子缩放成nlevels幅图像,缩放后的图像为:I’= I/scaleFactor^k (k=1,2,…, nlevels),nlevels幅不同比例的图像提取特征点总和作为当前帧的特征点。
那究竟什么是尺度不变性呢?
为了实现尺度不变性,需要给特征加上尺度因子。在进行特征描述的时候,将尺度统一就可以实现尺度不变性了。所谓的旋转不变性和尺度不变性的原理,就是我们在描述一个特征之前,将两张图像都变换到同一个方向和同一个尺度上,然后再在这个统一标准上来描述这个特征。从而实现了尺度不变性。
然后,贴一下论文中对信息矩阵的表述,也就是信息矩阵是协方差矩阵的逆:
通过看源代码能找到,论文里面的参数σ^2在程序里面对应的实际是mvLevelSigma2[i],而σ对应的是mvScaleFactor[i],代码如下:
for(int i=1; i<nlevels; i++)
{
mvScaleFactor[i]=mvScaleFactor[i-1]*scaleFactor;
mvLevelSigma2[i]=mvScaleFactor[i]*mvScaleFactor[i];
}
scaleFactor是尺度因子1.2,也就是第0层σ=1,第一层σ=1.2,第二层σ=1.2^2......,这样建立不同尺度下的图像,σ越大对应的尺度越大,现在的信息矩阵取的是σ^2的逆,也就是除以相应的尺度因子,将在不同层上提取的特征统一到原始尺度(第0层),这样计算出来的每个误差项才都对应统一的尺度,不然不同尺度上的误差怎么加到一起呢?
另外,因为是最小二乘计算误差,误差项取平方,所以误差项的权重(信息矩阵)也要对应σ的平方。
如有疑问,欢迎交流: wx: baobaohaha_ 欢迎对SLAM有兴趣的小伙伴一起交流学习~~
REF:
1. 如何直观理解协方差矩阵
3. OrbSLAM的Optimizer函数用到的信息矩阵如何理解
4. SLAM优化中信息矩阵
5. PCA中的协方差
6. 拓展学习: 高斯分布与边缘化