【视觉SLAM入门】5.1. 特征提取和匹配--FAST,ORB(关键点描述子),2D-2D对极几何,本质矩阵,单应矩阵,三角测量,三角化矛盾

"不言而善应"

  • 0. 基础知识
  • 1. 特征提取和匹配
    • 1.1 FAST关键点
    • 1.2 ORB的关键点--改进FAST
    • 1.3 ORB的描述子--BRIEF
    • 1.4 总结
  • 2. 对极几何,对极约束
    • 2.1 本质矩阵(对极约束)
    • 2.2 单应矩阵(特别提一下)
    • 2.3 三角测量(Triangulation)---深度信息

为什么重要?我们是在做什么事?

  • 特征提取和匹配: 首先是两幅图像的特征提取,然后是对应特征点的匹配。接下来的工作是根据得到的匹配点对,估计相机的运动,具体根据相机分为三种方法:
    • 单目相机:2D-2D: 对极几何 方法
    • 双目或者RGBD相机: 3D-3D: ICP 方法
    • 一个3D点和它相机中的投影位置: 3D-2D : PnP 方法

0. 基础知识

视觉SLAM两阶段:

  • 前端(VO) —> 粗略相机运动 ------> 提供给后端初始值
  • 后端 —> 优化

VO的实现方法两派:

  • 不提取特征点 ----> 直接法
  • 提取特征点 ------> 特征点法 ----> 成熟

1. 特征提取和匹配

注意:有些东西的作用你要明白:

  • 关键点: 是在一幅图像中找到的点,作用是在一幅图中找到路标点(有代表性的点)。
  • 描述子: 在两个图像的关键点找到的情况下,匹配两个图像中的对应关键点。 通常是向量
  • 特征点: 由关键点和描述子两部分组成,任务是(提取XXX关键点,计算XXX描述子)
  • 尺度不变性: 为了确保从远到近都能检测出来关键点
  • 旋转不变性: 为了确保图像旋转后还能检测出来关键点
  • 特征提取的是关键点和描述子,特征匹配是根据描述子匹配的

几种图像特征:

  • SIFT特征:计算量太大,有些精确
  • FAST关键点:没有描述子,最快,不准。
  • ORB特征:改进FAST关键点,采用BRIEF描述子

1.1 FAST关键点

    1. 比较周围半径圆范围内的灰度情况,差别大就是角点。
    1. 设定一个数量,比如9,范围内至少有连续9个点和选定点的亮度色差大于阈值T的时候,该点就称为特征点。这种方法叫FAST-9。
    1. 检测完角点扎堆,非极大值抑制

1.2 ORB的关键点–改进FAST

改进了FAST关键点法,克服了缺点:

    1. 可以指定提取数量: 对点分别计算Harris相应,取前N个响应最大的角点;
    1. 尺度不变性: 用图像金字塔提取每一层的角点,均为角点才是角点;
    1. 旋转不变性:灰度质心法,保证图像旋转后还能检测到。最后得到的是角度,从图像光度明指向光度暗的一侧,具体实现如下:

在这里插入图片描述

1.3 ORB的描述子–BRIEF

作用:为了保证两个图像中提取出的关键点能对应上各自匹配的点对。

  • BRIEF是二进制描述子,描述向量由0和1组成
  • 做法:选取关键点周围的图像块,随机选取像素点对(有很多选点方法),如128就是取128个点对,设两个点像素分别为 p , q p, q p,q , 然后计算 p , q p, q p,q 的大小关系,按结果分别记为0,1, 最后得到128位的二进制数。匹配的时候在第二幅图像中也用相同的选点方法,最后比较两幅图像中关键点描述子距离(二进制的字串衡量就是汉明距离)。

1.4 总结

通过图像特征点的对应关系,解决了SLAM最重要的一步:同一个点在不同图像中如何检测出来
特征匹配的方法有:

  • 暴力匹配(Brute-Force Matcher): 第二幅图像中每个点都计算其在第一幅图对应的特征点,运算量大;
  • 快速最近邻(FLANN): 适用于匹配点数量多
  • 。。。

2. 对极几何,对极约束

目的是求相机运动 R , t R, t R,t,内参一般知道

这是2D-2D的单目情形,假设相机经过一次运动 R , t R, t R,t 后得到的两帧图如下:

