就像问题所说的那样,我正在寻找一个完整的、最小的、运动结构(又名 3D 重建)管道的工作示例。
我马上说我没有相机参数。我不知道焦距或相机内部结构。因此,90% 的示例/教程都是 无效 的。
关于这个主题有很多问题,但代码只是片段,而不是完整的 SfM 过程。许多指令是矛盾的,或者只是猜测,并且开源外部库很难遵循。
所以我正在寻找一个简短的、完整的、最小的、可行的示例。最重要的是工作要求,因为太多的代码会产生不好的结果。
我已经用下面的代码对其进行了尝试。我使用匹配对的合成数据,因此没有噪音或不良对应问题需要解决。目标是从 2 个视图重建一个立方体(8 个 3d 点),每个视图有 8 个 2d 点。然而,最终的结果却很糟糕。没有立方体形状的外观。(我尝试过标准化和集中数据,这不是问题)。
任何能够提供更好的最小工作示例,或者指出我的尝试有什么问题的人,我们将不胜感激。
import cv2
import numpy as np
import scipy.linalg
def combineTR(T,R): #turn a translation vector and a rotation matrix into one 3x4 projection matrix
T4 = np.eye(4)
T4[:3, 3] = T # make it 4x4 so we can dot product it
R4 = …Run Code Online (Sandbox Code Playgroud) 我正在尝试从多个 2d 图像重建 3d 形状。我已经计算了一个基本矩阵,但现在我不知道如何处理它。
我在堆栈溢出和学术论文中发现了多个相互矛盾的答案。例如,Here说您需要从基本矩阵计算旋转和平移矩阵。
这里说你需要找到相机矩阵。
这里说你需要找到同形异义词。
这里说你需要找到对极线。
是哪个??(我该怎么做?我读过H&Z 的书,但我不明白。它说我可以“轻松”使用结果 9.14 中的“直接公式”,但结果 9.14 既不容易也不容易理解。)
堆栈溢出需要代码,所以这是我目前所拥有的:
# let's create some sample data
Wpts = np.array([[1, 1, 1, 1], # A Cube in world points
[1, 2, 1, 1],
[2, 1, 1, 1],
[2, 2, 1, 1],
[1, 1, 2, 1],
[1, 2, 2, 1],
[2, 1, 2, 1],
[2, 2, 2, 1]])
Cpts = np.array([[0, 4, 0, 1], #slightly up
[4, 0, 0, …Run Code Online (Sandbox Code Playgroud)