ORB-SLAM内的卡方检验

news2024/11/28 12:48:19

ORB-SLAM内的卡方检验

  • 1. 概念
  • 2. 卡方检验的基本思想
  • 3. 卡方检测示例
  • 4. ORB-SLAM2中卡方检测剔除外点的策略
    • 4.1 示例,卡方检验计算置信度得分: CheckFundamental()、CheckHomography()

Reference:

  1. 卡方检验(Chi-square test/Chi-Square Goodness-of-Fit Test)
  2. 卡方检验详解分析与实例

1. 概念

  • 卡方值: χ 2 \chi^2 χ2 值表示观察值与理论值之间的偏离程度。计算这种偏离程度的基本思路如下:

    1. O O O 代表某个类别的观察频数 E E E 代表基于某个假设 H 0 H_0 H0 计算出的期望频数 O O O E E E 之差称为残差;
    2. 残差可以表示某一个类别观察值和理论值的偏离程度,但如果将残差简单相加以表示各类别观察频数与期望频数的差别,则有一定的不足之处。因为残差有正有负,相加后会彼此抵消,综合仍然为 0 0 0,为此可以将残差平方后求和;
    3. 另一方面,残差大小是一个相对概念,相对于期望频数为 10 10 10 时,期望频数为 20 20 20 的残差非常大,但相对于期望频数为 1000 1000 1000 20 20 20 的残差就很小了。考虑到这一点,人们又将残差平方除以期望频数再求和,以估计观察频数与期望频数的差别。

    进行上述操作之后,就得到了常用的 χ 2 \chi^2 χ2 统计量,其计算公式为:
    χ 2 = ∑ ( O − E ) 2 E = ∑ i = 1 k ( O i − E i ) 2 E i = ∑ i = 1 k ( O i − n p i ) 2 n p i ( i = 1 , 2 , 3 , . . . , k ) \chi^{2}=\sum{\frac{(O-E)^{2}}{E}}=\sum_{i=1}^{k}{\frac{(O_{i}-E_{i})^{2}}{E_{i}}}=\sum_{i=1}^{k}{\frac{(O_{i}-n p_{i})^{2}}{n p_{i}}}\quad{\mathrm{(i=1,2,3,...,k)}} χ2=E(OE)2=i=1kEi(OiEi)2=i=1knpi(Oinpi)2(i=1,2,3,...,k)其中, O i O_i Oi i i i 水平的观察频数, E i E_i Ei i i i 水平的期望频数, n n n 为总频数, p i p_i pi i i i 水平的期望概率, i i i 水平的期望频数 E i E_i Ei 等于总频数 n × i n\times i n×i 水平的期望概率 p i p_i pi k k k 为单元格数。当 n n n 比加大时, χ 2 \chi^2 χ2 统计量近似服从 k − 1 k-1 k1(计算 E i E_i Ei 时用到的参数个数)个自由度的卡方分布。

    由卡方的计算公式可知,当观察频数与期望频数完全一致时, χ 2 \chi^2 χ2 值为 0 0 0;观察频数与期望频数越接近,两者之间的差异越小, χ 2 \chi^2 χ2 值越小;反之,观察频数与期望频数差别越大,两者之间的差异越大, χ 2 \chi^2 χ2 值越大。换言之,大的 χ 2 \chi^2 χ2 值表明观察频数远离期望频数,即表明远离假设。小的 χ 2 \chi^2 χ2 值表明观察频数接近期望频数,接近假设。因此, χ 2 \chi^2 χ2 是观察频数与期望频数之间距离的一种度量指标,也是假设成立与否的度量指标。如果 χ 2 \chi^2 χ2 值小,研究者就倾向于不拒绝 H 0 H_0 H0;如果 χ 2 \chi^2 χ2 值大,就倾向于拒绝 H 0 H_0 H0。至于 χ 2 \chi^2 χ2 在每个具体研究中究竟要达到什么程度才能拒绝 H 0 H_0 H0,则要借助于卡方分布求出所对应的 P P P 来确定,这就引出了显著性水平的概念。

  • 显著性水平: 显著性水平是估计总体参数落在某一区间内可能犯错的概率,用 α \alpha α 表示,即当原假设为正确时,却把它滤掉了的概率或风险,通常取 α = 0.05 \alpha=0.05 α=0.05 α = 0.01 \alpha=0.01 α=0.01。这表明当做出接受原假设的决定时,其正确的可能性(概率)为 95 % 95\% 95% 99 % 99\% 99%

