Нахождение перевода между 2d и 3d координатой - PullRequest
0 голосов
/ 06 июля 2018

У меня есть задача найти объект на изображении.

object1

и переведите 2d координату (x, y) из моей камеры в 3d координату для моей роботизированной руки. Теперь я могу найти 2d координату с моим кодом Python opencv и 3d координату с помощью моего метода обучения из моей роботизированной программы, но в другой точке происхождения. Тем не менее, метод, который я использую для преобразования 2D в 3D-координаты, по-прежнему неверен. Поскольку происхождение робота-манипулятора и камеры не совпадает. Поэтому я хотел бы спросить, какую формулу / код следует использовать для преобразования 2d-координаты (x, y) в 3d-координату (x, y, z), если начало координат не совпадает.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Вам нужно преобразовать свои точки в другую систему координат.

Если вы каким-то образом рассчитаете матрицу преобразования, вы можете использовать cv.transform () метод.

Также вы можете рассчитать себя:

point3d` = RotationMatrix * (point3d - TranslationVector)

TranslationVector и RotationMatrix это внешние параметры вашей руки

0 голосов
/ 06 июля 2018

Предполагая, что:

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

Вам просто нужно применить жесткое преобразование , известное как roto-translation . Чтобы упростить следующий пример кода, мы также предположим, что оси Z обеих систем координат параллельны друг другу, перпендикулярны «таблице» и имеют одинаковое направление. Таким образом, единственное возможное вращение происходит вокруг оси Z.

x, y, z = get_3d(x, y)

x -= camera_origin_x_in_arm_coord_system
y -= camera_origin_y_in_arm_coord_system
z -= camera_origin_z_in_arm_coord_system

arm_x = x*cos(theta) - y*sin(theta)
arm_y = x*sin(theta) + y*cos(theta)
arm_z = z

Для более сложных поворотов, пожалуйста, обратитесь к ответам на этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...