CV10-三维重建1

三维感知

单张图像

通过图像上点的位置,来估计该点在三维空间中的位置。

单目相机,理论上三维重建是不准确的。通过一个二维点恢复三维坐标是一对多的
在这里插入图片描述

双目/多目

物体的深度值越大,在两幅图之间的视觉差越小。我们可以基于这个来判断物体在三维空间中的深度
在这里插入图片描述
基于双目计算深度(RGB->RGBD)
在这里插入图片描述

三角化

通过两张图片对应点与相机所在的直线,来确定三维空间中物体所在的位置
在这里插入图片描述
那么进行三角化时,需要知道哪些信息呢?

  • 相机参数
    • 外参:相机的位置和朝向(对应着平移和旋转)
      • 知道两个相机坐标系之间的相对关系就能求解
      • 我们下面所做的所有工作都是为了求出两个坐标系之间的相对关系 [ R , t ] [R,t] [R,t]
    • 内参:相机的焦距等参数
  • 像素对应关系(就像上图所示,需要通过对应像素来确定位置)

针孔相机模型

( x , y ) (x,y) (x,y) 为成像面上成像点的坐标 , ( X , Y ) (X,Y) (X,Y) 为空间中的三维点的坐标

在这里插入图片描述
转换成矩阵形式表达
在这里插入图片描述

相机坐标系

在这里插入图片描述

主点偏移

与针孔相机模型的区别就是,增加了 x x x 方向上的平移参数 p x p_x px y y y 方向上的平移参数 p y p_y py
在这里插入图片描述

像素长宽比

CCD(将图像转换为电信号的半导体元件,用于成像)单元长宽比不为一,因此需要乘以额外的比例系数
在这里插入图片描述
我们可以将上述式子简化,就是将前两个矩阵合并,将 f f f 区分为 f x f_x fx f y f_y fy
在这里插入图片描述

像素不是矩形

这就代表着CCD行与列不垂直,其实就是切变。因此,我们对 x x x 坐标加上与 y y y 相关的额外参数。这个并不常用
在这里插入图片描述

相机内参

焦距f ,CCD长宽比,CCD行与列不垂直,都是相机内部影响,因此上面式子的第一个矩阵表示的其实是相机内参

X c a m X_{cam} Xcam 代表相机坐标系中的坐标
在这里插入图片描述

上面论述的情况都基于这样一个假设:三维空间中的点处于相机坐标系中,但是如果这个点不在相机坐标系中呢?
在这里插入图片描述
我们利用相机的位置和旋转矩阵来将世界坐标系中的一点,转换到相机坐标系中。其中 X − C X-C XC 是世界坐标中的一点相对于相机关心的偏移向量。 R R R 是相机的旋转矩阵, C C C 代表着相机的平移
在这里插入图片描述
我们将这个式子也表示成矩阵的形式,并且与相机内参的矩阵进行合并
在这里插入图片描述
我们考虑了各种情况后,得到一般性的相机投影矩阵 P = K [ R ∣ t ] , t = − R C P = K[R|t],t=-RC P=K[Rt],t=RC。其中 K K K 是相机内参矩阵, [ R ∣ t ] [R|t] [Rt] 是相机外参矩阵

相机外参

包括 R R R t t t,其中 R R R 是旋转矩阵, t = − R C t=-RC t=RC C C C 是相机在世界坐标系中的坐标
在这里插入图片描述
总结:三维重建需要相机内参(内参矩阵 K K K),相机外参 R , t R,t R,t,立体匹配(像素对应关系)

运动推断结构

Structure from Motion , SFM:从相机运动太获取场景的三维点云
在这里插入图片描述

如果运动已知

在这里插入图片描述
但是相机运动和三维点云都未知

极线

概念

在这里插入图片描述

极线约束

