08 计算相机运动

文章目录

    • 08 计算相机运动
      • 8.1 提取特征点
      • 8.2 对极几何
        • 8.2.1 几个矩阵
        • 8.2.2 相机坐标系与归一化坐标系
        • 8.2.3 三角测量
      • 8.3 PnP: 3D-2D
      • 8.4 ICP:3D-3D
      • 8.5 总结

08 计算相机运动

8.1 提取特征点

读取图像 --> 提取角点 --> 计算各角点的描述子 --> 匹配描述子(计算汉明距离)–> 根据汉明距离去除误匹配点对 --> 绘制结果

根据匹配好的像素点对估计相机的运动。

(1)如果只有两个单目图像,得到 2D-2D 间的关系,用对极几何解决;

(2)如果匹配的是 帧(2D)和地图(3D) ,则得到 3D-2D 的关系,通过 PnP 求解;

(3)如果匹配的是 RGB-D 图像,则得到 3D-3D 间的关系,用 ICP 求解。

8.2 对极几何

8.2.1 几个矩阵

具体推导见笔记《视觉里程计 1》。

x 2 T t ∧ R x 1 = 0 \boldsymbol{x_2^T}\boldsymbol{t}^{\wedge}\boldsymbol{R x_1}=0 x2TtRx1=0

这就是对极约束,其中 x 1 \boldsymbol{x}_1 x1 为归一化坐标。

带入像素坐标,得

p 2 T K − T t ∧ R K − 1 p 1 = 0 (6-9) \boldsymbol{p_2^TK^{-T}}\boldsymbol{t}^{\wedge}\boldsymbol{RK^{-1}p_1}=0 \tag{6-9} p2TKTtRK1p1=0(6-9)

至此,容易看出,我们只需要知道两张图的像素坐标以及相机内参即可求出相机运动 R \boldsymbol{R} R t \boldsymbol{t} t

将中间部分分别记为:基础矩阵 F \boldsymbol{F} F本质矩阵 E \boldsymbol{E} E,即

E = t ∧ R \boldsymbol{E}=\boldsymbol{t}^{\wedge}\boldsymbol{R} E=tR
F = K − T E K − 1 \boldsymbol{F}=\boldsymbol{K^{-T}}\boldsymbol{E}\boldsymbol{K^{-1}} F=KTEK1
x 2 T E x 1 = p 2 T F p 1 = 0 (6-10) \boldsymbol{x_2^T}\boldsymbol{E}\boldsymbol{x_1}=\boldsymbol{p_2^T}\boldsymbol{F}\boldsymbol{p_1}=0 \tag{6-10} x2TEx1=p2TFp1=0(6-10)

根据以上推导,相机位姿估计问题简化为以下两步:

  • 根据匹配点的像素坐标和相机内参求出本质矩阵 E \boldsymbol{E} E

  • 由本质矩阵求出 R \boldsymbol{R} R t \boldsymbol{t} t

同理,单应矩阵可用类似方法求解。

本质矩阵自由度为 5,理论上 5 对点即可求解,实际采用八点法;而单应矩阵 4 对点即可求解。

8.2.2 相机坐标系与归一化坐标系

相机内参:

[ f x 0 c x 0 f y c y 0 0 1 ] \left[\begin{array}{ccc} f_{x} & 0 & c_{x} \\ 0 & f_{y} & c_{y} \\ 0 & 0 & 1 \end{array}\right] fx000fy0cxcy1

其中, c x , c y c_x,c_y cxcy 是相机光心,也就是相机的光学中心在图像平面上的 x , y x,y xy 坐标; f x , f y f_x,f_y fxfy 是焦距。

像素坐标 ( u , v ) (u, v) (u,v) 到归一化坐标 ( x , y ) (x, y) (x,y) 的转换:

x = ( u − c x ) / f x y = ( v − c y ) / f y x = (u - c_x) / f_x \\ y = (v - c_y) / f_y x=(ucx)/fxy=(vcy)/fy

归一化坐标 ( x , y ) (x, y) (x,y) 到像素坐标 ( u , v ) (u, v) (u,v) 的转换:

u = ( x ∗ f x ) + c x v = ( y ∗ f y ) + c y u = (x * f_x) + c_x \\ v = (y * f_y) + c_y u=(xfx)+cxv=(yfy)+cy

8.2.3 三角测量

即根据计算得到的 R , t \boldsymbol{R},\boldsymbol{t} Rt 恢复出尺度 s s s,进而求出三维空间坐标。

