Как вычислить perspectiveTransform по 3 точкам?

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

Потом предмет поворачивают и перемещают. Мне нужно найти на сколько переместили и на сколько повернули. Если это всё происходит в одной плоскости, то справляется нормально и estimateAffine2D.

Но если, к примеру, угол предмета чуть-чуть поднять вверх, то вычисления уже не точные.

По идее, помог бы perspectiveTransform, для восстановления перспективы, но ему нужно 4 точки, а у меня есть только 3.

Подскажите, пожалуйста, есть ли в OpenCV какие-либо встроенные средства или может быть алгоритм какой?

Сейчас смотрю на solveP3P, но не могу придумать, что потом делать с векторами переноса и поворота.
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg
Любые ответы на любые вопросы
Перспективное преобразование - это матрица 4x4. Следовательно, чтобы уравнение с такой матрицей однозначно решалось, нужно задать 4 точки.

"Обмануть" математику вам вряд ли удастся, так как ваше знание об углах и расстояниях между имеющимися у вас точками вы уже использовали (потому что они, грубо говоря, хранятся в координатах этих трех точек).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы