Я работаю над моделированием реальной среды с помощью Unity. Я хочу создать среду, которая выглядит точно так же, как моя реальная.
Что я сделал:
- Откалибровал свою iPhone камеру в режиме (в квадрате), так как это то, что я буду использовать для захвата изображений. Для этого я использовал сетку Aruco и OpenCV с python. Я собрал 64 изображения с разными положениями и ориентациями.
- Когда я получил свою калибровочную матрицу (K), я следовал инструкциям в этой ссылке , чтобы создать физическую камеру в Unity.
- Я поставил штатив на ту же высоту, что и камера в Unity, и сделал несколько снимков с четко видимыми маркерами (большими)
- Затем я нашел положение маркера относительно камеры в реальном world, используя функцию
estimatePoseSingleMarkers
в OpenCV. И обнаружил ту же позу объекта по отношению к камере в Unity. - Я знал, что OpenCV использует правостороннюю систему, а Unity - левостороннюю, поэтому мне пришлось инвертировать значение «y».
- После всего этого я все еще получаю разные значения между ними. При дальнейших исследованиях я заметил, что значение «z» всегда является причиной разницы. Я попытался установить высоту в Unity на разные значения, чтобы убедиться, что я ничего не пропускаю, но безуспешно.
Примеры получаемых значений:
Unity:
[ x:0.0757, y:0.0608, z:0.6503]
OpenCV (оценка aruco):
[ x:0.0662, y:-0.0574, z:0.5948]
Это значения, которые я получаю для настройки объекта точно в той же позиции в сцене для обеих сред.
Я проверил этот вопрос , но, к сожалению, на него нет ответа.
EDIT:
Я обнаружил, что моя ошибка перепроецирования калибровки на самом деле примерно 1.02. Я попытался сделать новые изображения и выполнить повторную калибровку, но не смог добиться большего. Есть предложения?
Я также проверил углы, обнаруженные перед калибровкой, и все они кажутся правильными.