我怎么处理基本矩阵?

2024-09-29 23:29:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从多个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?

编辑:我不知道相机参数


Tags: theinherenptransform矩阵arrayviews
2条回答

使用基本矩阵,可以确定摄像机矩阵p和p'的标准形式,如所述(HZ,pp254-256)。从这些相机矩阵,你可以理论上三角化一个投影重建,不同于真实场景的一个未知的投影变换。你知道吗

需要注意的是,线性三角剖分方法不适用于中所述的投影重建 (HZ,讨论,第313页)[“…这两种线性方法都不太适合投影重建,因为它们不是投影不变量。”] 因此,应采用上述推荐的三角剖分技术,以获得有价值的结果(这实际上是更多的工作要执行)。你知道吗

通过这种投影重建,您可以使用自校准方法,这种方法可以在某些情况下工作,但不会产生使用校准相机和利用基本矩阵计算运动参数所能获得的精度和鲁棒性。你知道吗

基本矩阵

首先,听fundamental matrix song;)。你知道吗

仅基本矩阵显示了两个图像(x'-图像2,x-图像1)中点对应之间的数学关系。”这意味着,对于所有对应点对,都保持eq1(Wikipedia)。这也意味着,如果你有离群值或不正确的点对应,它直接影响你的基本矩阵的质量。你知道吗

另外,3幅图像之间的点对应关系也存在类似的结构,称之为三焦点张量。你知道吗

仅使用基本矩阵的性质进行三维重建是不可能的,因为“极线几何是两个视图之间的固有投影几何”。它是 独立于场景结构,仅依赖于摄像机的内部参数 和相对姿势。”(赫兹,第239页)。你知道吗

摄像机矩阵

关于如何从多幅图像中重建形状的问题,您需要知道图像的相机矩阵(K',K)。相机矩阵是由相机焦距或主距离(fx,fy)以及光学中心或主点(cx,cy)组成的3x3矩阵。你知道吗


eq2

可以使用相机校准导出相机矩阵。你知道吗

本质矩阵

当你知道你的相机矩阵你可以扩展你的基本矩阵到一个基本矩阵E


eq3

你可以说你的基本矩阵现在已经“校准”了。你知道吗

基本矩阵可用于获得第二幅图像的旋转(旋转矩阵R)和平移(向量t),与第一幅图像进行比较,直到投影重建。t是单位向量。为此,您可以使用OpenCV函数decomposeEssentialMatrecoverPose(使用cheirality检查)或以HZ为单位阅读进一步的详细说明。你知道吗

投影矩阵

知道你的平移和旋转,你可以建立你的图像投影矩阵。投影矩阵定义为eq4。最后,可以使用三角剖分(triangulatePoints)导出图像点的三维坐标。我建议使用随后的包调整来接收正确的配置。openCV中还有一个sfm模块。你知道吗

由于单应性或极外线的知识是没有必要的三维重建我没有解释这些概念。你知道吗

相关问题 更多 >

    热门问题