0

I have been using this github repo: https://github.com/aim-uofa/AdelaiDepth/blob/main/LeReS/Minist_Test/tools/test_shape.py

To figure out how this piece of code can be used to get x,y,z coordinates:

def reconstruct_3D(depth, f):
    """
    Reconstruct depth to 3D pointcloud with the provided focal length.
    Return:
        pcd: N X 3 array, point cloud
    """
    cu = depth.shape[1] / 2
    cv = depth.shape[0] / 2
    width = depth.shape[1]
    height = depth.shape[0]
    row = np.arange(0, width, 1)
    u = np.array([row for i in np.arange(height)])
    col = np.arange(0, height, 1)
    v = np.array([col for i in np.arange(width)])
    v = v.transpose(1, 0)

I want to use these coordinates to find distance between 2 people in 3D for an object detection model. Does anyone have any advice?

I know how to use 2d images with yolo to figure out distance between 2 people. Based on this link: Compute the centroid of a rectangle in python My thinking is i can use the bounding boxes to get corners and then find the centroid and do that for 2 bounding boxes of people and use triangulation to find the hypotenuse between the 2 points (which is their distance).

However, i am having a tricky time on how to use a set of 3d coordinates to find distance between 2 people. I can get the relative distance from my 2d model.

1 Answers1

0

By having a 2D depth image and camera's intrinsic matrix, you can convert each pixel to 3D point cloud as:

z = d
x = (u - cx) * z / f
y = (v - cy) * z / f

// where (cx, cy) is the principle point and f is the focal length.

In the meantime, you can use third party library like open3d for doing the same:

xyz = open3d.geometry.create_point_cloud_from_depth_image(depth, intrinsic)