08 计算相机运动

文章目录

    • [08 计算相机运动](#08 计算相机运动)
      • [8.1 提取特征点](#8.1 提取特征点)
      • [8.2 对极几何](#8.2 对极几何)
        • [8.2.1 几个矩阵](#8.2.1 几个矩阵)
        • [8.2.2 相机坐标系与归一化坐标系](#8.2.2 相机坐标系与归一化坐标系)
        • [8.2.3 三角测量](#8.2.3 三角测量)
      • [8.3 PnP: 3D-2D](#8.3 PnP: 3D-2D)
      • [8.4 ICP:3D-3D](#8.4 ICP:3D-3D)
      • [8.5 总结](#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 x2Tt∧Rx1=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} p2TK−Tt∧RK−1p1=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=t∧R
F = K − T E K − 1 \boldsymbol{F}=\boldsymbol{K^{-T}}\boldsymbol{E}\boldsymbol{K^{-1}} F=K−TEK−1
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 cx,cy 是相机光心,也就是相机的光学中心在图像平面上的 x , y x,y x,y 坐标; f x , f y f_x,f_y fx,fy 是焦距。 像素坐标 ( 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=(u−cx)/fxy=(v−cy)/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=(x∗fx)+cxv=(y∗fy)+cy ##### 8.2.3 三角测量 即根据计算得到的 R , t \\boldsymbol{R},\\boldsymbol{t} R,t 恢复出尺度 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} s2x2∧x2=0=s1x2∧Rx1+x2∧t #### 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。

相关推荐
C-DHEnry12 分钟前
迪杰斯特拉+二分+优先队列+拓扑+堆优化(奶牛航线Cowroute、架设电话线dd、路障Roadblocks、奶牛交通Traffic)
c++·算法·动态规划·二分·拓扑·堆优化·迪杰斯特拉
.YY001.29 分钟前
数据结构第一轮复习--第六章图包含代码
数据结构·算法
?Agony41 分钟前
P17_ResNeXt-50
人工智能·pytorch·python·算法
计算机真好丸1 小时前
第J9周:Inception v3算法实战与解析
算法
HR Zhou1 小时前
群体智能优化算法-算术优化算法(Arithmetic Optimization Algorithm, AOA,含Matlab源代码)
人工智能·算法·数学建模·matlab·优化·智能优化算法
wen__xvn1 小时前
每日一题洛谷P8649 [蓝桥杯 2017 省 B] k 倍区间c++
c++·算法·蓝桥杯
倔强的石头1061 小时前
【C++经典例题】杨辉三角问题
算法
独好紫罗兰2 小时前
洛谷题单3-P4956 [COCI 2017 2018 #6] Davor-python-流程图重构
开发语言·python·算法
ん贤2 小时前
2024第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
c语言·数据结构·c++·经验分享·笔记·算法·蓝桥杯
PownShanYu3 小时前
RainbowDash 的 Robot
算法