Нестабильные значения в оценке ArUco представляют
Я пытаюсь определить ориентацию камеры с помощью маркера Aruco. Углы Эйлера, извлеченные из матрицы вращения, нестабильны за пределами определенной точки. По мере увеличения расстояния камеры от маркера значения угла поворота камеры просто нестабильны. Ось Z на маркере переворачивается. Углы Эйлера дрожат, не одинаковы в каждом кадре и требуют времени для стабилизации. Как получить достоверные значения угла рыскания и расстояния между камерой и маркером? Я пытаюсь найти позу движущейся камеры со статическим маркером. Я реализовал solvePnP и solvePnPRansac, которые дали нестабильные результаты. Матрица вращения, полученная после преобразования векторов вращения из эстимейла PoseSingleMarker, выглядит хорошо до определенной точки, но теряет стабильность. Как мне это сделать? Спасибо
2 ответа
В общем, вы не сможете получить точную оценку позы камеры по одному маркеру. Решение состоит в том, чтобы добавить больше маркеров. Вы можете использовать либо маркерную доску, либо более разреженный рисунок маркеров.
По мере того, как один маркер проходит дальше от камеры, несколько факторов работают для снижения точности оценки позы маркера.
проецируемый размер маркера становится меньше и более квантованным с помощью пиксельной сетки. Расстояние оценивается обратным делением перспективы, поэтому оно становится менее точным с увеличением расстояния.
искажение перспективы уменьшается, приближаясь к параллельной проекции. В параллельной проекции маркер имеет две одинаково жизнеспособные ориентации, которые могут возвращаться поочередно (см. https://en.wikipedia.org/wiki/Necker_cube). Ориентация маркера относительно камеры также имеет большое значение - на более перпендикулярных видах маркера (ортографическая проекция) высота и отклонение маркера неоднозначны по сравнению с наклонными видами. Уменьшенное искажение перспективы с расстоянием усугубляет этот эффект и приведет к тому, что рассчитанная поза камеры будет отклоняться, наклоняться и двигаться в поперечном направлении.
учитывая меньшее количество пикселей в маркере, эффекты малого масштаба, такие как шум сенсора и квантование, становятся более значительными, снижая стабильность от кадра к кадру и вызывая дрожание.
Как вы обнаружили, оценка поз хорошо работает на близком, наклонном виде одного маркера, потому что проецируемые точки, заданные на функцию solvePnP(), расположены далеко друг от друга и имеют большое искажение перспективы. Добавляя больше маркеров, вы всегда получаете идеальные спроецированные точки для solvePnP().
Поскольку другие углы зависят от алгоритма, обязательно проверьте значение крена, если оно соответствующим образом меняется. Что будет наиболее ответственным за z-переворот, поэтому просто создайте базовый фильтр, чтобы избежать этого шума.