Контекст высокого уровня:
В проекте Unity3D AR с помощью машинного обучения система обеспечивает соответствие между набором координат 2D-пикселей в изображении и тем же набором 3Dточки в мировой координате.Исходя из соответствия между этими двумя наборами, я хотел бы оценить позу камеры, которая привела к этому изображению.
Цель достижения низкого уровня:
Результаты моегоИсследования показывают, что я использую алгоритм PnP-Ransac.Perspective-n-Points - это название этой проблемы, которую я имею: нахождение позы камеры из совпадающих 2D-3D точек.Определение проблемы PnP: https://en.wikipedia.org/wiki/Perspective-n-Point
Что я пробовал
1) Я пытался найти PnP-решатель в ARKit, но не смог найти его, поэтому ядумаю, это не разоблачено.2) Я попытался использовать актив EmguCV из магазина, который должен позволить мне использовать openCV в моем проекте Unity.Документация OpenCV solvePnP: https://docs.opencv.org/3.3.0/d9/d0c/group__calib3d.html#ga50620f0e26e02caa2e9adc07b5fbf24e
Вопрос:
Существует ли PnP-решатель, представленный в платформе ARKit, и если нет, то как мне использовать PNP-решатель openCVправильно использовать оболочку EmguCV C # в проекте Unity (системы координат, о которых нужно знать, правильные параметры функций, чтобы обеспечить подобие встроенной матрицы камеры, как интерпретировать выходные данные, чтобы получить правильную позу камеры)?
Проблемы, с которыми я столкнулся, пытаясь ответить на вопрос:
Использование SolvePnPRansac привело к самопроизвольному сбою Unity-Editor, даже если я поместил его в блок try-catch (возможно, мои входные аргументы имели неожиданные форматы),У меня был больший успех с использованием только executePnP, но результаты не те, что я ожидаю.В документации говорится, что выходные векторы rvec и tvec соответствуют сдвигу и повороту, переносящим объект из системы координат модели в систему координат камеры.Так что, если бы я поместил камеру в (0,0,0), смотря в направлении -z, имея объект в tvec с эйлеровыми поворотами rvec, я бы ожидал, что визуализированный объект будет похож на изображение, которое я использовал для соответствия пиксель-координат,Неужели я не так понял?
У меня есть подозрения: система координат openCV утверждает, что координата y изображения идет сверху вниз, а z и x остаются вперед-вправо.Я пытался инвертировать 2D и 3D-координаты по оси Y, но это не сработало
Edit [Я удалил свой код здесь, потому что я его сильно изменил, так как задал вопросзаставить его работать]
(некоторые из многих) Похожие сообщения Я посмотрел другие вопросы о стеке потока с тегом opencv-solvePnP, но ни один из них не был связан с Unity3D или c #
solvePnP с Unity3D
не получил ответов
Оценка позы камеры с помощью гомографии или с функцией solvePnP ()
Как можноЯ оцениваю позу камеры с 3D-2D-точечными соответствиями (используя opencv)
разница: мне нужно сделать это в проекте unity3D c #
получение2d-3d точечные соответствия для pnp или posit
Я понял, мне нужно использовать математические алгоритмы, это теория, но теперь, как мне использовать библиотеки в моем распоряжении