import cv2 import numpy as np SOURCE_IMAGE1='../tea05.jpg' SOURCE_IMAGE2='../tea08.jpg' ## képek beolvasása img1 = cv2.imread(SOURCE_IMAGE1); img2 = cv2.imread(SOURCE_IMAGE2); ## a képet szürkeárnyalatossá konvertáljuk gray_img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) gray_img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) ## jellemzőpontok detektálása surf = cv2.xfeatures2d.SURF_create() keypoints1 = surf.detect(gray_img1, None) keypoints2 = surf.detect(gray_img2, None) ## kulcspont leírók számítása keypoints1, descriptors1 = surf.compute(gray_img1, keypoints1) keypoints2, descriptors2 = surf.compute(gray_img2, keypoints2) ## pontpárok keresése # FLANN parameterek FLANN_INDEX_KDTREE = 0 index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5) search_params = dict(checks=50) # or pass empty dictionary flann = cv2.FlannBasedMatcher(index_params,search_params) matches = flann.knnMatch(descriptors1,descriptors2,k=2) ## ez kNN-alapú, ## minden pontnak két lehetséges párja lehet # csak a jó párosításokat tároljuk el, amelyek átmentek a Lowe-teszten good = [] for m,n in matches: if m.distance < 0.7*n.distance: good.append(m) points1 = [] points2 = [] for m in good: points1.append(keypoints1[m.queryIdx].pt) points2.append(keypoints2[m.trainIdx].pt) points1, points2 = np.float32((points1, points2)) draw_params = dict(matchColor = (0,255,0), singlePointColor = (255,0,0), # matchesMask = matchesMask, flags = 0) matching_img = cv2.drawMatchesKnn(img1,keypoints1,img2,keypoints2,matches[:300],None) cv2.imwrite("matching_image.png", matching_img) ## A fundamentális mátrix meghatározása F, F_mask = cv2.findFundamentalMat(points1, points2, cv2.FM_8POINT) print("A fundamentális mátrix:") print(F)