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

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

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

Ответ 2

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

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

Ответ 3

Приведенная гомографическая матрица H:

    |H_00, H_01, H_02|
H = |H_10, H_11, H_12|
    |H_20, H_21, H_22|

Предположения:

H_20 = H_21 = 0 и нормализовано до H_22 = 1 для получения 8 DOF.

Перевод по осям x и y вычисляется напрямую из H:

tx = H_02
ty = H_12

2x2 в верхнем левом углу разлагается для вычисления сдвига, масштабирования и поворота. Простой и быстрый метод разложения объясняется здесь.

Примечание: этот метод предполагает использование обратимой матрицы.

Ответ 4

Правильный ответ - использовать гомографию, как она определена, dst = H ⋅ src и исследовать, что она делает с небольшими сегментами вокруг определенной точки.

Перевод

Учитывая одну точку, для перевода сделать

T = dst - (H ⋅ src)

вращение

Даны две точки р 1 и р 2

p 1= H ⋅ p 1

p 2= H ⋅ p 2

Теперь просто вычислите угол между векторами p 1, p 2 и p 1 'p 2 '.

Масштаб

Вы можете использовать тот же трюк, но теперь просто сравните длины: | p 1 p 2 | и | p 1 'p 2 ' |.

Чтобы быть справедливым, используйте другой сегмент, ортогональный первому, и усредните результат. Вы увидите, что нет постоянного масштабного коэффициента или коэффициента перевода. Они будут зависеть от местоположения src.

Ответ 5

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

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