У меня есть набор 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, но не нашел. Любая помощь будет оценена.