使用DLT查找单应性

时间:2019-03-27 22:29:12

标签: opencv computer-vision

我正在尝试在Python中计算单应性矩阵,而不使用Opencv方法创建全景图像。

我已经阅读了有关DLT方法的信息,并尝试如下实现。

def find_homography(src_pts, dst_pts):
    A = []
    for i, j in zip(src_pts, dst_pts):
        #print(i[0], j[0])
        pi = [[-i[0][0], -i[0][1],-1, 0, 0, 0, i[0][0]*j[0][0], i[0][1]*j[0][0], j[0][0]],
          [0, 0, 0, -i[0][0], -i[0][1], -1, i[0][0]*j[0][1], i[0][1]*j[0][1], j[0][1]]]
        A.append(pi)

    A = np.asarray(A).reshape(len(src_pts)*2, 9)
    S,U,V = np.linalg.svd(A, full_matrices=True)
    Vp = V.T.conjugate()
    H = (Vp[:,8]).reshape(3,3)
    return H

这是我要计算单应性的两个图像 img1img2

如果我使用cv2.findHomography,我得到的预期输出是-https://imgur.com/MOVLRsX

我已经完成了其他方法,例如查找描述符和图像正确变形。有人可以在单应性方面帮助我吗?

编辑1:我已经使用OpenCv的bf.knnmatch方法交叉检查了所有匹配点。

这是我的单应性矩阵:

[[ 1.38736415e-04  4.11869980e-04 -9.36108142e-01]
 [ 5.23893011e-05  1.54301257e-04 -3.51711856e-01]
 [ 4.75687354e-08  1.40318921e-07 -3.19712795e-04]]

这是Opencv2的Homography矩阵

[[ 1.45580422e+00  9.59778414e-03 -2.07502932e+03]
 [ 1.66717944e-01  1.35009485e+00 -4.32150789e+02]
 [ 1.06711245e-04  3.10102722e-05  1.00000000e+00]]

编辑2:有500个匹配的关键点,从两个图像中都显示了五个:

image1

[[[2563. 1399.]]

 [[2954. 1296.]]

 [[3019. 1294.]]

 [[3034. 1283.]]

 [[2194. 1436.]]]

图片2

[[[3291.  849.]]

 [[3430.  776.]]

 [[2608. 1117.]]

 [[3447.  773.]]

 [[3449.  770.]]]

0 个答案:

没有答案