【发布时间】:2019-11-24 03:27:41
【问题描述】:
我正在尝试从多个 2d 图像重建 3d 形状。 我已经计算了一个基本矩阵,但现在我不知道如何处理它。
我在堆栈溢出和学术论文中发现了多个相互矛盾的答案。 例如,Here 表示您需要根据基本矩阵计算旋转和平移矩阵。
Here 说你需要找到相机矩阵。
Here 说你需要找到同形异义词。
Here 说你需要找到极线。
它是什么? (我该怎么做?我已经阅读了the H&Z book,但我不明白。它说我可以“轻松”在结果 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, 1],
[-4, 0, 0, 1],
[0, -4, 0, 1]])
Cangles = np.array([[0, -1, 0], #slightly looking down
[-1, 0, 0],
[1, 0, 0],
[0,1,0]])
views = []
transforms = []
clen = len(Cpts)
for i in range(clen):
cangle = Cangles[i]
cpt = Cpts[i]
transform = cameraTransformMatrix(cangle, cpt)
transforms.append(transform)
newpts = np.dot(Wpts, transform.T)
view = cameraView(newpts)
views.append(view)
H = cv2.findFundamentalMat(views[0], views[1])[0]
## now what??? How do I recover the cube shape?
编辑:我不知道相机参数
【问题讨论】:
-
可能是错误的,因为我还没有在那个领域工作,但是基本矩阵没有为您提供有关相机移动/位移的信息,并且您可以通过光线交叉使用立体重建(以最天真的方式)?
-
这就是我的想法,但我看到关于如何做到这一点的相互矛盾的报告
-
这篇文章很棒!我之前在计算机视觉/自动驾驶汽车职位的面试中遇到过这个问题。
标签: python opencv matrix 3d fundamental-matrix