0

Я пытаюсь извлечь матрицу гомографии между двумя изображениями. Оригинальное плоское изображение и другое изображение, которое содержит первый. Я следую инструкциям в этом уроке https://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_feature_homography/py_feature_homography.html#feature-homography.Opencv: Хорошие совпадения, но неправильная гомография

Найденные совпадения выглядят великолепно, но при рисовании окна, содержащей изображение, оно выглядит неправильно, потому что оно не содержит изображения ... но одна из границ в порядке ... Так что происходит? Является ли матрица гомологии неправильной или это просто проблема визуализации?

Bad bounding box

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

M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0) 
matchesMask = mask.ravel().tolist() 

h,w = self.poster_original.shape 
pts = np.float32([ [0,0],[w-1,h-1],[w-1,0],[0,h-1]]).reshape(-1,1,2) 
dst = cv2.perspectiveTransform(pts,M) 
self.undistorted_camera_image= cv2.polylines(self.undistorted_camera_image,[np.int32(dst)],True,255,3, cv2.LINE_AA) 

EDIT: Изменение порядка углов, чтобы:

pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2) 

Я получаю такие вещи, как:

bb2

bb3

Это выглядит немного по-другому, но все еще не то, что я ожидал.

+0

Что вы имеете в виду «это неправильно»? –

+0

Я ожидаю рамки вокруг изображения ... –

+0

Не знаете, на какой ограничительной рамке вы ссылаетесь. –

ответ

0

Когда вы определяете blunding окно, необходимо указать эти углы

pts = np.float32([ [0,0],[w-1,h-1],[w-1,0],[0,h-1]]).reshape(-1,1,2) 

но пример использует

pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2) 

Их будет образовывать квадрат (верхний левый -> нижний левый -> дно -right -> top-right), ваш будет формировать что-то другое (вверху слева -> внизу справа -> вверху справа -> внизу слева).

+0

Справа. У вас есть точка, но она еще не решена ... Я обновил вопрос. Благодаря! –

0

Если я не ошибаюсь, гомография правильная: два из углов и выравнивание линий являются полностью правильными.

Проблема возникает, когда есть углы плаката, которые находятся за камерой .... Поскольку они находятся позади, проекция точки не имеет смысла: вы не можете проецировать трехмерную точку, находящуюся в отрицательная часть оси opitcal, поэтому рисование углов плаката не имеет никакого смысла, однако гомография правильна.

Это объясняет, почему в других изображениях, где вы можете увидеть весь плакат, я могу прекрасно рисовать границы плаката.

Пожалуйста, исправьте меня, если я ошибаюсь

+0

вы можете попробовать это, покрасив/трансформируя не всю коробку, но, например, центр коробки или половину коробки или сетку по всей коробке. – Micka

 Смежные вопросы

  • Нет связанных вопросов^_^