панорама с несколькими изображениями - PullRequest
0 голосов
/ 04 мая 2020

m пытается реализовать сшивание панорамы с нуля. Я использовал sift, выяснил ключевые точки и использовал свое собственное соответствие al go, нашел матрицу гомографии с ransa c. но когда я пытаюсь использовать cv.warpperspective, мой результат выглядит примерно так. введите описание изображения здесь

Мой код выглядит следующим образом:

    '''warp img2 to img1 with homograph H'''
    h1,w1 = img1.shape[:2]
    h2,w2 = img2.shape[:2]
    pts1 = np.float32([[0,0],[0,h1],[w1,h1],[w1,0]]).reshape(-1,1,2)
    pts2 = np.float32([[0,0],[0,h2],[w2,h2],[w2,0]]).reshape(-1,1,2)
    pts2_ = cv2.perspectiveTransform(pts2, H)
    pts = np.concatenate((pts1, pts2_), axis=0)
    [xmin, ymin] = np.int32(pts.min(axis=0).ravel() - 0.5)
    [xmax, ymax] = np.int32(pts.max(axis=0).ravel() + 0.5)
    t = [-xmin,-ymin]
    Ht = np.array([[1,0,t[0]],[0,1,t[1]],[0,0,1]]) # translate

    result = cv2.warpPerspective(img2, Ht.dot(H), (xmax-xmin+img1.shape[1], ymax-ymin))
    result[t[1]:h1+t[1],t[0]:w1+t[0]] = img2
    return result

моя матрица гомографии это: матрица ([[- 1.58931135e + 00, -1.61963582e-01, 2.68519685e + 02], [-1.54642982e + 00, -1.47799266e-01, 2.55526233e + 02], [-5.96691362e-03, -5.91230567e-04, 1.00000000e + 00]]) код для сравнения грубой силы:


mat=[]
d=[]
(s,b)=des1.shape
(u,v)=des2.shape
for k in range(s):
    for l in range(u):
        p=np.linalg.norm(des1[k][:]-des2[l][:]) #calculating euclidean distance between descriptor vectors.
        d.append(p)
    ind=d.index(min(d))
    o=matcher(k,ind,d[0]) #creating the matcher object with min euclidean dist and indexs.
    mat.append(o)
    d.clear()
...