Я получил характеристики своей камеры, используя стандартный метод шахматной доски, с исходными изображениями в 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 матрицы встроенных функций) , Но мне нужно масштабировать эти точки в мировом пространстве - как?