s 2 x 2 ∧ x 2 = 0 = s 1 x 2 ∧ R x 1 + x 2 ∧ t s_2\boldsymbol{x_2}^{\wedge}\boldsymbol{x_2}=0=s_1\boldsymbol{x_2}^{\wedge}\boldsymbol{R}\boldsymbol{x_1}+\boldsymbol{x_2}^{\wedge}\boldsymbol{t} s2x2x2=0=s1x2Rx1+x2t

8.3 PnP: 3D-2D

简单来说,PnP 位姿估计就是通过几个已知坐标(世界坐标)的特征点,结合他们在相机照片中的成像(像素坐标),求解出相机所在的世界坐标以及旋转角度。

主要有三种求解方法:

  • 直接线性变换(DLT):至少需要 6 对点
  • P3P:3 对点即可,当给定的配对点多于 3 对时,难以利用更多的信息。
  • 非线性优化即 BA

针对 BA 求解,以 g2o 为例,以相机位姿和 3D 点坐标为顶点,以对应的像素坐标为观测值。

8.4 ICP:3D-3D

针对一组匹配好(已知对应关系)的 3D 点,可用 ICP 算法求解。与激光 SLAM 中的 ICP 不同,激光点云数据特征不够丰富,无法知道两个点集之间的匹配关系,只能认为距离最近的两个点为同一个,再逐步迭代。

  • SVD 方法

  • 非线性优化

8.5 总结

一、基础矩阵、单应矩阵用像素坐标求解;本质矩阵、三角测量用归一化坐标求解。

单应矩阵直接描述了图像坐标之间的变换:

p 2 = H p 1 \boldsymbol{p}_2 = \boldsymbol{H}\boldsymbol{p}_1 p2=Hp1

二、在 ORB-SLAM 中这几种方法的顺序为:

  • 提取两张图像的匹配点,利用对极几何计算 H \boldsymbol{H} H 矩阵和 F \boldsymbol{F} F 矩阵,从而恢复 R \boldsymbol{R} R t \boldsymbol{t} t

  • 用三角测量计算各关键点对应的 3D 坐标;

  • 跟踪丢失后,机器人就需要回到原来经过的位置找匹配帧,这个匹配帧的关键点对应的 3D 坐标是已知的,之前已经求出,利用这些 3D 点和机器人当前图像关键点像素坐标,就构成了 PnP 问题,从而可计算出当前的 R \boldsymbol{R} R t \boldsymbol{t} t

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

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

相关文章

RHEL防火墙配置

目录 1.了解firewalld 2.firewalld的基本配置 3.配置firewalld的规则 4.icmp-blocks 5.Services 6.ports 1.了解firewalld 在RHEL8中用的防火墙是firewalld,在 firewalld中又涉及zone的概念。首先来了解一下什么是zone 如在进地铁或高铁时需要安检&#xf…

JavaEE07 定时器的使用和模拟实现

前言 前面我们聊了很多关于阻塞队列,单例模式等的应用,今天我们就来聊聊定时器的功能和模拟实现,其实定时器的实现在我们的日常生活中也很常见,比如说平常创建一些定时任务,定时开关机,定时去发表一篇qq空间等等,今天我们就来简单实现一个定时器. 1.JVM提供的定时器的使用 在自…

现代雷达车载应用——第2章 汽车雷达系统原理 2.3节

经典著作,值得一读,英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.3 信号模型 雷达的发射机通常发出精心设计和定义明确的信号。然而,接收到的返回信号是多个分量的叠加,包括目标的反射、杂波…

usr/bin/env: ‘bash\r‘: No such file or directory

执行docker报错 这种错误是由于windows下执行linux的shell文件,格式不对导致 去ubuntu下安装dos2unix sudo apt-get install dos2unix 切换到对应的目录下,对shell文件进行格式化 dos2unix xxx.sh

数字化转型对企业有什么好处?

引言 数字化转型已经成为当今商业领域中的一股强大力量,它不仅仅是简单的技术更新,更是企业发展的重要战略转变。随着科技的迅猛发展和全球化竞争的加剧,企业们正在积极探索如何将数字化的力量融入到他们的运营和战略中。 数字化转型不仅是传…

9:00面试,9:05就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到12月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40…

在linux上面使用shell脚本统计MYSQL数据情况

本公司涉及到一部分数据推送的业务,然后因为是配置数据传输任务的方式做的,但是有时候数据任务会出现问题,可能不推送等等情况,所以需要有个程序监控是否数据推送完成,简单就是检测规则就是定时跑源数据表和推送目标表…

