Как найти ориентацию изображения в сцене с Flann Feature Matching в OpenCV
Итак, я смог получить совпадения в характерных точках на двух изображениях, одном изображении запроса и другом изображении сцены, например:
flann = cv2.FlannBasedMatcher(index_params,search_params)
matches = flann.match(des1,des2)
Теперь, когда у меня есть совпадение, как я узнаю, как изображение запроса ориентируется в изображении сцены. Могу ли я узнать угол или масштаб на основе этих совпадений?
Я вижу distance
собственность на совпадение - но я не понимаю, как мы можем использовать это, чтобы найти ориентацию.
0 ответов
Расстояние - это расстояние между точками в "векторном пространстве дескриптора". Это не расстояние "X,Y".
Напомнить о процессе:
- найти ключевые точки на обеих картинках
- Оценка "совпадений" = расстояние между клавишами, сравниваемое по парам
- Удалить плохие совпадения (соотношение, перекрестная проверка...)
- Используйте расчет гомографии, чтобы оценить преобразование, используемое между двумя изображениями (перевод, вращение...)
При необходимости отфильтруйте гомографию = "Эта матрица преобразования выглядит / выглядит не очень хорошо".
def ransac_filter(matches, pic1, pic2): MIN_MATCH_COUNT = 10 good = [] transformation_matrix = None if len(matches) > MIN_MATCH_COUNT: src_pts = np.float32([pic1.key_points[m.queryIdx].pt for m in matches]).reshape(-1, 1, 2) dst_pts = np.float32([pic2.key_points[m.trainIdx].pt for m in matches]).reshape(-1, 1, 2) # Find the transformation between points transformation_matrix, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0) # Get a mask list for matches = A list that says "This match is an in/out-lier" matchesMask = mask.ravel().tolist() # Filter the matches list thanks to the mask for i, element in enumerate(matchesMask): if element == 1: good.append(matches[i]) pic1.transformation_matrix = transformation_matrix pic1.matchesMask = matchesMask else: logger = logging.getLogger() logger.info("not enough matches") return good, transformation_matrix
Несколько вдохновленный от: https://docs.opencv.org/3.1.0/d1/de0/tutorial_py_feature_homography.html