Вычисление масштаба, поворота и перевода из матрицы гомографии

Я пытаюсь вычислить масштаб, вращение и перевод между двумя последовательными кадрами видео. Таким образом, в основном я сопоставил ключевые точки, а затем использовал функцию opencv findHomography() рассчитать матрицу гомографии.
homography = findHomography(feature1 , feature2 , CV_RANSAC); //feature1 and feature2 are matched keypoints

Мой вопрос: как я могу использовать эту матрицу для вычисления масштаба, поворота и перевода?
Может ли кто-нибудь предоставить мне код или объяснение того, как это сделать?

9

Решение

если вы можете использовать OpenCV 3.0, этот метод разложения доступен
http://docs.opencv.org/3.0-beta/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#decomposehomographymat

5

Другие решения

Для оценки трехмерного преобразования и поворота, вызванного гомографией, существует несколько подходов. Один из них предоставляет закрытые формулы для разложения гомографии, но они очень сложны. Кроме того, решения никогда не бывают уникальными.

К счастью, OpenCV 3 уже реализует эту декомпозицию (decomposeHomographyMat). Учитывая гомографию и правильно масштабированную встроенную матрицу, функция обеспечивает набор из четырех возможных поворотов и переносов.

0

Правильный ответ — использовать гомографию, как она определена dst = H. Исследуйте, что он делает с небольшими сегментами вокруг определенной точки.
Для перевода просто выберите одну точку:
Перевод = dst-H .src
Для вращения исследуем две точки p1 и p2. p1 ‘= H. p1, p2 ‘= H. p2. Теперь просто вычислите угол между векторами p1 p2 и p1’p2 ‘.
Для масштаба вы можете использовать тот же трюк, но теперь просто сравните длину
| p1 p2 | и | p1’p2 ‘|. Чтобы быть тарифом, используйте другой сегмент, ортогональный первому, и усредните результат. Вы увидите, что нет постоянного масштабного коэффициента или коэффициента перевода. Они будут зависеть от местоположения src.

0

Предположим, что первая и вторая ячейки третьего ряда равны 0.

Третий столбец матрицы содержит перевод в X, перевод в Y и 1 соответственно.

Что касается оставшейся верхней левой части 2х2 матрицы гомографии (которая содержит сдвиг, масштабирование и вращение), ее можно разложить, следуя различным методам. Здесь объясняется простой и быстрый способ (этот метод предполагает использование обратимой матрицы): https://math.stackexchange.com/questions/78137/decomposition-of-a-nonsquare-affine-matrix

0

Вопрос, кажется, о двухмерных параметрах. Гомографическая матрица фиксирует искажения перспективы. Если приложение не создает большого искажения перспективы, можно приблизить преобразование реального мира, используя аффинную матрицу преобразования (которая использует только масштаб, вращение, перемещение и отсутствие сдвига / переворачивания). Следующая ссылка даст представление о разложении аффинного преобразования на различные параметры.

https://math.stackexchange.com/questions/612006/decomposing-an-affine-transformation

0
По вопросам рекламы [email protected]