Код: Выделить всё
1. An image (height x width)
2. Intrinsic camera parameters (camera matrix).
3. A depth map of the image (height x width)
Я понимаю, что типичный подход включает преобразование 2D-координат пикселей (u,v) в 3D-мировые координаты (X,Y,Z) с использованием встроенных функций камеры. параметры и информация о глубине. Однако, поскольку моя карта глубины дает евклидово расстояние, я не уверен, как правильно вычислить трехмерные точки.
Может ли кто-нибудь помочь мне в этом процессе или предоставить формулу или алгоритм для достижения этого преобразования, учитывая мою карту глубины?
В репозитории DepthAnything есть метод создания облака точек. Вот фрагмент кода:
Код: Выделить всё
h, w = depth_map.shape
x, y = np.meshgrid(np.arange(w), np.arange(h))
real_x = (x - camera_matrix[0][2]) / camera_matrix[0, 0]
real_y = (y - self.camera_matrix[1][2]) / camera_matrix[1, 1]
point_cloud = np.stack(
(np.multiply(real_x, depth_map), np.multiply(real_y, depth_map), depth_map)
)
Подробнее здесь: https://stackoverflow.com/questions/793 ... meters-and
Мобильная версия