Компьютерная 3D-гомография с 5 3D-точками - PullRequest
0 голосов
/ 29 августа 2018

У меня есть набор 3D-точек в проективном пространстве, и я хочу преобразовать их в метрическое 3D-пространство, чтобы я мог измерять расстояния в метрах.

Для этого мне нужна 3D-3D-гомография, которая представляет собой матрицу 4x4 с 15 степенями свободы (поэтому мне нужно 5 3D-точек, чтобы получить 15 уравнений). У меня есть набор из этих 5 трехмерных точек из проективного пространства и соответствующие им 5 трехмерных точек, выровненных в метрическом пространстве (которые, как я ожидаю, будут преобразованы в 5 проективных точек).

Я не могу понять, как оценить матрицу гомографии. Сначала я попробовал:

A=np.vstack([p1101.T, p1111.T, p0101.T, p0001.T, p0011.T])
b=np.array([[1,1,0,1], [1,1,1,1], [0,1,0,1], [0,0,0,1], [0,0,1,1]])
x, _, _, _ = np.linalg.lstsq(A,b)
H = x.T

где p1101 - это точка [X, Y, Z, 1], которая соответствует [1,1,0,1] в трехмерном метрическом пространстве и т. Д. Однако это не правильно, так как я нахожусь в проективном пространстве, поэтому мне нужно как-то создать набор уравнений, в котором я делю строки H с его последним или что-то в этом роде.

Я подумал, что, может быть, есть реализованный метод, который сделает это за меня, например, в opencv, но не нашел. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 23 сентября 2018

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

Поскольку в проективном пространстве необходимо решить набор уравнений, где однородная координата результата является знаменателем друг друга. то есть, если вы хотите найти матрицу гомографии 4x4 H, и у вас есть совпадающие 3D точки x и b (b находится в метрическом пространстве), вам нужно оптимизировать поиск параметров H так, чтобы H, примененный к x, давал вектор v с 4 координатами, так что все первые три координаты v, разделенные на последнюю координату, равны b. написано numpy:

v = H.dot(x)
v = v[:3]/v[3]
v == b  # True

математически оптимизация основана на этом (для простоты это сфокусировано только на первой координате, но другие координаты выполняются аналогично): mathematical explanation of the optimization for the first coordinate

так что в python нужно расположить уравнения для решателя в объясненной манере с 5 совпадающими точками. Способ, который был задан в этом вопросе, хорош (просто не решает правильную задачу), и в этих терминах он выполнит оптимизацию Ax = b методом наименьших квадратов так, что A - это матрица 15x15, а b - это 15-мерный вектор. Каждая совпадающая точка генерирует 3 уравнения, затем 5 совпадающих точек генерируют 15 уравнений, встроенных в матрицу A, таким образом решая 15 степеней свободы 3D-гомографии H.

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