Как я могу получить больше вкладышей при использовании ransac? - PullRequest
1 голос
/ 01 июля 2019
matches = sorted(matches, key = lambda x: x.distance)
src_pts = np.float32([ kp1[m.queryIdx].pt for m in matches ]).reshape(-1,1,2)
dst_pts = np.float32([ kp2[m.trainIdx].pt for m in matches ]).reshape(-1,1,2)
M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
matchesMask = mask.ravel().tolist()

Я использую значение в matchMask в качестве значений, которые оказываются слишком сильно затронутыми Ransac, я пытался получить только первые 100 лучших совпадений из совпадений, но процент выбросов все еще был слишком высоким.

1 Ответ

0 голосов
/ 08 июля 2019

cv2.findHomography обрабатывать пару точек как внутреннюю, если расстояние между исходной точкой и проекцией пункта назначения превышает ransacReprojThreshold (5,0 - в вашем коде):

norm(src_pts[i] - M * dst_pts[i]) > ransacReprojThreshold

ransacReprojThreshold - максимально допустимая ошибка перепроецирования для обработки пары точек в качестве инлайера.

Итак, если вы хотите найти 100 «лучших» совпадений, даже если ошибка перепроектирования превышает 5,0:

  1. создание массива пар: (пара точек и ошибка перепроецирования),
  2. сортировка по ошибке репроекции,
  3. взятие 100 точек с наименьшей ошибкой репроекции.
...