我该如何处理基本矩阵?

约翰·克特吉克

我正在尝试从多个2d图像中重建3d形状。我已经计算了一个基本矩阵,但是现在我不知道该怎么做。

我在堆栈溢出和学术论文中发现了多个相互矛盾的答案。例如,这里说您需要从基本矩阵计算旋转和平移矩阵。

这里说您需要找到相机矩阵。

这里说你需要找到单应性。

这里说您需要找到对极线。

是哪一个?(我该怎么做?我读过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, 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?

编辑:我不知道相机参数

烤盘

基本矩阵

首先,听基本矩阵歌曲;)。

基本矩阵显示2张图像(x'-图像2,x-图像1)中的点对应关系之间的数学关系。“这意味着,对所有对应点都成立eq1(维基百科)这也意味着,如果您有异常或不正确的点对应关系,则将直接影响基本矩阵的质量。

另外,对于三幅图像之间的点对应关系存在类似的结构,称为三焦点张量。

不可能仅使用基本矩阵的属性进行3d重建因为“对极几何是两个视图之间的固有投影几何。它与场景结构无关,并且仅取决于相机的内部参数和相对姿势。” (HZ,第239页)。

相机矩阵

参考您的问题,如何从多个图像中重建形状,您需要了解图像的相机矩阵(K',K)。摄像机矩阵是一个3x3矩阵,由摄像机焦距或主要距离(fx,fy)以及光学中心或主要点(cx,cy)组成。


eq2

您可以使用相机校准来导出相机矩阵。

基本矩阵

当您知道相机矩阵时,可以将基本矩阵扩展为基本矩阵E。


eq3

您可能会很草率地说您的基本面现在已经“校准”。

基本矩阵可用于获得第二张图片与第一张图片相比的旋转(旋转矩阵R)和平移(矢量t),直到投影重建为止t将是一个单位向量。为此,您可以使用OpenCV函数decomposeEssentialMatrecoverPose(使用检查性)或阅读HZ中的更多详细说明。

投影矩阵

了解平移和旋转后,您可以为图像建立投影矩阵。投影矩阵定义为eq4最后,您可以使用triangulation(triangulatePoints)导出图像点的3d坐标。我建议使用后续的包调整来接收正确的配置。openCV中还有一个SFM模块。

由于单应性或极线知识对于3d重建基本上不是必需的,因此我没有解释这些概念。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章