2015-02-28 1 views
1

У меня проблема при использовании solvePnPRansac для отслеживания копланарных маркеров. Я записал видео проблемы здесь:OpenCV solvePnPRansac на копланарных плоскостях дает случайное одно из двух решений

http://youtu.be/ftijvDPDA0U

В видео вы видите розовый кубик, нарисованный OpenCV листать примерно каждые 2-3 кадров. Вы также видите сверху стабильную систему координат, которую я визуализирую с помощью OpenGL, но вы можете ее игнорировать, я не применяю значения вращения, вычисленные трекером, поэтому переключение не передается в сцену OpenGL.

Я предполагаю, что проблема кроется в решенииPnPRansac OpenCV, поскольку входы (точки 2D и 3D) очень похожи на каждый кадр, но вычисленная матрица проекции отличается журналом, как вы можете видеть в видео. Отслеживаемые точки выглядят отлично. В видео я также представляю оси координат, и вы можете видеть, что ось z перевернута/перевернута, а остальные оси (ось Y: зеленая вниз и ось X: красная точка справа) остаются правильными ,

Моих используемых параметры для solvePnPRANSAC: я использовал резюме :: итерационного на solvePnPRANSAC со стандартной ошибкой перепроецирования 8.0 (пробовал несколько раз с разными значениями, но не повез) и я переключился на внешней догадке ложь.

Есть ли у вас 2 правильных решения pnp для копланарных маркеров, и именно поэтому он случайно переключается между ними? Могу ли я избежать такого поведения. Я искал людей с похожими проблемами, но все, что я мог найти по этому поводу, - это два старых вопроса, которые звучат, как будто это может быть та же проблема: http://answers.opencv.org/question/6373/cv2solvepnp-axis-flip-with-rotation/# и http://answers.opencv.org/question/11915/solvepnp-similar-input-returns-very-different-output/

ответ

1

Это может произойти, когда несколько решений аналогичны, поэтому вы получите один или другой случайным образом.

Возможно, полезно сохранить значения из предыдущего кадра в качестве первого предположения для текущего кадра (useExtrinsicGuess = true), чтобы обеспечить временную стабильность.

Также, в зависимости от ваших отслеживаемых точек, может быть даже лучше использовать solvePnP. Это дает вам более устойчивый по времени результат, особенно если вы используете предыдущие значения в качестве первоначальной догадки.

Смежные вопросы