图源SLAM14讲
其中点和线定义如下:

  • p 1 , p 2 p_1,p_2 p1,p2 : 分别同一个点在两帧下的投影点
  • O 1 , O 2 O_1, O_2 O1,O2 : 相机光心
  • P P P : 真实世界中的点
  • I 1 , I 2 I_1, I_2 I1,I2 : 两帧图像
  • O 1 O 2 连线 O_1O_2连线 O1O2连线基线
  • e 1 , e 2 e_1, e_2 e1,e2 : O 1 O 2 O_1O_2 O1O2 I 1 , I 2 I_1,I_2 I1,I2 的交点,也叫极点
  • 极平面 O 1 , O 2 , P O_1,O_2,P O1,O2,P 所在平面
  • 极线 l 1 , l 2 l_1, l_2 l1,l2

如果没有深度信息,则 O 1 P O_1P O1P 直线上任一点投影都在 p 1 p_1 p1,且他在第二帧图像上的轨迹在 极线 p 2 e 2 p_2e_2 p2e2 上,所以有真确的匹配,就可以推断 P P P 的位置,然后得到相机的运动。

2.1 本质矩阵(对极约束)

推理部分略,详见《视觉SLAM十四讲》第七章7.3节,这里给出结果。
仍参考上图,取两个像素点归一化平面上的点 x 1 , x 2 x_1,x_2 x1,x2
x 1 = K − 1 p 1 , x 2 = K − 1 p 2 x_1=K^{-1}p_1,\qquad\qquad x_2 = K^{-1}p_2 x1=K1p1,x2=K1p2
最终的对极约束 为:
p 2 T K − T t \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad p_2^TK^{-T}t p2TKTt^ R K − 1 p 1 = 0 RK^{-1}p_1 = 0 RK1p1=0

它的含义是 O 1 , O 2 , P O_1,O_2,P O1O2,P 三点共面。从式中心部分,记本质矩阵 E \boldsymbol E E基础矩阵 F \boldsymbol F F 如下:

E = t \qquad\qquad\qquad\qquad\qquad\qquad\qquad E=t E=t^ R F = K − T E K − 1 x 2 T E x 1 = p 2 T F p 1 = 0 R\qquad\qquad F=K^{-T}EK^{-1}\qquad\qquad x_2^TEx_1=p_2^TFp_1=0 RF=KTEK1x2TEx1=p2TFp1=0

可以看出 E \boldsymbol E E F \boldsymbol F F 只差内参 K K K (已知),所以二者 求一即可。
不妨以 E = t E=t E=t^ R R R来求解。则后续工作如下:

  1. 根据已匹配点对,求出 E \boldsymbol E E F \boldsymbol F F
  2. 根据 E \boldsymbol E E F \boldsymbol F F,求出相机运动 R , t \boldsymbol {R,t} R,t

2.1.1 求解本质矩阵

探究本质矩阵的特点:

    1. 由对极约束 x 2 T E x 1 = 0 x_2^TEx_1=0 x2TEx1=0 , 所以它在不同尺度下等价,左右乘依旧满足约束。又因为 E = t E=t E=t^ R R R, 原本有6个自由度,故去掉尺度,还有5个自由度
    1. E 的内在性质 E的内在性质 E的内在性质 : 它的奇异值必定是 [ δ , δ , 0 ] T [\delta ,\delta, 0]^T [δδ0]T 的形式,非线性的性质。

求解依据:
x 2 T E x 1 = 0 ( 1 ) x_2^TEx_1 = 0 \qquad\qquad\qquad\qquad (1) x2TEx1=0(1)
理论上可以用5对点来求解,但是很麻烦。故用 八点法 求解(由于尺度不变性)。

1.首先考虑一对点(归一化坐标 x 1 , x 2 x_1, x_2 x1,x2 ): 将(1)式展开:
( u 1 , v 1 , 1 ) ( e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ) ( u 2 v 2 1 ) = 0 ⇓ 将 e 展开 e = [ e 1 , e 2 , e 3 , e 4 , e 5 , e 6 , e 7 , e 8 , e 9 ] ⇓ 展开并重写 [ u 1 u 2 , u 1 v 2 , u 1 , v 1 u 2 , v 1 v 2 , v 1 , u 2 , v 2 , 1 ] ⋅ e = 0 ⇓ 考虑 8 对点的方程组 (u_1, v_1,1)\begin{pmatrix} e_1\quad e_2\quad e_3 \\e_4\quad e_5\quad e_6 \\e_7\quad e_8\quad e_9 \end{pmatrix}\begin{pmatrix} u_2\\v_2\\1 \end{pmatrix}=0 \quad\\\; \\\;\Downarrow 将e展开 \\\;\\\;e=[e_1,e_2,e_3,e_4,e_5,e_6,e_7,e_8,e_9]\\\;\\\; \Downarrow展开并重写\\\;\\\; [u_1u_2,u_1v_2,u_1,v_1u_2,v_1v_2,v_1,u_2,v_2,1]\cdot e = 0 \\\;\\\Downarrow考虑8对点的方程组 (u1,v1,1) e1e2e3e4e5e6e7e8e9 u2v21 =0e展开e=[e1,e2,e3,e4,e5,e6,e7,e8,e9]展开并重写[u1u2,u1v2,u1,v1u2,v1v2,v1,u2,v2,1]e=0考虑8对点的方程组
在这里插入图片描述
至此,本质矩阵的求解结束

