Найдите 3D-координату относительно камеры, используя координаты 2D-изображения - PullRequest
0 голосов
/ 27 мая 2020

Мне нужно вычислить координаты X, Y в мире по отношению к камере, используя координаты u, v на 2D-изображении. Я использую краевую камеру S7 для отправки видеопотока 720x480 в MATLAB.

Что я знаю: Z, т.е. глубина объекта от камеры, размер пикселей камеры (1,4 мкм), фокусное расстояние ( 4,2 мм)

Допустим, точка изображения находится в точке (u, v) = (400,400).

Мой подход следующий:

  1. Вычесть пиксель значение центральной точки (240,360) из пиксельных координат u, v точки на изображении. Это должно дать нам координаты пикселей относительно оптической оси камеры (оси z). Исходная точка теперь находится в центре изображения. Итак, новые координаты: (160, -40)
  2. Умножьте новые значения пикселей u, v на размер пикселя, чтобы получить расстояние от точки до начала координат в физических единицах. Назовем это (x, y). Мы получаем (x, y) = (0,224, -0,056) в миллиметрах.
  3. Используйте формулу X = xZ / f & Y = yZ / f для вычисления координат X, Y в реальном мире с учетом к оптической оси камеры.

Правильно ли мой подход?

1 Ответ

1 голос
/ 27 мая 2020

Ваш подход работает правильно, но было бы проще, если бы вы использовали более стандартизированный подход. Обычно мы используем Модель камеры-обскуры , чтобы преобразовать мировые координаты [X, Y, Z] в пиксель [x, y]. Взгляните на это руководство , в котором шаг за шагом описывается процесс построения вашего преобразования.

В основном вам нужно определить вашу внутреннюю матрицу камеры, чтобы выполнить преобразование:

enter image description here

  • fx и fy - ваше фокусное расстояние масштабируется для использования в качестве расстояния в пикселях. Вы можете рассчитать это с вашим полем обзора и общим пикселем в каждом направлении. Взгляните здесь и здесь для получения дополнительной информации.
  • u0 и v0 - точка прокола. Поскольку наши пиксели не центрированы в [0, 0], эти параметры представляют собой перевод в центр изображения. (пересечение оптической оси с плоскостью изображения в пиксельных координатах).

  • При необходимости вы также можете добавить коэффициент перекоса a , который вы можно использовать для коррекции эффекта сдвига камеры. Тогда матрица внутренней камеры будет:

enter image description here

Поскольку ваша глубина фиксирована, просто исправьте Z и продолжите преобразование. без проблем.

Помните: Если вы хотите обратное преобразование (камера в мир), просто переверните матрицу камеры и будьте счастливы!

У Matlab также есть очень хорошее руководство для этого преобразования. Взгляните.

...