Как OpenCV projectPoints выполняет преобразования перед проецированием?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как OpenCV projectPoints выполняет преобразования перед проецированием?

Сообщение Anonymous »

У меня есть две трехмерные точки, которые я пытаюсь спроецировать на плоскость двухмерного изображения с помощью cv::projectPoints(). Изначально точки не находятся в системе координат камеры, поэтому мне приходится их трансформировать. Я проверяю достоверность преобразований метода.
Сначала я вручную применяю сдвиг к своим точкам, а также поворот на -90 градусов вокруг оси X с помощью матрицы вращения matr .
import numpy as np
import math
import cv2

# center of projection
cop = np.array([-14.45194, 34.59882, 19.11343])

# get rotation
r_vec = cv2.Rodrigues(np.array(matr))[0]
print([round(math.degrees(i),2) for i in r_vec])

# init arrays
coords = np.array([[4.27874, 115.15968, 18.1621], [27.52924, 113.3441, 17.70207]])
transformed_coords = np.zeros(coords.shape)

# transform coords
for b, _ in enumerate(coords):

arr = np.array([0,0,0])

# translate
for r in range(3):
arr[r] = coords[r] - cop[r]

# rotate
transformed_coords = np.dot(matr, arr)

Затем я передаю преобразованные координаты в projectPoints() и сравниваю полученные 2D-точки с точками, которые я получаю, передав преобразование в метод.points_2d = cv2.projectPoints(np.array(transformed_coords), np.array([0.0,0.0,0.0]), np.array([0.0,0.0,0.0]), cam_matrix, distortion)[0]
print("Manual Transformation Projection: ")
print(points_2d )

points_2d = cv2.projectPoints(np.array(coords), np.array(r_vec), np.array(cop), cam_matrix, distortion)[0]
print("\nOpenCV Transformation Projection: ")
print(points_2d )

Выход:
[-90.0, 0.0, 0.0] # matr rotation

Manual Transformation Projection:
[[[596.41419111 538.38054858]]

[[159.74685131 557.65317027]]]

OpenCV Transformation Projection:
[[[1101.1539809 -274.07081182]]

[[ 738.45477039 -281.42273082]]]

Почему они разные?
Кстати, вот матрица камеры и дисторсия, если вы хотите ее воссоздать:
cam_matrix = np.array([[1561.9015217711233, 0, 944.3790845611046], [0, 1557.8348925840205, 538.3374859400157], [0, 0, 1]])
distortion = np.array([-0.2136432557736835, 0.20055112514542725, 0.00054631323043295, -0.00067835485282051, -0.07781645541334031])


Подробнее здесь: https://stackoverflow.com/questions/733 ... projecting
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»