Оценка углов поворота от калибровки камеры opencv

У меня были проблемы с пониманием вектора вращения, данного Calib3d.calibrateCamera () fucntion of the opencv.
Для того, чтобы понять возвращаемые значения из функции, я попробовал следующие шаги.

Сначала я создал шаблон шахматной доски на Java. Затем я применил к нему 15 векторов вращения и 15 векторов перевода. Я также применил известную матрицу, представляющую внутреннюю матрицу камеры. Я в основном пытаюсь воссоздать ручной процесс съемки многих фотографий chessbaord. Некоторые из созданных мною изображений выглядят так:
Одно из изображений, сгенерированных с идентифицированными углами

После генерации изображений я прогнал их через функции идентификации углов и калибровки камеры. Я получил обратно внутреннюю матрицу, которую я использовал почти точно из функции калибровки.

Когда я сравниваю векторы вращения, которые я использовал для создания изображений, и векторы, которые я получил от функции калибровки, они являются негативами друг друга. Графики сравнения показаны ниже:

Сравнивать значение вращения входного сигнала и выхода о оси x

Это нормальное поведение или я делаю что-то не так?

В ответе at говорится, что OpenCV вращается от системы координат изображения к системе координат объекта. Может ли это быть причиной?

1 ответ

  1. Если ожидаемые и фактические векторы вращения противоположны друг другу, это означает, что ожидаемые и фактические матрицы вращения являются обратными друг другу. Поэтому вы, вероятно, перепутали исходную и целевую системы координат.

    Как правило, это довольно легко проверить:

    1. Примените матрицу [R / t] к 3D точкам, соответствующим углам рисунка
    2. Проецируйте их в образ, используя встроенную матрицу
    3. Убедитесь, что угловые проекции соответствуют наблюдаемым на изображении значениям. Если они не согласованы, попробуйте то же самое с обратной матрицей вращения.