2. 卡方检验的基本思想

卡方检验是以 χ 2 \chi^2 χ2 分布为基础的一种常用假设检验方法,它的无效建设 H 0 H_0 H0 是:观察频数与期望频数没有差别。

该检验的基本思想是:首先假设 H 0 H_0 H0 成立,基于此前提计算出 χ 2 \chi^2 χ2 的值,它表示观察值与理论值之间的偏离程度。根据 χ 2 \chi^2 χ2 分布及自由度可以确定在 H 0 H_0 H0 假设成立的情况下获得当前统计量及更极端情况的概率 P P P。如果 P P P 值很小,说明观察值与理论值偏离程度太大,应当拒绝无效假设,表示比较资料之间有显著差异;否则就不能拒绝无效假设,尚不能认为样本所代表的实际情况和理论假设有差别。

根据自由度和显著性水平查询检验统计量临界值,其中纵轴为自由度,横轴为显著性水平阈值。比如检查单应阵的函数,点到点的重投影误差自由度为 2 2 2,在显著性水平为 0.05 0.05 0.05 时通过查表得阈值为 5.99 5.99 5.99
在这里插入图片描述

3. 卡方检测示例

为了验证肺癌与吸烟的关系,我们得到如下数据:

是否肺病患者吸烟不吸烟合计吸烟比例
15816932748%
8231139320%
合计24048072033%

首先假设吸烟与肺癌两者之间没有关系,我们计算期望值(因为上面吸烟的比例为33%,因此在吸烟与肺癌没有关系的时候,肺癌患者吸烟与不吸烟的比例应该是33%,没有得肺癌的吸烟与不吸烟的比例也应该是33%):

是否肺病患者吸烟不吸烟合计吸烟比例
10921832733%
13126239333%
合计24048072033%

带入卡方计算公式:
χ 2 = ( 158 − 109 ) 2 109 + ( 169 − 218 ) 2 218 + ( 82 − 131 ) 2 131 + ( 311 − 262 ) 2 262 = 60.53 \chi^2=\frac{(158-109)^2}{109}+\frac{(169-218)^2}{218}+\frac{(82-131)^2}{131}+\frac{(311-262)^2}{262} =60.53 χ2=109(158109)2+218(169218)2+131(82131)2+262(311262)2=60.53自由度的计算方法,可以简单抽象成:(行数-1)*(列数-1),所以这里的自由度为 1 1 1

通过查表可得自由度为 1 1 1 时,显著性水平为 0.05 0.05 0.05,当卡方值小于 3.84 3.84 3.84 时,可以接受原假设,即变量之间没有相关性。卡方值越小,不相关的概率越大。现在卡方值远大于 3.84 3.84 3.84,说明两者不相关的概率很小,即抽烟与肺癌有关。

4. ORB-SLAM2中卡方检测剔除外点的策略

