Восстановление 3D из 2D изображений с помощью карт глубиныPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Восстановление 3D из 2D изображений с помощью карт глубины

Сообщение Anonymous »

Я хочу преобразовать координаты 3D-камеры в мировые координаты 3D

Код: Выделить всё

import numpy as np
import open3d as o3d

# Load the PLY file
ply = o3d.io.read_point_cloud("12092024125535.ply")
points = np.asarray(ply.points)  # Shape: (N, 3)

Выход:

Код: Выделить всё

[[-0.63132578  0.69450021 -1.77900004]
[-0.62732989  0.6933291  -1.77600014]
[-0.62439853  0.6933291  -1.77600014]
...
[ 0.13392334 -0.12925622 -0.32200003]
[ 0.13487235 -0.12965764 -0.32300001]
[ 0.13540547 -0.12965764 -0.32300001]]

Код: Выделить всё

point = points[0]
print(point)

Код: Выделить всё

K = [
[605.8737182617188, 0.0, 324.010498046875],
[0.0, 604.9470825195312, 236.16407775878906],
[0.0, 0.0, 1.0]
]

Код: Выделить всё

x, y, z = point
print(x)
print(y)
print(z)

Код: Выделить всё

def project_3d_to_2d(point, K):
# Perform the projection
point_2d_homogeneous = K @ point
print(point_2d_homogeneous)
# Normalize the result
u = point_2d_homogeneous[0] / z
v = point_2d_homogeneous[1] / z

return u, v

Код: Выделить всё

# Project 3D point to 2D
u, v = project_3d_to_2d(point, K)

print(f"3D point ({x}, {y}, {z}) projects to 2D point ({u}, {v})")

Код: Выделить всё

# Step 2: Compute Camera Ray from Pixel Coordinates
def compute_camera_ray(u, v, K):
K_inv = np.linalg.inv(K)
pixel_homog = np.array([u, v, 1.0])
ray = K_inv @ pixel_homog
ray_normalized = ray / np.linalg.norm(ray)
return ray_normalized
ray = compute_camera_ray(u, v, K)
print(f"Camera Ray (Normalized): {ray}")

Код: Выделить всё

def reconstruct_3d_point(u, v, depth, K):
ray = compute_camera_ray(u, v, K)
point_3d = depth * ray
return point_3d

Код: Выделить всё

import numpy as np

# Calculate depth (distance from camera center to point)
depth = z
camera_coord_point = reconstruct_3d_point(u,v,depth,K)
print(camera_coord_point)
Файл слоя был получен с камеры глубины.
Моя конечная цель — получить 3D-координаты в мировой системе координат.
А пока предположим, что tvec = [0,0,0] и rvec = [0,0,0]
  • Почему все координаты z в точки отрицательны.
  • В какой системе координат отображаются точки слоя, это система координат камеры?
  • Каким должно быть значение глубины. Оно должно быть равно z или sqrt(x2 + y2 + z2)
  • Правильен ли мой подход. Пожалуйста, объясните мне это подробно.
Идея этого подхода у меня есть здесь:
https://www.reddit. com/r/computervision/comments/17y4lv7/get_3d_world_coordinates_given_2d_pixel/
Мой файл ply:
https://drive.google.com/file/d/1oF92ty ... -Kv3H2ift/ просмотр?usp=совместное использование

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

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

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

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

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

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

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