我正在处理格式为XYZ的3d点云文件上的python,我需要计算它们中的每一个到中心的距离,然后根据它来标记(和颜色以便更好地显示)它们。到目前为止,我使用此代码获得了this cloud classification:
xyz_coordinates = points[:, 0:3]
xyz_min = np.amin(xyz_coordinates, axis=0) # 3, gets minimum of each axis
xyz_max = np.amax(xyz_coordinates, axis=0) # 3, gets maximum of each axis
xyz_center = (xyz_min + xyz_max) / 2
xyz_max_euclidean=distance.euclidean(xyz_center,xyz_max) # gets euclidean distance, it gives me circles
xyz_cut=xyz_max_euclidean/N_CLASSES
# gets the euclidean distance for all points and assign normalized tagged classes
for i in xrange(xyz_coordinates.shape[0]):
label=int(math.floor(distance.euclidean(xyz_center,xyz_coordinates[i])/xyz_cut))
point_bbox_list.append(np.concatenate([xyz_coordinates[i],g_distance2color[str(label)],np.array([label])],0))
但是你可以看到我正在计算从中心到每个点的欧氏距离,这是不正确的,在这种情况下,例如墙壁或桌子的限制是不正确的。我想象这种图形,但有一个方形的彩色形状。现在我成功地计算了每个对象的边界框,显示为here,但我无法得到我期望的结果。我也尝试过马哈拉诺比斯距离,但是分类结果是椭球,我还可以使用其他计算距离度量吗?