计算机视觉之三维重建(6)---多视图几何(上)


一、运动恢复结构问题(SfM)

 1. 运动恢复结构问题:通过三维场景的多张图像,恢复出该场景的三维结构信息以及每张图片对应的摄像机参数。

在这里插入图片描述

 2. 运动恢复问题建模表述:已知 n n n 个世界坐标点在 m m m 张图像中的对应点的像素坐标 x i j x_{ij} xij,计算出 m m m 个摄像机的投影矩阵 M i M_i Mi n n n 个三维点 X j X_j Xj 的坐标。下图中 M = K [ R , T ] M=K[R,T] M=K[R,T]

在这里插入图片描述

二、欧式结构恢复

2.1 概述

 1. 欧式结构恢复问题:摄像机内参数已知,外参数未知情况。

 2. 对于欧式结构恢复问题,已知摄像机内参数,根据投影矩阵的计算公式可知 x i j = M i X j = K i [ R i , T i ] X j x_{ij}=M_iX_j=K_i[R_i,T_i]X_j xij=MiXj=Ki[Ri,Ti]Xj。那么求解投影矩阵 M M M 只需要求解外参数 [ R , T ] [R,T] [R,T]

在这里插入图片描述

2.2 求解

 1. 对于二视图的欧式结构恢复问题,如果把世界坐标系放在第一个坐标系下面,那摄像机 1 1 1 的外参数为 [ I , 0 ] [I,0] [I,0],而摄像机 2 2 2 的外参数 [ R , T ] [R,T] [R,T] 却是未知的。

在这里插入图片描述

 2. 求解步骤:
 (1)求解基础矩阵 F F F(归一化八点法)

 (2)求解本质矩阵 E = K 2 T F K 1 E=K_2^TFK_1 E=K2TFK1

 (3)分解本质矩阵 E → R , T E \rightarrow R,T ER,T

 (4)三角化(求解世界坐标系下的3D坐标)

在这里插入图片描述

 3. 上面步骤中除了分解本质矩阵 E E E 外,其他都在之前文章中提到过。分解本质矩阵 E E E 在编程下的代码不难,但是推导过程极其复杂,博主在这里就不叙述了。

import numpy as np  
  
# 假设你已经有了一个本质矩阵E  
E = np.array([[...], [...], [...]])  # 用你的本质矩阵替换这里的占位符  
  
# 对E进行奇异值分解  
U, S, Vt = np.linalg.svd(E)  
  
# 根据SVD分解的结果恢复旋转矩阵R和平移向量t  
W = np.array([[0, -1, 0], [1, 0, 0], [0, 0, 1]])  
R1 = U @ W @ Vt  
R2 = U @ W.T @ Vt  
  
# 由于t的方向是不确定的,我们通常选择使t的最后一个分量为正的那个解  
t1 = U[:, 2]  
t2 = -U[:, 2]  
  
# 选择合适的R和t组合  
if np.linalg.det(R1) * np.linalg.det(np.eye(3) - R1) < 0:  
    R, t = R2, t2  
else:  
    R, t = R1, t1  
  
# 现在你有了旋转矩阵R和平移向量t  
print("Rotation matrix R:")  
print(R)  
print("Translation vector t:")  
print(t)

2.3 欧式结构恢复歧义

 1. 在没有先验信息的情况下,我们求解出来的解跟真实解是存在一个相似变换关系(旋转、平移、缩放)。

 2. 度量重构:恢复的场景与真实场景之间仅存在相似变换的重构。如果欧式结构恢复后能达到这种重构的话,那就可以说的上恢复效果是很不错了。

在这里插入图片描述

在这里插入图片描述

三、仿射结构恢复

3.1 概述

 1. 仿射结构恢复问题:摄像机为仿射相机,内外参数均未知。 一般来说仿射相机代表为弱透视投影摄像机。

 2. 下面图中所有坐标使用欧式坐标,对于仿射变换而言 z z z 轴的 m 3 X = 1 m_3X=1 m3X=1,所以经过等式变换世界坐标的欧式坐标与像平面欧式坐标关系为 x E = A X E + b x^E=AX^E+b xE=AXE+b。其中 A 2 ∗ 3 , b 2 ∗ 1 A_{2∗3},b_{2∗1} A23b21

在这里插入图片描述

 3. 仿射结构恢复问题可以建模为:已知 n n n 个三维点 X j X_j Xj m m m 张图像中的对应点的像素坐标为 x i j x_{ij} xij,且 x i j = A i X j + b i x_{ij}=A_iX_j+b_i xij=AiXj+bi,其中第 i i i 张图片对应的仿射相机的投影矩阵为 M i M_i Mi。求解 n n n 个三维点 X j X_j Xj 的坐标以及 m m m 个仿射相机的投影矩阵中的 A i A_i Ai b i b_i bi ( i = 1 , 2 , . . . , m i=1,2,...,m i=1,2,...,m)。

在这里插入图片描述