2.1.2 恢复相机运动 R , t R,t Rt

  1. E \boldsymbol E E 做SVD分解
    E = U ∑ V T ( U , V 正交阵, ∑ 为奇异矩阵且 = d i a g ( δ , δ , 0 ) ) E=U\sum V_T\qquad\qquad (U,V正交阵,\sum 为奇异矩阵且=diag(\delta,\delta,0)) E=UVT(U,V正交阵,为奇异矩阵且=diag(δ,δ,0))
  2. 求解较为复杂,这里给出结果
    在这里插入图片描述一共存在4组解。如下:
    图源视觉SLAM14讲
    蓝色横线就是相机平面,红色点为投影点。

有(1)满足要求,因为只有这样才符合投影模型,深度才为正。将解出来的解带入验算即可。


2.1.3 本质矩阵调整

5个自由度,用了8个点,上边的方程求解出的 E E E 可能不满足 E E E 的内在性质( ∑ = d i a g ( δ , δ , 0 ) \boldsymbol {\sum = diag(\delta,\delta,0)} =diag(δ,δ,0) ),因此要调整。做法如下:
在做SVD分解时,得到
∑ = d i a g ( δ 1 , δ 2 , δ 3 ) ⇓ 设 δ 1 ≥ δ 2 ≥ δ 3 ,则新的 ∑ 如下 ∑ ′ = d i a g ( δ 1 + δ 2 2 , δ 1 + δ 2 2 , 0 ) ⇓ 带入 S V D 分解式 E = U d i a g ( δ 1 + δ 2 2 , δ 1 + δ 2 2 , 0 ) V T \sum = diag(\delta_1,\delta_2,\delta_3) \\\;\\\Downarrow 设\delta_1\ge\delta_2\ge\delta_3,则新的\sum如下\\\; \\\sum' = diag(\frac{\delta_1+\delta_2}{2}, \frac{\delta_1+\delta_2}{2},0)\\\; \\\Downarrow 带入SVD分解式\\\; \\E=Udiag(\frac{\delta_1+\delta_2}{2}, \frac{\delta_1+\delta_2}{2},0)V^T =diag(δ1,δ2,δ3)δ1δ2δ3,则新的如下=diag(2δ1+δ2,2δ1+δ2,0)带入SVD分解式E=Udiag(2δ1+δ2,2δ1+δ2,0)VT

相当于把求出来的矩阵投影到了 E \boldsymbol E E 的流形上,也可以直接取 ∑ = ( 1 , 1 , 0 ) \sum = (1,1,0) =(1,1,0) (尺度不变性)

2.1.3 遗留问题

  1. E \boldsymbol E E 的尺度不确定性导致了 t \boldsymbol {t} t 的尺度不确定性。(由于 R \boldsymbol R R) 自身带有约束。因此单目SLAM存在初始化: t \boldsymbol t t 的单位为固定尺度1的计算相机运动和特征点;
  2. 单目初始化不能只有纯旋转,必须要有一定的平移: 因为 t \boldsymbol t t 为0,所以 E \boldsymbol E E 最终也为0;
  3. 当点多于8对,此时构成超定方程,我们有两种做法:
  • 3.1. 最小化一个二次型(最小二乘意义下的)
  • 3.2. 随机采样一致性(RANSAC),可以处理有错误匹配的情况,一般用这个。

2.2 单应矩阵(特别提一下)

为什么需要单应矩阵 H H H (Homography)?

  • 当特征点共面,相机纯旋转, F \boldsymbol F F 的自由度少了 t t t ,下降。这就是退化现象。
  • 如果这时仍用八点法求解,多出来的自由度是噪声带来的。
  • 为了避免退化,同时估计基础矩阵 F \boldsymbol F F 和 单应矩阵 H \boldsymbol H H,选择重投影误差小的矩阵作为最终运动估计矩阵。

H H H 假设的所有特征点位于平面上。

详细推导内容见SLAM十四讲7.3.3 。根据法平面做的,求解与 E 和 F E和F EF 相似。只需要4对匹配点就可以算出。

