2014-09-04 3 views
8

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

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

+1

ключевым словом является «гомографическое разложение». Afair вы можете извлечь вращение с помощью QR-декомпозиции, но вам лучше поработать с Google ... – Micka

+1

Возможно, этот (или его ссылки) поможет: http://stackoverflow.com/questions/15420693/how-to-get- rot-translation-shear-from-a-3x3-homography-matrix-in-c-sharp – Micka

+1

, а этот =) http://hal.archives-ouvertes.fr/docs/00/17/47/39/PDF /RR-6303.pdf – Micka

ответ

0

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

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

1

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

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

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

+0

Перевод в 3D не может быть полностью восстановлен. – Vlad

0

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

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^