У меня есть фиксированная камера с известным cameraMatrix
и distCoeffs
. У меня также есть шахматная доска, которая тоже исправлена, transform
и rotation
вектор также рассчитывается с использованием solvePnP
.
Мне интересно, как можно получить трехмерное местоположение 2D-точки на той же плоскости, что и шахматная доска, как на картинке ниже:
Одно можно сказать наверняка, что Z этой точки равен 0, но как получить X и Y этой точки.
Ответы:
Вы можете решить это за 3 простых шага:
Шаг 1:
Вычислить вектор направления 3d, выраженный в системе координат камеры, луча, соответствующего заданной точке 2d изображения, путем инвертирования модели проекции камеры:
Шаг 2:
Вычислите трехмерное направление вектора этого луча в системе координат, прикрепленной к шахматной доске, используя относительную позу между камерой и шахматной доской:
Шаг 3:
Найдите нужную 3d точку, вычислив пересечение между 3d-лучом и плоскостью шахматной доски с Z = 0:
источник
Поскольку ваш случай ограничен равнинами, простой способ заключается в использовании гомографии.
Сначала не искажай свое изображение. Затем используйте findHomography для вычисления матрицы гомографии, которая преобразует вашу пиксельную координату (изображение) в реальную координату (евклидово пространство, например, в см). Нечто похожее на это:
источник