Глобальная координатная система с 2 камерами

Вопрос или проблема

У меня есть вопрос по поводу преобразования координат (или, возможно, регистрации, не уверен, какой термин правильный). У меня есть установка с двумя камерами сверху: камера A и камера B. Обе камеры находятся в одном пространстве, но между ними есть расстояние, поэтому их углы обзора не пересекаются. На установке располагается стол, на котором находится объект, и стол прикреплен к мотору. Когда стол находится под камерой A, она полностью видит стол и объект, камера B имеет объектив с высоким увеличением, с помощью которого можно рассмотреть особенности самого объекта. Я откалибровал камеру A, чтобы скорректировать искажения от рыбьего глаза, поэтому у меня есть её внутренние параметры.

Моя цель – щелкнуть по точке на камере A, с которой я получаю пиксельные координаты, и заставить мотор двигаться так, чтобы та же точка была центрирована под камерой B. Я испытываю трудности с тем, как сопоставить координаты от камеры A к камере B. В этом процессе нет вращений; только трансляция в XY. Пока не беспокоюсь о Z.

Я действительно не уверен, как поступить дальше. Думаю, мне нужно преобразовать пиксельные координаты от камеры A в мировые координаты, умножив точку на обратную матрицу камеры, но затем я как-то застрял. Буду благодарен за любые подсказки. Я использую OpenCV для камеры A. Объект является плоскостным.

Спасибо.

Ответ или решение

Глобальная система координат с двумя камерами

При работе с двумя камерами в одной и той же плоскости, но с независимыми полями зрения (FOV), важно правильно конвертировать пиксельные координаты с одной камеры в мировые координаты, а затем из мировых координат в координаты другой камеры. Давайте разберем необходимые шаги для решения этой задачи в контексте вашей установки с камерами А и В.

1. Калибровка камер

Вы уже провели калибровку камеры A и получили ее внутренние параметры. Для камеры B аналогичная процедура является необходимой, даже если она не используется для коррекции искажений, поскольку вам нужно понимать её восприятие окружающего пространства. Калибровка включает определение камеры матрицы, которая понадобится для преобразования пикселей в мировые координаты.

2. Преобразование пикселей в мировые координаты

Обозначим:

  • ( K_A ) — внутренняя матрица камеры A.
  • ( (u, v) ) — пиксельные координаты, полученные при клике на объект в камере A.
  • ( Z ) — фиксированная высота объекта над плоскостью камеры.

Первым шагом будет вычисление мировых координат. Предположим, что камера A направлена перпендикулярно к поверхности стола, и вы знаете высоту ( Z ):

  1. Нормализация пиксельных координат:
    [
    x = \frac{(u – c_x)}{f_x}, \quad y = \frac{(v – c_y)}{f_y}
    ]
    где ( (c_x, c_y) ) – координаты центра изображения, а ( (f_x, f_y) ) – фокусные расстояния в пикселях.

  2. Приведение к мировым координатам:
    [
    X{world} = x \cdot Z, \quad Y{world} = y \cdot Z
    ]
    Здесь ( Z ) определяется заранее и должно учитывать высоту объекта, если камера расположена выше объекта.

3. Параметры для трансформации к камере B

На следующем этапе вам нужно знать расстояние между камерами A и B в мировых координатах, чтобы преобразовать мировые координаты из системы A в систему B. Применим следующие обозначения:

  • ( T = (T_x, T_y) ) — вектор трансляции, описывающий положение камеры B относительно камеры A в мировых координатах.

Чтобы перейти в систему координат камеры B, выполните:
[
XB = X{world} + T_x, \quad YB = Y{world} + T_y
]

4. Преобразование в пиксельные координаты камеры B

Теперь, когда у вас есть мировые координаты в системе координат камеры B, вы можете преобразовать их обратно в пиксельные координаты с использованием матрицы камеры B ( K_B ):

  1. Преобразование в пиксельные координаты:
    [
    uB = f{xB} \cdot \frac{X_B}{ZB} + c{xB}, \quad vB = f{yB} \cdot \frac{Y_B}{ZB} + c{yB}
    ]
    Здесь ( Z_B ) можно принять равным некоторой фиксированной высоте, аналогичной ( Z ).

5. Заключение

Теперь у вас есть набор шагов для преобразования пикселей из камеры A в систему координат камеры B, что в дальнейшем позволит вам управлять мотором, чтобы позиционировать объект под камерой B. Каждый из этих шагов требует точности и внимания, особенно при установке и калибровке камер. Используйте OpenCV для удобства работы с преобразованиями матриц и производите все вычисления в реальном времени, если это необходимо.

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

Оцените материал
Добавить комментарий

Капча загружается...