Задать вопрос
cronk
@cronk
Делаю графику для кино. Роботы, взрывы, пиу-пиу!

Как найти положение камеры по трем точкам в пространстве?

412a921c60e647a4a24c6a4e3543f673.png
Уже некоторое время в моей голове сидит идея скрипта для Блендера, который бы находил положение камеры в прострастве по известным точкам.

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

Подскажите, в каком направлении копать?
Скрипт будет писаться на третьем питоне, может есть какие-то полезные пакеты?
  • Вопрос задан
  • 4846 просмотров
Подписаться 3 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
Mrrl
@Mrrl
Заводчик кардиганов
Непростая задача.
Сначала по фотографии измеряете углы между лучами, а по модели - расстояния между точками. Потом обозначаете через x,y,z неизвестные расстояния от камеры до точек (длину каждого луча), и записываете уравнения из теоремы косинусов:
x^2-2*a*x*y+y^2=P^2
x^2-2*b*x*z+z^2=Q^2
y^2-2*c*y*z+z^2=R^2
Здесь a,b,c - косинусы углов между лучами, а P,Q,R - расстояния.
Дальше надо решить эту систему. Теоретически, она сводится к уравнению 8-й степени от одной переменной z. MAPLE смог найти этот многочлен, он занимает чуть больше экрана. Не знаю, хороший ли это вариант - может быть, и да. Можно попытаться решить систему численно - перебрать разные стартовые значения x,y,z и искать корень методом Ньютона. Но учтите, что система плохая - у неё вполне могут найтись 4 близких корня с положительными x,y,z. А могут и не найтись - тогда будут локальные минимумы. Можно перебрать расстояние x с мелким шагом. Для каждого x найти два варианта y, два варианта z, подставить их в третье уравнение, и из самой лучшей тройки начать искать решение - можно методом Ньютона, но можно и делением отрезка пополам.
После того, как x,y,z найдены, находите положение центра камеры - как точку пересечения трёх сфер. И дальше надо найти правильную ориентацию. Это довольно противно, но должно быть не очень сложно (по сравнению со всеми предыдущими шагами).
Ответ написан
@Urrus
Это задача Perspective-n-Point (PnP) - а она не такая простая, как кажется, и решается множеством разных способов (типа ePnP: cvlabwww.epfl.ch/~lepetit/papers/lepetit_ijcv08.pdf, с использованием RANSAC, и т.д). В общем, математики там полно, поэтому лучше найти уже готовую библиотеку, которая умеет делать такие вещи. Сам я пользовался только методами из OpenCV (типа solvePnP(...), solvePnPRansac(...)), она есть для питона, но кажется будет довольно жирновато тащить ее только ради плагина.
Ответ написан
Комментировать
engine9
@engine9
Разрабатываю интерфейсы и трехмерные презентации.
Может быть я не совсем корректно отвечу, но трекинг с видео штатными методами способен восстановить расстояние и путь камеры в пространстве. Но программе нужно указать некоторые подсказки, начиная от точек, заканчивая направлением "верха" сцены.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
SpectrumData Екатеринбург
от 200 000 до 300 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
18 янв. 2025, в 14:04
10000 руб./за проект
18 янв. 2025, в 13:29
6000 руб./за проект
18 янв. 2025, в 13:29
20000 руб./за проект