фланг cv2: Как я могу ранжировать «хорошие» совпавшие дескрипторы, полученные из теста отношения Лоу? - PullRequest
0 голосов
/ 19 сентября 2018

Я хотел бы найти определенное количество похожих функций на двух разных изображениях.Я использую SURF, чтобы найти ключевые точки и дескрипторы, и FLANN, чтобы соответствовать дескрипторам.На основании теста коэффициента Лоу, хорошие совпадения могут быть выбраны.Из этих хороших матчей я хотел бы выбрать X лучших, и мне не удалось найти как.

Есть идеи?Вот мой код:

# Open images as grayscale
im1 = cv2.imread(path_to_image1, 0)
im2 = cv2.imread(path_to_image2, 0)

# Create SURF object and find keypoints and descriptors
surf1 = cv2.xfeatures2d.SURF_create(400, upright=0, extended=1)
kp1, des1 = surf1.detectAndCompute(im1, mask=mask_data)
surf2 = cv2.xfeatures2d.SURF_create(400, upright=0, extended=1)
kp2, des2 = surf2.detectAndCompute(im2, mask=mask_data)

# Match descriptor vectors using FLANN
flann_params = dict(algorithm=0, trees=5, table_number=6, key_size=12, multi_probe_level=1)  
search_params = dict(checks=50)  

flann = cv2.FlannBasedMatcher(flann_params, search_params)  
matches = flann.knnMatch(des1, des2, k=2)

# Select only the good matches
good_matches = [m for (m, n) in matches if m.distance < 0.7 * n.distance]  # ratio test as per Lowe's paper (Figure 11 in: https://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf)

rank_ good_matches  = ?

Допустим, у меня 3000 хороших совпадений (len (good_matches) = 3000).Как я могу оценить их?Я хотел бы выбрать 1000 лучших (из этих 3000).Как мне это заархивировать?

Заранее спасибо: -)

Никто?Может быть, кто-то из сообщества фотограмметров?

...