这是我在 https://github.com/QingyongHu/RandLA-Net?tab=readme-ov-file
里面下载的预训练模型和他识别的结果,我下载之后打开,然后想打开里面的.ply文件看一下他的结果是怎么样的,用了meshlab和cloudcompare都打开不了,一打开txt才发现乱码,如下图所示
请问各位,这种.ply文件如何正确查看
这是我在 https://github.com/QingyongHu/RandLA-Net?tab=readme-ov-file
里面下载的预训练模型和他识别的结果,我下载之后打开,然后想打开里面的.ply文件看一下他的结果是怎么样的,用了meshlab和cloudcompare都打开不了,一打开txt才发现乱码,如下图所示
请问各位,这种.ply文件如何正确查看
引自免费微信小程序:皆我百晓生
在RandLA-Net中,模型输出的.ply文件是用于存储点云数据以及每个点对应的预测标签和真实标签。从您提供的信息来看,该.ply文件采用的是二进制格式(binary little endian 1.0),并且定义了两个属性:pred
(预测标签)和label
(实际标签),它们都是无符号8位整数(uint8)。
由于一般的3D模型查看器如MeshLab或CloudCompare可能不直接支持带有特定属性标签的二进制.ply文件,因此无法正确打开和显示。要正确查看这种包含分类标签信息的点云.ply文件,您可以采取以下步骤:
使用支持读取带属性标签的点云软件:
自定义脚本解析.ply文件: 您可以编写一个简单的Python脚本来读取这个二进制.ply文件,并根据.ply文件的头部信息将点云数据及其标签读取出来,然后使用matplotlib、mayavi或其他三维可视化库来展示点云及其分类结果。
下面是一个简单的Python脚本示例,用于读取二进制ply文件中的点云数据及标签:
import struct
def read_ply_binary(filename):
with open(filename, 'rb') as f:
header = f.readline().decode('utf-8').split() # Read the header line
assert header[0] == 'format' and header[1] == 'binary'
elements = []
while True:
line = f.readline().decode('utf-8')
if not line or line.startswith('end_header'):
break
element_name, num_elements = line.split()[1:3]
properties = [p.split() for p in f.readline().decode('utf-8').strip().split('property')]
elements.append({
'name': element_name,
'num': int(num_elements),
'properties': {p[0]: {'type': p[1], 'size': struct.calcsize(p[1])} for p in properties}
})
vertices = elements[0] # Assuming the first element is vertex data
points = []
for _ in range(vertices['num']):
point_data = f.read(sum(prop['size'] for prop in vertices['properties'].values()))
point_dict = {}
offset = 0
for prop_name, prop in vertices['properties'].items():
value_size = prop['size']
dtype = prop['type']
fmt = '<' + dtype # Little-endian format
value = struct.unpack(fmt, point_data[offset:offset+value_size])[0]
point_dict[prop_name] = value
offset += value_size
points.append(point_dict)
return points
# 使用函数读取.ply文件
points = read_ply_binary('Area_1_conferenceRoom_1.ply')
# 然后你可以遍历points来查看或可视化点云及其标签
for point in points:
print(f"Point: {point['x']}, {point['y']}, {point['z']} - Prediction: {point['pred']} - Label: {point['label']}")
# 进一步地,利用matplotlib或其他3D可视化库绘制点云及分类结果
# ...
请注意,上述代码仅作为参考示例,具体实现可能需要根据实际.ply文件结构进行调整。同时,请确保你安装了必要的Python库(如numpy和struct)。对于可视化部分,您还需要找到合适的库(如matplotlib.pyplot.scatter3d、mayavi.mlab.points3d等)来展示带有颜色编码的点云标签。