3.2 因式分解法

 1. 数据中心化:对于所有像平面点和世界坐标的三维点,分别减去像平面点和三维点的质心,建立新的关系,可知 x ^ i j = A i X ^ j \widehat{x}_{ij}=A_i\widehat{X}_j x ij=AiX j。其中 x ^ i j = x i j − x ˉ i j \widehat{x}_{ij}=x_{ij}-\bar{x}_{ij} x ij=xijxˉij X ^ j = X j − X ˉ j \widehat{X}_j=X_j-\bar{X}_j X j=XjXˉj。通过数据中心化消掉了 b b b 的影响。

 2. 如果3D点的质心=世界坐标系的中心,那么减去的均值为 0 0 0,所以 x ^ i j = A i X j \widehat{x}_{ij}=A_i{X}_j x ij=AiXj

在这里插入图片描述

 3. 矩阵形式如下所示。接下来我们要将 D 2 m ∗ n D_{2m*n} D2mn 分解为 M 2 m ∗ 3 M_{2m*3} M2m3 S 3 ∗ n S_{3*n} S3n,即因式分解。

在这里插入图片描述

在这里插入图片描述

 4. 由于 M M M S S S 的秩为 3 3 3,所以 D D D 的秩为 3 3 3,我们对 D 2 m ∗ n D_{2m*n} D2mn 矩阵进行奇异值分解。可以得到 D 2 m ∗ n = U 2 m ∗ 3 × W 3 ∗ 3 × V 3 ∗ n D_{2m*n}=U_{2m*3} \times W_{3*3} \times V_{3*n} D2mn=U2m3×W33×V3n

在这里插入图片描述

在这里插入图片描述

3.3 总结

在这里插入图片描述

3.4 仿射结构恢复歧义

 1. 仿射结构恢复歧义:投影矩阵存在一个可逆 3 ∗ 3 3*3 33 矩阵的变换,也就是差了一个仿射变换的矩阵系数。对于歧义我们需要引入其他约束来解决歧义。

在这里插入图片描述

 2. 另外对于给定 m m m 个相机, n n n 3 3 3 维点情况下,我们将有 2 m n 2mn 2mn 个等式, 8 m + 3 n − 8 8m+3n-8 8m+3n8 个未知量。

在这里插入图片描述

  • 26
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 视觉几何三维重建是指利用摄像机拍摄的多个视角下的图像,通过计算机图形学算法获得三维模型的过程。其中,openmvs是一种基于MVS(多视几何重建)实现的三维重建工具。 OpenMVS是一个开源的三维重建工具,基于MVS算法,可以实现从多个图像中生成高精度的三维模型。OpenMVS的几何重建算法主要是采用光束法,通过对图像进行矩阵重建来计算相机位置和三角形点云。OpenMVS的几何重建方法相对于其他算法具有较高的稳定性和精度。 在OpenMVS的源码分析中,主要包括三个部分:几何重建、点云和网格处理。几何重建是基于多视几何的,通过将多个图像的视角转化到同一个坐标系中,可以计算出三角形的点云。点云处理主要包括点云优化和稠密重建。网格处理则是在点云的基础上生成三角形网格模型。 OpenMVS的优势在于能够充分利用多视几何的信息,提高三维重建的精度和效率。而且该工具具有良好的可扩展性和适应性,可以在不同场景下应用。同时,OpenMVS的开源代码也为研究者提供了一个可靠的研究平台,进行更深入的算法研究和开发。 总之,视觉几何三维重建是一项非常复杂的任务,而OpenMVS作为一个优秀的三维重建工具,通过独特的几何重建算法和优秀的可扩展性,加速了三维重建的研究和应用。 ### 回答2: 首先,视觉几何三维重建是一项重要的计算机视觉技术,其主要目的是利用多视角图像或视频序列来恢复场景的三维结构。在该过程中,重建算法必须解决诸多技术难题,如图像匹配、相机姿态估计、点云配准、三维重建等。 而OpenMVS则是一款优秀的三维重建软件,其核心算法基于多视几何,能够高效、精确地处理大规模三维数据。具体来说,OpenMVS采用稀疏点云表示法(Sparse Point Cloud)和密集点云表示法(Dense Point Cloud)来表示场景中的点云信息,其中稀疏点云用于初始匹配,密集点云用于表面重建。 在实现中,OpenMVS采用先进的图像流水线(Image Pipeline)来处理输入的图像序列,包括预处理(Pre-processing)、特征提取(Feature Extraction)、特征匹配(Feature Matching)等多个步骤。在此基础上,OpenMVS还提供了多种优化方法,如基于非线性优化的相机姿态估计、自适应曲率滤波等,以进一步提高重建效果。 值得指出的是,OpenMVS作为一款开源软件,其源代码也是完全开放的。此外,OpenMVS还具有友好的用户界面和丰富的文档,能够帮助用户快速上手并实现高质量的三维重建

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冒冒菜菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值