由极线约束,引出本质矩阵
在这里插入图片描述
左边视图上的点在右边视图上的对应点一定在极线上。右边视图上的点在左边视图上的对应点也在极线上。
在这里插入图片描述

  • 上面得到过 x = K [ 1 ∣ 0 ] X c a m x = K[1|0]X_{cam} x=K[10]Xcam ,其实就是 x = K X c a m x = KX_{cam} x=KXcam,因此,可以可以通过 x 得到点的三维坐标

  • R , t R,t R,t 是将将左边坐标系中的点转到右边坐标系中所需要的旋转和平移参数。 R , t R,t R,t 是右边坐标系相对于左边坐标系的位置和姿态

  • p 0 p_0 p0 p 1 p_1 p1 分别是 p p p 在两个相机坐标系中的坐标。这里的 p 0 p_0 p0 p 1 p_1 p1 是不知道的,因为深度不知道。我们的目的就是要求出 p 0 p_0 p0 p 1 p_1 p1。但是要先求出 [ R , t ] [R,t] [R,t]

知道 [ R , t ] [R,t] [R,t] 之后有好几种方法可以求出 p 0 , p 1 p_0,p_1 p0,p1。理论上 c 0 x 0 , c 1 x 1 c_0x_0,c_1x_1 c0x0,c1x1会交于同一点,但是由于图像分辨率以及噪声的存在,实际的情况更可能是上图所描述的那样: c 0 x 0 c_0x_0 c0x0 c 1 p 1 c_1p_1 c1p1在空间中没有交点,这时我们需要找到一个 c 0 x 0 c_0x_0 c0x0 c 1 p 1 c_1p_1 c1p1之间的公垂线,然后取其上的中点作为我们重建出的三维点。
在这里插入图片描述
通过一系列推导我们可以得到一个简洁的表达式,也就是推导的最后一行得到的结果。我们 E E E 为本质矩阵

E E E 的表达式可知,本质矩阵 E E E R , t R,t R,t 决定。那我们已知 E E E 的话,能否求出 R , t R,t R,t 呢?

E E E R , t R,t R,t

结论:任意本质矩阵都可以通过SVD分解为如下形式,因为本质矩阵的秩为2,且两个非零奇异值相等(不懂)
在这里插入图片描述
相应的 [ R , t ] [R,t] [R,t] 存在四种可能
在这里插入图片描述
这四种可能的解分别对应四种物理意义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bG2bAPGn-1642136476203)(C:\Users\nishiyu\AppData\Roaming\Typora\typora-user-images\image-20211226132021255.png)]
可见,只有一中解满足实际的物理意义,因此已知本质矩阵 E E E 可以求出 R , t R,t R,t
在这里插入图片描述

如何算本质矩阵 E E E

方法一:通过基础矩阵

在这里插入图片描述
其中 K j K_j Kj 为相机 j j j 的内参矩阵, E E E 为本质矩阵。最后我们得到了关于基础矩阵的等式,基础矩阵 F = K 1 − T E K 0 − 1 F = K_1^{-T}EK_0^{-1} F=K1TEK01。其中, x 1 x_1 x1 x 0 x_0 x0 分别是两张图片中对应像素点。

一个点对贡献一个等式,我们可以计算出基础矩阵 F F F
在这里插入图片描述
有了 F F F 之后,就能通过 F F F 与 本质矩阵 E E E 的对应关系求解 E = K 1 T F K 0 E = K_1^TFK_0 E=K1TFK0。其中 K K K 都是相机内参

方法二:通过点对直接估计

将图像上的二维点转换成三维点,利用三维点点对直接对本质矩阵 E E E 进行估计,就像求解基础矩阵 F F F 时一样

SFM总结

二视图

因为我们求的 [ R , t ] [R,t] [R,t] 是两个相机坐标系之间的相对参数,因此只能两张图两张图来处理
在这里插入图片描述
在这里插入图片描述

多个视图

在这里插入图片描述

同一个三维点可能在多个视图中被同时观察到(这里的 [ R , t ] [R,t] [R,t] 应该都是相对于世界坐标系的)
在这里插入图片描述
红框内的为优化目标(使公式算出的投影点和点在图像中的实际位置尽量一致),我们采用集束调整的方法
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长命百岁️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值