opencv EstimationRigidTransform: Как получить глобальный масштаб?

Я использую OpenCV EstimRigidTransform для стабилизации серии видеокадров, которая работает очень хорошо.

Функция возвращает матрицу преобразования 2x3 M:

|  a_11 a_12 b_1 |
| -a_12 a_11 b_2 |

Насколько я понимаю, элементы b представляют перевод, а элементы a используются для масштабирования и поворота.

Я бы хотел получить глобальный масштаб из M - значения, которое представляет коэффициент масштабирования камеры. Как я могу правильно рассчитать это по a значениям?


Чтобы немного пояснить, что я хочу получить, вот пример. Скажем, ratingRigidTransform вычисляет матрицу преобразования M для второго кадра ниже относительно первого кадра:

Глобальный коэффициент масштабирования в этом случае должен быть равен 2. Мой вопрос: как получить это значение из M?


person Alex B.    schedule 26.05.2014    source источник


Ответы (1)


Хорошо, после дополнительного поиска я нашел здесь отличный ответ: https://math.stackexchange.com/questions/13150/extracting-rotation-scale-values-from-2d-transformation-matrix

Где «масштабирование» представлено s_x и s_y. Эти два значения в основном будут равны (поскольку масштабирование видео, снятого камерами, одинаково в обоих направлениях), поэтому я могу выбрать любое из них.

person Alex B.    schedule 26.05.2014
comment
если вы хотите это проверить, вы можете сначала составить свою собственную матрицу преобразования (не с помощью формулы, а с умножением матриц) и использовать свое разложение для этой матрицы. - person Micka; 27.05.2014
comment
Кстати, есть ли способ извлечь центр вращения с помощью RigidTransform Matrix? - person Changju.rhee; 01.07.2020