我正在尝试在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
如果我使用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.]]]