Код: Выделить всё
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