Я использую openCV эстимейт RigidTransform для стабилизации серии видеокадров, что работает очень хорошо.
Функция возвращает матрицу преобразования 2×3 M:
| a_11 a_12 b_1 |
| -a_12 a_11 b_2 |
Насколько я понимаю b
элементы представляют перевод, а a
элементы используются для масштабирования и вращения.
То, что я хотел бы сделать, это получить глобальный масштаб от M — значение, которое представляет коэффициент масштабирования камеры. Как я могу рассчитать это правильно из a
ценности?
Чтобы уточнить немного, что я хочу получить, вот пример. Допустим, valuRigidTransform вычисляет матрицу M преобразования для второго нижеприведенного кадра относительно первого кадра:
Глобальный коэффициент масштабирования в этом случае должен быть равным 2. Мой вопрос: как получить это значение из M?
Хорошо, после дополнительного поиска я нашел отличный ответ здесь: https://math.stackexchange.com/questions/13150/extracting-rotation-scale-values-from-2d-transformation-matrix
Где «масштабирование» представлено s_x и s_y. Эти два значения будут в основном равны (так как зум в видео, снятом камерами, одинаков в обоих направлениях), поэтому я могу выбрать одно из них.