Я вычисляю гомографию между двумя изображениями img1
и img2
(изображения содержат в основном один плоский объект, поэтому гомография хорошо работает между ними), используя стандартные методы в OpenCV в python. А именно, я вычисляю совпадения точек между изображениями с помощью просеивания, а затем вызываю cv2.findHomography
.Гомография и масштабирование изображения в opencv
Чтобы сделать вычисления быстрее я масштабироваться вниз два изображения в small1
и small2
и выполнять расчеты на этих меньших копий, так что вычислить матрицу гомография H
, которая отображает small1
в small2
. Однако в конце я хотел бы рассчитать матрицу гомографии, чтобы проецировать одно полноразмерное изображение img1
на другое полноразмерное изображение img2
.
Я думал, что я мог бы просто преобразовать матрицу гомография H
следующим образом H_full_size = A * H * A_inverse
где A
матрица, представляющая масштабирование от img1
к small1
и A_inverse
является обратным. Однако это не работает. Если я применил cv2.warpPerspective
к уменьшенному изображению small1
с H
, все будет как ожидается, и результат (в основном) перекрывается с small2
. Если я применил cv2.warpPerspective
к полноразмерному изображению img1
с H_full_size
, результат не соответствует img2
.
Однако, если я проецирую точки совпадений (обнаруженные на уменьшенных изображениях) с использованием A
(используя что-то вроде projected_pts = cv2.perspectiveTransform(pts, A)
), а затем я вычислил H_full_size
из них, все работает нормально.
Любая идея, что я могу делать неправильно здесь?
Я пришел к тому же, хорошо «масштаба на противоположный », решение https://stackoverflow.com/a/48915151/2057762 – jns