我有一个分类点云(.las 文件)
我想根据分类值将其分成几个较小的点云。
我可以用非迭代的方式做到这一点:
ground=xyz[np.where(xyz[:,6] == 2)]
header = laspy.header.Header()
x=ground[:,0]
y=ground[:,1]
z=ground[:,2]
intensity=ground[:,3]
return_num=ground[:,4].astype(int)
num_returns=ground[:,5].astype(int)
classification=ground[:,6].astype(int)
xmin = np.floor(np.min(x))
ymin = np.floor(np.min(y))
zmin = np.floor(np.min(z))
outfile = laspy.file.File(outFolder+"\classificationNumber2.las", mode="w", header=header)
outfile.header.offset = [xmin,ymin,zmin]
outfile.header.scale = [0.001,0.001,0.001]
outfile.x = x
outfile.y = y
outfile.z = z
outfile.intensity = intensity
outfile.return_num = return_num
outfile.num_returns = num_returns
outfile.classification = classification
outfile.close()
如何修改代码来迭代编写不同分类值的点云?
我相信 LAS 规范告诉您点的类别存储在 5 位上。这意味着您最多可以有 32 个课程。
你也许可以做类似的事情:
import laspy
las = laspy.read(path)
for i in range(32):
new_file = laspy.create(point_format=las.header.point_format,
file_version=las.header.version)
new_file.points = las.points[las.classification == i]
new_file.write(f'extracted_class_{i}.las')
此代码是此处提供的文档的稍微修改版本关于过滤的laspy文档
“点”包含与其关联的所有数据。您无需过滤 LAS 文件中的每个字段。