OpenCV solvePnP и пространство камеры - PullRequest
0 голосов
/ 15 апреля 2020

Я получил характеристики своей камеры, используя стандартный метод шахматной доски, с исходными изображениями в 640x512. Это возвращает следующие значения:

  • cx, cy = 319,5, 255,5 (очень близко к центру изображения, как и ожидалось)
  • fx = fy = 1731,4

Я выполнил калибровку камеры classi c и оценил положение следующим образом:

  • Шахматная доска лежит на столе ровно
  • Камера расположена на высоте 800 мм над шахматной доской и смотрит прямо вниз, так, чтобы края платы были близко параллельны краям изображения
  • Используйте findChessboardCorners (), чтобы получить внутренние углы пространства изображения
  • Создайте углы пространства модели напрямую, при этом (0,0,0) будет верхним левым внутренним угол и длина стороны 21,5 мм (согласно измерениям в реальном мире)
  • Используйте функцию convertPnP (), чтобы получить преобразование (вращение, перемещение) из пространства модели платы в пространство камеры

последний шаг дает мне поворот, очень близкий к идентичности - это, как и ожидалось, учитывая, что моя камера смотрит прямо на шахматную доску. Это также дает мне перевод, где x и y малы (<100), а z = 807. Размер z соответствует ожидаемому - он точно соответствует измеренному расстоянию между камерой и платой в мм. </p>

Q1. Однако меня смущает направление локальной оси камеры z. Насколько я понимаю, что:

  • В пространстве модели z указывает прямо вверх от платы
  • В модели камеры с точечным отверстием в пространстве камеры z указывает на сцену, то есть от начала координат к плоскость изображения

Но учитывая, что solvePnP () возвращает вращение, близкое к идентичности, это фактически дает мне ориентацию камеры, где отрицательная ось z направлена ​​в сторону доски, а не ПОЛОЖИТЕЛЬНАЯ ось z.

Q2. Меня смущает масштабный коэффициент, необходимый для преобразования обратно из пространства изображений в пространство моделей плат.

  • Пусть R и T - это вращение и перемещение, возвращаемые методом solvePnP ()
  • Пусть RI - это инверсия (транспонирование) R
  • Пусть MI - инверсия матрицы встроенных функций камеры
  • Пусть p будет моей точкой пространства изображений

Тогда моя точка пространства обзора v = MI * p и моя точка пространства модели b = RI * (s * v - T)

Проверка подтвердила, что этот расчет b является правильным, ЕСЛИ для коэффициента масштабирования s задано расстояние до камеры Происхождение с доски (около 807). Почему это так? Как мне получить этот коэффициент масштабирования?

Q3. Вероятно, связано с Q2 ... Я не уверен насчет коэффициента масштабирования от пространства изображения до пространства модели (worldspace). Я хочу построить лучи мирового пространства, идущие от источника камеры через точки пространства изображения (пиксели). Я понимаю, что в пространстве камеры я могу разместить точки в (px - cx, py - cy, pz), где px, py - мои координаты пикселей, а pz - фокусное расстояние камеры в пикселях (что является элементом 0,0 матрицы встроенных функций) , Но мне нужно масштабировать эти точки в мировом пространстве - как?

...