就特征点法的视觉SLAM而言,一般会计算重投影误差。具体而言,记 u \mathbf{u} u 为特征点的 2 D 2D 2D 位置, u ˉ \bar{\mathbf{u}} uˉ 为由地图点投影到图像上的 2 D 2D 2D 位置。重投影误差为:
e = u − u ˉ \mathbf{e}=\mathbf{u}-\mathbf{\bar{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 0 0 层的标准差为 p p p 个pixel(ORB-SLAM中设为了1个pixel);那么,一个在金字塔第 n n n 层提取的特征的重投影误差的协方差为:
Σ = ( s n × p ) 2 [ 1 0 0 1 ] \boldsymbol{\Sigma}=(s^n\times p)^2\begin{bmatrix}1&0\\ 0&1\end{bmatrix} Σ=(sn×p)2[1001] e = u − u ˉ \mathbf{e}=\mathbf{u}-\mathbf{\bar{u}} e=uuˉ 中的误差是一个 2 2 2 维向量,这里阈值不好设置,就把它变成一个标量,计算向量的内积 r r r(向量元素的平方和)。但是,这又有一个问题,不同金字塔层的特征点都用同一个阈值,是不是不合理呢?于是,在计算内积的时候,利用协方差进行加权(协方差表达了不确定度)。金字塔层级越高特征点提取精度越低,协方差 Σ \mathbf{\Sigma} Σ 越大,那么就有了:
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=(\boldsymbol{\Sigma}^{-\frac{1}{2}}\mathbf{e})^T(\boldsymbol{\Sigma}^{-\frac{1}{2}}\mathbf{e}) r=(Σ21e)T(Σ21e)而:
( Σ − 1 2 e ) ∼ N ( 0 , I ) (\mathbf\Sigma^{-\frac{1}{2}}\mathbf e)\sim\mathcal N(\mathbf0,\mathbf I) (Σ21e)N(0,I)为多维标准正态分布,也就是说不同金字塔层提取的特征,计算的重投影误差都被归一化了,或者说去量纲化了,那么,我们只用一个阈值就可以了。

4.1 示例,卡方检验计算置信度得分: CheckFundamental()、CheckHomography()

根据重投影误差构造统计量 χ 2 \chi^2 χ2,其值越大,观察结果和期望结果之间的差别越显著,某次计算越可能用到了外点:

float Initializer::CheckHomography(const cv::Mat &H21, const cv::Mat &H12, vector<bool> &vbMatchesInliers, float sigma) {
  const int N = mvMatches12.size();

  //取出单应矩阵H各位上的值
  const float h11 = H21.at<float>(0, 0);
  const float h12 = H21.at<float>(0, 1);
  const float h13 = H21.at<float>(0, 2);
  const float h21 = H21.at<float>(1, 0);
  const float h22 = H21.at<float>(1, 1);
  const float h23 = H21.at<float>(1, 2);
  const float h31 = H21.at<float>(2, 0);
  const float h32 = H21.at<float>(2, 1);
  const float h33 = H21.at<float>(2, 2);

  const float h11inv = H12.at<float>(0, 0);
  const float h12inv = H12.at<float>(0, 1);
  const float h13inv = H12.at<float>(0, 2);
  const float h21inv = H12.at<float>(1, 0);
  const float h22inv = H12.at<float>(1, 1);
  const float h23inv = H12.at<float>(1, 2);
  const float h31inv = H12.at<float>(2, 0);
  const float h32inv = H12.at<float>(2, 1);
  const float h33inv = H12.at<float>(2, 2);

  vbMatchesInliers.resize(N);//标记是否是内点
  float score = 0;//置信度得分
  const float th = 5.991;//<---自由度为2(u,v),显著性水平为0.05的卡方分布对应的临界阈值
  const float invSigmaSquare = 1.0 / (sigma * sigma);//信息矩阵,方差平方的倒数

  for (int i = 0; i < N; i++) {//双向投影,计算加权投影误差
    bool bIn = true;

    //step1. 提取特征点对
    const cv::KeyPoint &kp1 = mvKeys1[mvMatches12[i].first];
    const cv::KeyPoint &kp2 = mvKeys2[mvMatches12[i].second];

    const float u1 = kp1.pt.x;
    const float v1 = kp1.pt.y;
    const float u2 = kp2.pt.x;
    const float v2 = kp2.pt.y;

    // Reprojection error in first image
    // x2in1 = H12*x2
    //step2. 计算img2到img1的重投影误差
    const float w2in1inv = 1.0 / (h31inv * u2 + h32inv * v2 + h33inv);
    const float u2in1 = (h11inv * u2 + h12inv * v2 + h13inv) * w2in1inv;
    const float v2in1 = (h21inv * u2 + h22inv * v2 + h23inv) * w2in1inv;
    const float squareDist1 = (u1 - u2in1) * (u1 - u2in1) + (v1 - v2in1) * (v1 - v2in1);
    const float chiSquare1 = squareDist1 * invSigmaSquare;

    //step3. 离群点标记上,非离群点累加计算得分
    if (chiSquare1 > th)
      bIn = false;
    else
      score += th - chiSquare1;

    // Reprojection error in second image
    // x1in2 = H21*x1
    //step4. 计算img1到img2的重投影误差
    const float w1in2inv = 1.0 / (h31 * u1 + h32 * v1 + h33);
    const float u1in2 = (h11 * u1 + h12 * v1 + h13) * w1in2inv;
    const float v1in2 = (h21 * u1 + h22 * v1 + h23) * w1in2inv;
    const float squareDist2 = (u2 - u1in2) * (u2 - u1in2) + (v2 - v1in2) * (v2 - v1in2);
    const float chiSquare2 = squareDist2 * invSigmaSquare;

    //step5. 离群点标记上,非离群点累加计算得分
    if (chiSquare2 > th)
      bIn = false;
    else
      score += th - chiSquare2;

    if (bIn)
      vbMatchesInliers[i] = true;
    else
      vbMatchesInliers[i] = false;
  }

  return score;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/572859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt在复杂问题的回答表现

2023年东南大学论文&#xff1a;Evaluation of ChatGPT as a Question Answering System for Answering Complex Questions 代码库已经无法访问了&#xff1a;https://github.com/tan92hl/Complex-Question-Answering- Evaluation-of-ChatGPT 1.简介 复杂问题的回答&#xff…

ROS学习——在rviz中调用电脑摄像头

一、安装相关软件包 安装uvc camera sudo apt-get install ros-kinetic-uvc-camera安装image相关功能包 sudo apt-get install ros-kinetic-image-* sudo apt-get install ros-kinetic-rqt-image-view 要记得把kinetic换成 你自己的ros版本。 二、启动ros&#xff0c;调用…

我国中央商务区(CBD)的空间重构及发展模式

中央商务区&#xff08;Central Business District&#xff0c;简称为CBD&#xff09;&#xff0c;原始意义为“商业会聚之地”是指一个国家或城市商务活动的主要集中的区域&#xff0c;是汇聚商务服务、金融服务、科技服务、咨询服务、会展服务、文化服务等服务业的集聚区域&a…

科海思针对锂盐溶液/锂电废水除钙镁、除硼、除铊的解决方案

碳酸锂是锂电行业阳极生产中的一个重要原材料&#xff0c;主要用于制造钴酸锂、镍酸锂、锰酸锂等电极材料&#xff0c;在充电锂电池中也用作非水溶液电解质等&#xff0c;具有良好的电化学性能&#xff0c;应用领域还在不断扩大。 工业级碳酸锂主含量&#xff08;Li2CO3&#…

es elasticsearch 八 mapping 映射 、复杂数据类型

目录 Mapping 映射 复杂数据类型 Mapping 映射 精确匹配 必须和对应字段值安全一致才可查出 全文检索 缩写搜索全程、格式转换 大小写 同义词 全文检索核心原理 分词&#xff0c;初步的倒排索引的建立 重建倒排索引 时态转换、重复数的转换、同义词的转换、大小写的转换 …

公文写作素材:工作落实类过渡句50例

1.再美的发展蓝图&#xff0c;如果不能落到实处&#xff0c;都是纸上谈兵&#xff1b;再大的奋进决心&#xff0c;如果没有实际行动&#xff0c;对工作毫无益处。 2.会议提出的任务再明确不落实只是纸上谈兵&#xff0c;会议出台的措施再可行不担当只是空中楼阁。 3.既要有不…

buildroot简介

网址 官网&#xff1a;https://buildroot.org/ 下载地址&#xff1a;https://buildroot.org/download.html 使用 解压后&#xff0c;执行make menuconfig Target options &#xff08;目标板配置&#xff09; Target Architecture&#xff1a; 目标架构&#…

SpringCloud微服务踩坑系列-java.lang.IllegalStateException

异常如下&#xff1a; 2023-05-24 08:47:10.764 ERROR 118400 --- [nio-8084-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exceptio…

1978-2020年337个城市的原材料储备量数据

铜、钢、铝、木材、水泥等原材料是城市建设和经济发展的必备物质&#xff01;厘清原材料的储备情况对于经济发展、资源可持续利用等都具有重要意义&#xff01; 我们发现在Springer Nature平台上分享有1978-2020年我国337个城市的原材料储备量数据&#xff01;该数据包括了337…

《Spring Guides系列学习》guide16 - guide20

要想全面快速学习Spring的内容&#xff0c;最好的方法肯定是先去Spring官网去查阅文档&#xff0c;在Spring官网中找到了适合新手了解的官网Guides&#xff0c;一共68篇&#xff0c;打算全部过一遍&#xff0c;能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

【微博-计算Cell子控件的frame Objective-C语言】

一、计算Cell子控件的frame 1.来,看一下,刚才我们已经做到把这个模型设置给自定义的cell了吧, 那么,在这个自定义Cell里面呢,我们是不是要开始设置数据了, 设置数据,我们,设置数据,其实很简单,就是把我们这里边的每一个控件,对应的值,从模型里面取出来,给了它,…

挂耳式耳机品牌排行榜,看看谁被推荐上榜

下班路上就想放空自己刷会儿视频&#xff0c;但是马路、地铁还有公交上都会有嘈杂的声音影响&#xff0c;如果佩戴入耳式耳机放大声音不仅会过度屏蔽外界&#xff0c;同时还会损伤我们的耳朵&#xff0c;所以新近流行的开放式耳机很好的解决了这些问题&#xff0c;但也有很多小…

智安网络|如何做好网络漏洞管理?这几点一定要了解!

随着网络技术的不断发展和应用&#xff0c;网络安全已经成为了各个企业、机构、甚至个人都需要面对和解决的难题。而在网络安全中&#xff0c;漏洞管理是非常重要的一个方面。本文将阐述网络安全中漏洞管理的相关知识和如何有效地进行漏洞管理。 一、漏洞管理的定义 漏洞是指软…

5.YAML介绍

什么是YAML&#xff1f; YAML是一种存储数据的文件格式。类似json和xml。 Ansible playbooks或者配置文件,以称为YAML的特定格式编写&#xff61;如果您使用过其他数据结构格式&#xff08;如XML或JSON&#xff09;,则应该能够轻松地使用它&#xff61; 上图中就是以3种格式表…

找不到vcruntime140.dll,无法继续执行代码,vcruntime140.dll怎么修复

vcruntime140.dll是一个Microsoft Visual C Redistributable包的一部分&#xff0c;它是用于运行在Windows操作系统上使用Visual C开发的程序和应用程序的必备文件之一。它是Microsoft Visual C Redistributable的动态链接库文件&#xff0c;也就是所谓的DLL文件。如果这个文件…

nova 11系列可打断动画闪亮登场,带你领略极致丝滑体验

华为nova 11系列手机自发布以来就受到广大消费者的好评和青睐&#xff0c;尤其是全网热捧的丝滑流畅动效体验&#xff0c;更是让不少用户直呼——“一旦上手&#xff0c;就回不去了”&#xff0c;让我们先来欣赏一下nova 11系列上的动效吧&#xff01; 从上面的视频演示&#x…

C++学习day--12 循环的应用,暴力破解密码和输出动图

第 1 节 职场修炼&#xff1a;程序员到底能干多久 现状&#xff1a; 很多程序员&#xff0c;过了 30 岁&#xff0c;纷纷转行。 原因&#xff1a; 1 &#xff09;薪资过万后&#xff0c;很难进一步提升 2 &#xff09;可替代性高&#xff0c;在新人面前&#xff0c;没有…

学习ChatGPT,从这几个中文提示词教程开始

ChatGPT已经火爆了一段时间了&#xff0c;很多用户也体验了ChatGPT&#xff0c;他的回答非常的强大。但有些人能够得到很好地回答&#xff0c;有些人得到的答案&#xff0c;并不是非常的完美&#xff0c;其实这个短时间内&#xff0c;和一个叫做提示工程&#xff08;Prompt Eng…

在城市之间“闪送”,同城即时速递的正确解法

从5月14日母亲节到“520”网络情人节&#xff0c;鲜花店、餐饮店和蛋糕店里&#xff0c;满是闪送骑手师傅进进出出的身影。 在成都&#xff0c;一位闪送师傅通过抖音展示了自己忙碌的一天&#xff1a;“了不起的母亲节&#xff0c;凌晨就开始预约单&#xff0c;&#xff08;系…

SSM框架学习-REST内容、案例及快速开发

1. REST简介 当访问行为不同时&#xff08;例如insert、delete等等&#xff09;&#xff0c;REST风格描述形式的路径是相同的&#xff0c;那如何区分&#xff1f; 所以&#xff0c;通过路径请求方式&#xff0c;我们就可以区分对资源进行了何种操作&#xff1b; 而REST风格对资…