Я использовал это код в качестве основы для обнаружения моей прямоугольной цели в сцене. Я использую ORB и Flann Matcher. Мне удалось успешно нарисовать ограничивающую рамку для обнаруженной цели в моей сцене, используя функции findHomography () и перспективыTransform ().
Эталонное изображение (img_object в коде выше) является прямым видом только прямоугольной target.Now цель в моей сцене изображения может быть наклонена вперед или backwards.I хочет узнать угол, на который он был tilted.I есть прочитал различные посты и пришел к выводу, что гомография, возвращаемая функцией findHomography (), может быть разложена на матрицу вращения и вектор перевода. Я использовал код из https: /gist.github.com/inspirit/740979, рекомендованный эта ссылка переведено на C ++. Это код разложения SVD Чжана, полученный из модуля калибровки камеры OpenCV. Я получил полное объяснение этого кода разложения из книги O’Reilly Learning OpenCV.
Я также использовал solvePnP () на ключевых точках, возвращаемых средством сравнения, для перекрестной проверки матрицы вращения и вектора перевода, возвращенного из разложения гомографии, но они не кажутся одинаковыми.
У меня уже есть измерения наклона всех моих изображений сцены. Я нашел 2 способа извлечь углы из матрицы вращения, чтобы проверить, насколько хорошо они соответствуют моим значениям.
Учитывая матрицу вращения 3 × 3
R =
[r_ {11} & R_ {12} & r_ {13}]
[r_ {21} & R_ {22} & r_ {23}]
[r_ {31} & R_ {32} & r_ {33}]
3 угла Эйлера
theta_ {x} = atan2 (r_ {32}, r_ {33})
theta_ {y} = atan2 (-r_ {31}, sqrt {r_ {32} ^ 2 + r_ {33} ^ 2})
theta_ {z} = atan2 (r_ {21}, r_ {11})
Я рассчитал углы, используя оба метода для матриц вращения, полученных из разложения по гомографии, и solvepnp (). Все углы разные и дают очень неожиданные значения.
Есть ли дыра в моем понимании? Я не понимаю, где мои расчеты неверны. Есть ли альтернативы, которые я могу использовать?
Почему вы ожидаете, что они будут такими же? Они совсем не одно и то же.
Углы Эйлера — это три угла поворота вокруг одной оси одновременно, начиная с мировой системы отсчета.
Формула Родригеса дает компоненты одного вектора в мировой системе отсчета и угол поворота вокруг этого вектора.
Других решений пока нет …