抖音发布最新公告,清退所有全国本地生活服务商.

11月27日,抖音发布最新公告,一文公告让本地生活服务商行业鬼哭狼嚎,公告很明确,只保留了区域服务商,全国性的所有服务商被清退。 我们再来看看抖音本地生活的前世今生,最开始的时候抖音本地生活全部是自己部…

QT用户管理效果预览

用户管理效果 QT 用户管理 GITHUB网站 QT版本 CMakeList.txt find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Sql REQUIRED) target_link_libraries(tableView PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql)GitHub代码获取链接 GitHub代码获取链接

Java stream流toMap使用过程中空指针问题

Java8中stream操作list时常见的一个错误: 排查原因: 定位到代码中发现从数据查询是存在数据的 排查stream前对象为null的情况,那问题只能出现在toMap这里了 我们需要知道toMap是怎么帮我们封装数据的,先搞明白toMap的原理&#…

“error LNK1169: 找到一个或多个多重定义的符号”的解决方法

问题描述如下: 有 三个源文件,A.h、B.cpp、C.cpp。 A.h是头文件,其中声明了三个变量a1、a2、 a3。 B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件。B.cpp和C.cpp中均包含头文件 A.h。 在编译时,编译能够通…

用在半导体CST材料搬运AGV小车的RFID

RFID(RadioFrequencyIdentification),又称无线射频识别技术,可通过射频信号进行非接触式的识别目标,近些年来被广泛应用在半导体制造业中,用于半导体行业的晶圆存储柜、电子货架、硅晶片清洗、半导体天车等…

YoloV8改进策略:双动态令牌混合器(D-Mixer)的TransXNet,实现YoloV8的有效涨点

摘要 双动态令牌混合器(D-Mixer),一种输入依赖的方式聚合全局信息和局部细节。D-Mixer通过分别在均匀分割的特征片段上应用有效的全局注意力模块和输入依赖的深度卷积,使网络具有强大的归纳偏差和扩大的有效感受野。使用D-Mixer作为基本构建块设计了TransXNet,这是一种新…

STM32——超声波传感器

需求: 使用超声波测距,当手离传感器距离小于 5cm 时, LED1 点亮,否则保持不亮状态 接线: 定时器配置: 使用 TIM2 ,只用作计数功能,不用作定时。 将 PSC 配置为 71 ,…

Java实现Leetcode题(栈和队列)

Leetcode232(用栈实现队列) package stack_queue;import java.util.Stack;public class Leetcode232 {public static void main(String[] args) {MyQueue myQueue new MyQueue();myQueue.push(1);myQueue.push(2);System.out.print(myQueue.peek());Sy…

基于K-means与CNN的遥感影像分类方法

基于K-means与CNN的遥感影像分类 一、引言 1.研究背景 航天遥感技术是一种通过卫星对地观测获取遥感图像信息数据的技术,这些图像数据在各领域都发挥着不可或缺的作用。遥感图像分类主要是根据地面物体电磁波辐射在遥感图像上的特征,判断识别地面物体的属…

推荐算法:HNSW【推荐出与用户搜索的类似的/用户感兴趣的商品】

HNSW算法概述 HNSW(Hierarchical Navigable Small Word)算法算是目前推荐领域里面常用的ANN(Approximate Nearest Neighbor)算法了。其目的就是在极大量的候选集当中如何快速地找到一个query最近邻的k个元素。 要找到一个query的…

uniapp微信小程序点击保存图片

一:需要用到的API 1.uni.uploadFile(OBJECT) 将本地资源上传到开发者服务器 uni.uploadFile(OBJECT) | uni-app官网 2. uni.saveImageToPhotosAlbum(OBJECT) 保存图片到系统相册。 uni.chooseImage(OBJECT) | uni-app官网 注意:微信小程序在2023年…

【参数汇总】mysql服务端/客户端常见优化参数

mysql服务端参数 1、innodb_buffer_pool_size (innodb索引buffer pool缓冲区大小) 默认大小为128M, 官方推荐其配置为系统内存的 50% 到 75% 。 一般innodb_buffer_pool_size要结合以下两个参数来设置: innodb_buffer_pool_ch…

【1.计算机组成与体系结构】浮点数的表示

目录 1.浮点数的表示2.运算过程3.特点 1.浮点数的表示 N尾数*基数(指数/也称为阶码) 例如:1.25x105 ; 1.255x103 2.运算过程 对阶>尾数计算>结果格式化 3.特点 1、一般尾数用补码,阶码用移码 2、阶码的位数决定数的表示范围,位数越…