0

我希望这会让你身体健康。我对使用 3d 对象真的很陌生。我最近一直在使用对象检测算法(YOLO)。由于 Yolo 返回一个对象的边界框坐标,我们可以很容易地得到边界框的 (x,y) 坐标。然而最近,我在项目中添加了一个 TOF 相机,可以感知每个像素的深度(z 轴坐标)。所有这些数据都存储在相应的“.ply”中。我想获取 yolo 输出的每个边界框坐标的 z 轴值。

现在我的 .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 轴。

4

1 回答 1

0

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

#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))
于 2021-10-20T19:41:32.180 回答