2.3 三角测量(Triangulation)—深度信息

  • 计算深度:回想相机模型那一节,这里的深度就是之前被我们固定为1的 s \boldsymbol s s 。以第一帧图像为坐标原点,由以上对极约束内容有:
    s 1 x 1 = s 2 R x 2 + t ⇓ 分别单独计算,左乘 x 1 的反对称矩阵 s_1x_1 = s_2Rx_2+t \\\; \\\Downarrow 分别单独计算,左乘x_1的反对称矩阵 s1x1=s2Rx2+t分别单独计算,左乘x1的反对称矩阵
    s 1 ( x 1 \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad s_1(x_1 s1(x1^ ) x 1 = 0 = s 2 ( x 1 )x_1=0=s_2(x_1 )x1=0=s2(x1 ^ ) R x 2 + ( x 1 )\;Rx_2+(x_1 )Rx2+(x1 ^ ) t )t )t

  • 可以直接求得深度 s 1 , s 2 \boldsymbol {s_1,s_2} s1,s2 。但是由于噪声的存在,我们一般是求最小二乘解,而不是零解。同样由于尺度不确定性,我们只知道深度对于t的数量,而不知道具体究竟是多少米。

  • 三角化矛盾: 平移越大三角化越精确,但是视野越短,反之亦然。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改状态栏The application could not be installed: INSTALL_FAILED_ABORTEDList

打开theme修改状态栏为可见。 <resources xmlns:tools"http://schemas.android.com/tools"><!-- Base application theme. --><style name"Base.Theme.MyApplication" parent"Theme.AppCompat.DayNight"><!-- Customize yo…

[JavaScript游戏开发] 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测

系列文章目录 第一章 2D二维地图绘制、人物移动、障碍检测 第二章 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示) 第三章 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测 第四章 绘制Q版地图、键盘上下左右地图场景切换 文章目录 系列文章目录前言一、本章节…

呼吸灯——FPGA

文章目录 前言一、呼吸灯是什么&#xff1f;1、介绍2、占空比调节示意图 二、系统设计1、系统框图2、RTL视图 三、源码四、效果五、总结六、参考资料 前言 环境&#xff1a; 1、Quartus18.0 2、vscode 3、板子型号&#xff1a;EP4CE6F17C8 要求&#xff1a; 将四个LED灯实现循环…

电缆故障综合测试仪

一、电缆故障查找仪产品简介 本产品用于地埋电缆故障点的快速、企业产品免费信息发布平台定位、电缆埋设路径及埋设深度的电子商务测&#xff08;在故障点处获取深度&#xff09;。 主要特点 1、用特殊结构的声波振动传感器及低噪声专用器件作前置放大&#xff0c;提高了仪器定…

VLT:Vision-Language Transformer用于引用的视觉语言转换和查询生成分割

摘要 在这项工作中&#xff0c;我们解决了引用分割的挑战性任务。引用分割中的查询表达式通常通过描述目标对象与其他对象的关系来表示目标对象。因此&#xff0c;为了在图像中的所有实例中找到目标实例&#xff0c;模型必须对整个图像有一个整体的理解。为了实现这一点&#…

鸿蒙4.0发布会说了啥?关注个性与效率,小艺智能程度令人惊艳

鸿蒙4.0系统的发布会已经结束&#xff0c;整个发布会看下来&#xff0c;给我最深刻的印象就是——鸿蒙4.0是一个让手机更接近个人终端的系统。但选择系统难免掺杂个人喜好和偏见&#xff0c;因此本文我只会从鸿蒙4.0那些让我感到惊喜的功能入手介绍&#xff0c;不对系统进行评价…

【Golang 接口自动化01】使用标准库net/http发送Get请求

目录 发送Get请求 响应信息 拓展 资料获取方法 发送Get请求 使用Golang发送get请求很容易&#xff0c;我们还是使用http://httpbin.org作为服务端来进行演示。 package mainimport ("bytes""fmt""log""net/http""net/url&qu…

Vue 自定义事件绑定与解绑

绑定自定义事件 说到 Vue 自定义事件&#xff0c;那就需要搞清楚一个问题&#xff0c;为啥有这个玩意。 说到自定义事件之前&#xff0c;需要理解 组件基础的概念。理解了基础概念之后&#xff0c;我们就知道 Vue 的父子之间的通信&#xff0c; 一是 父组件通过 Prop 向子组件…

8.3day04git+数据结构

文章目录 git版本控制学习高性能的单机管理主机的心跳服务算法题 git版本控制学习 一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 安装g…

抽象工厂模式(Abstract Factory)

