LINUX.ORG.RU

Прямое и обратное преобразование 3D в 2D

 ,


0

2

Ну с прямым преобразованием относительно просто: считаем матрицу камеры и перемножаем все наши вершины на эту матрицу или как-то иначе из 3D получаем 2D для экранного пространства. Куча статей с формулами, но без объяснений (или я слишком тупой, чтобы их понять).

А где и чего почитать на тему того, что я сфоткал спичечный коробок и имею координаты его вершин в экранном пространстве, я знаю его геометрию, я знаю примерные данные камеры (FoV), а вот как получить матрицу целиком? Иными словами, как работают трехмерные трекеры?

Если знаешь геометрию, то обтянуть 3D модельку текстурами очень просто, а если геометрию не знаешь, то никак (разве что извращения с фокусом, распознаванием границ объектов, но ошибок будет не просто много, а очень много).

peregrine ★★★★★ ()

Это целый класс проблем. Их обычно так и называют: «обратная задача». Точного решения нет, методы «в лоб» не работают из-за погрешностей в данных.

я знаю его геометрию, я знаю примерные данные камеры (FoV), а вот как получить матрицу целиком?

Разве? У тебя просто картинка, откуда ты знаешь его геометрию? Ты можешь сделать набор предположений о его форме, потом получить съёмку с другой точки, сгенерировать новый набор предположений, пересечь его с имеющимся. И так далее.

Иными словами, как работают трехмерные трекеры?

По-моему, они жульничают, подсвечивая лазером линию. По фотографии этой линии делаются выводы об относительном положении частей объекта в пространстве.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

По-моему, они жульничают, подсвечивая лазером линию. По фотографии этой линии делаются выводы об относительном положении частей объекта в пространстве.

А ещё есть Time of Flight (ToF) техника: послали кучу световых импульсов (как сканер), потом по отличию в фазе вернувшихся узнали расстояние. Лишь бы было поменьше двух крайностей: зеркальных поверхностей да материалов плохо отражающих / сильно рассеивающих свет.

gag ★★★★★ ()

На каждую точку экранного пространства проецируются все точки из трехмерной линии. Зная параметры камеры (fov), можешь построить матрицу проекции из 3д в экранное пространство камеры. Потом все известные тебе вершины коробка преобразуешь из экранной проекции в трехмерные линии при помощи обратной матрицы. Добавляешь к этим линиям свои знания о геометрии объекта и получаешь систему линейных уравнений. Решаешь ее, получаешь положение объекта в трехмерном пространстве.
Примерно так.

ddos3 ()
Ответ на: комментарий от peregrine

С геометрией у меня плохо, но задача была не о текстурках, а о поиске матрицы преобразования камеры. Условно говоря, совмещение пола комнаты на фото и в своей сцене, подгонка горизонта и все такое.

ruzisufaka ()
Ответ на: комментарий от i-rinat

Разве? У тебя просто картинка, откуда ты знаешь его геометрию?

Это сейчас моден безметковый трекинг, как это происходит - для меня загадка, более похожая на магию.

Но раньше это делалось примерно так: на зеленую стену вешались маркеры в виде «шахматки», как наиболее контрастные объекты, вешались строго на определенном расстоянии, равно как и на соседних стенах/полу. Потом эти маркеры трекались в двумерном пространстве + забивались реальные расстояния от маркеров (ну полазить по стенам и замерять линейкой). Ко всему этому полагалось выбрать тип оптики. Все это было в древних версиях 3D Studio Max, но даже с учетом всего этого, это работало достаточно медленно, что намекает на какой-то брутфорс.

Нынче же так никто не делает, на хромак если и вешают маркеры, то скорее для подстраховки, нынче модно вешать маркеры на людей и вещи, снимать их обычной или даже парой ик-камер, а на выходе иметь реконструированную сцену. Еще у людей откуда-то тысячи лидар-сканеров, я понятия не имею откуда. Такое ощущение, что их где-то продают по 5 баксов за пачку.

Но вернемся к нашей фотке. В принципе, даже без маркеров и предварительной подготовки, каким-то образом можно найти данные сцены. К примеру, это умеет Адоб в своем Doll House: https://www.youtube.com/watch?v=P4N8c8qftlY / или в другой волшебной опердени: https://www.youtube.com/watch?v=_cPFEANiLTA

Как все это работает я слабо понимаю, но я делаю редактор видео и мне нужны базовые возможности трекинга. Трекинг маркеров я еще кое-как осилю сделать, а вот как облако найденного трансформировать в матрицу, даже если известна геометрия?

ruzisufaka ()
Ответ на: комментарий от gag

А ещё есть Time of Flight (ToF) техника: послали кучу световых импульсов (как сканер), потом по отличию в фазе вернувшихся узнали расстояние. Лишь бы было поменьше двух крайностей: зеркальных поверхностей да материалов плохо отражающих / сильно рассеивающих свет.

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

ruzisufaka ()
Ответ на: комментарий от anonymous

Спасибо, надо будет блендер заюзать. А у него нету никакого IPC, чтобы из своего процесса дергать? Биндинги для недоязыка не интересуют, хочу в рантайме из своего приложения им рулить и получать данные.

ruzisufaka ()
Ответ на: комментарий от i-rinat

По-моему, они жульничают, подсвечивая лазером линию. По фотографии этой линии делаются выводы об относительном положении частей объекта в пространстве.

Ну вот ниипонцы без лазеров делали :)

https://youtu.be/DbPxvBbZAhs

Stil ★★★★★ ()