对于 python 中的给定点 ( x, y ),如何从 ply 文件中获取 z-axis 坐标?

How do I get z-axis coordinate from ply file for a given point ( x, y ) in python?

希望您身体健康。 我对使用 3d objects 真的很陌生。我最近一直在使用 Object 检测算法 (YOLO)。由于 Yolo returns 一个 object 的边界框坐标,我们可以很容易地得到边界框的 (x,y) 坐标。但是最近,我在项目中添加了一个TOF相机,可以感测每个像素的dept(z-axis坐标)。所有这些数据都存储在相应的“.ply”中。我想获得 yolo 输出的每个 bounding-box 坐标的 z-axis 值。

现在我的 .ply 文件显示此输出:

array([[-818.5 , -830.75, 1949.25],
       [-748.  , -814.5 , 1918.5 ],
       [-704.  , -806.75, 1905.25],
       ...,
       [ 903.75,  790.  , 1844.25],
       [ 906.75,  789.5 , 1843.  ],
       [ 915.  ,  793.75, 1852.25]], dtype=float32)

我正在使用 python 的 plyfile 库从我的 .ply 文件中读取数据

这是我走了多远:

def read_ply(filename):
    """ read XYZ point cloud from filename PLY file """
    plydata = PlyData.read(filename)
    x = np.asarray(plydata.elements[0].data['x'])
    y = np.asarray(plydata.elements[0].data['y'])
    z = np.asarray(plydata.elements[0].data['z'])
    return np.stack([x,y,z], axis=1)

coors =  read_ply("test.ply")
coors

此脚本读取给定的 .ply 文件并从 ply 文件输出以下顶点 (x,y,z) 值:

array([[-818.5 , -830.75, 1949.25],
       [-748.  , -814.5 , 1918.5 ],
       [-704.  , -806.75, 1905.25],
       ...,
       [ 903.75,  790.  , 1844.25],
       [ 906.75,  789.5 , 1843.  ],
       [ 915.  ,  793.75, 1852.25]], dtype=float32)

现在我想为 YOLO 输出的边界框中存在的相应像素找到 z-axis。

终于明白我做错了什么了。 这是正确的工作代码。干杯!

#Enter your x & y coors to get corresponding z-axis value

x =  2300          
y =  1822     

xy = np.array([x, y])
z = coors[np.all(np.isclose(coors[:, :2], xy), axis=1), 2][0]
print("x= {}  y= {}  z= {}".format(x, y, z))