抽象工厂模式提供一个创建一组相关或相互依赖的对象的接口&#xff0c;而无须指定它们具体的类&#xff0c;每个子类可以生产一系列相关的产品。 The Abstract Factory Pattern is to provide an interface for creating families of related or dependent objects without s…

谷歌: 安卓补丁漏洞让 N-days 与 0-days 同样危险

近日&#xff0c;谷歌发布了年度零日漏洞报告&#xff0c;展示了 2022 年的野外漏洞统计数据&#xff0c;并强调了 Android 平台中长期存在的问题&#xff0c;该问题在很长一段时间内提高了已披露漏洞的价值和使用。 更具体地说&#xff0c;谷歌的报告强调了安卓系统中的 &quo…

Matlab对TMS320F28335编程--SVPWM配置互补PWM输出

前言 F28335中断 目的&#xff1a;FOC的核心算法及SVPWM输出&#xff0c;SVPWM的载波频率10kHz&#xff0c;SVPWM的每个周期都会触发ADC中断采集相电流&#xff0c;SVPWM为芯片ePWM4、5、6通道&#xff0c;配置死区 1、配置中断SVPWM进ADC中断&#xff0c;查上表知CPU1,PIE1 …

回归分析书籍推荐

回归分析在线免费书籍&#xff1a;I 1-ntroduction to Regression Methods for Public Health using R Introduction to Regression Methods for Public Health Using R 2-An Introduction to Statistical Learning https://hastie.su.domains/ISLR2/ISLRv2_website.pdf 可以…

【Jmeter】压测mysql数据库中间件mycat

目录 背景 环境准备 1、下载Jmeter 2、下载mysql数据库的驱动包 3、要进行测试的数据库 Jmeter配置 1、启动Jmeter图形界面 2、加载mysql驱动包 3、新建一个线程组&#xff0c;然后如下图所示添加 JDBC Connection Configuration 4、配置JDBC Connection Configurati…

vue运行在IE浏览器空白报错SCRIPT1006: 缺少‘)‘ -【vue兼容IE篇】

其他浏览器均正常&#xff0c;但是切换ie模式&#xff0c;打开空白&#xff0c;F12打开报错缺少‘)‘ &#xff0c;如下图 在搜狗浏览器下点开报错&#xff1a;定格在crypto-js处 解决&#xff1a; 步骤一&#xff1a;使用npm安装babel-polyfill 依赖&#xff08;已安装了可忽…

AI赋能转型升级 助力打造“数智辽宁”——首次大模型研讨沙龙在沈成功举行

当前&#xff0c;以“ChatGPT”为代表的大模型正在引领新一轮全球人工智能技术发展浪潮&#xff0c;推动人工智能从以专用小模型定制训练为主的“手工作坊时代”&#xff0c;迈入以通用大模型预训练为主的“工业化时代”&#xff0c;正不断加速实体经济智能化升级&#xff0c;深…

主流CRM有哪些特点和优势?

现如今&#xff0c;CRM系统是企业实现数字化转型&#xff0c;提高销售收入的首选工具。但市场上有众多CRM品牌&#xff0c;每家都有自己的特点和优势&#xff0c;企业该如何进行选择&#xff1f;下面我们就来进行主流CRM系统比较&#xff0c;并说说什么CRM产品比较好? 主流CR…

学习笔记|C251|STC32G单片机视频开发教程(冲哥)|第三集:开发环境搭建和程序下载

文章目录 1.STC-ISP软件的下载2.STC32手册下载3.PDF阅读器下载4.学会PDF阅读器查阅手册5.跟着手册搭建C251开发环境Tips:如何同时安装Keil的C51、C251和MDK 6.程序包的下载7.第一个工程的编译和下载 原作者/主讲人&#xff1a;冲哥 原始视频地址 1.STC-ISP软件的下载 STC-ISP …

Clickhouse 优势与部署

一、clickhouse简介 1.1 clickhouse介绍 ClickHouse的背后研发团队是俄罗斯的Yandex公司&#xff0c;2011年在纳斯达克上市&#xff0c;它的核心产品是搜索引擎。我们知道&#xff0c;做搜索引擎的公司营收非常依赖流量和在线广告&#xff0c;所以做搜索引擎的公司一般会并行推…

wordpress发表文章时报错: rest_cannot_create,抱歉,您不能为此用户创建文章(已解决)

使用wordpress 的rest api发布文章&#xff0c;首先使用wp-json/jwt-auth/v1/token接口获取token&#xff0c;然后再使用/wp-json/wp/v2/posts 接口发表文章&#xff0c;但是使用axios请求时&#xff0c;却报错&#xff1a; 但是&#xff0c;我在postman上却是可以的&#xff0…