laspy读写点云文件,附las文件支持格式

LAS是ASPRS(美国摄影测量与遥感协会)于2003年发布一种点云数据格式,用以描述激光雷达的扫描点,目前已有1.0到1.4共计5种版本。

laspy则是可以用于读写las点云的python模块。

考虑到大家手头不一定有las格式的文件,所以对laspy的讲解从写入文件开始,而有关las文件格式的详细解释,则以列表的形式附在文末。

创建点云

考虑到扫描激光雷达点云信息的复杂性,las格式并不是完全的数据格式,而是有其内部结构的,在laspy中,通过lasHeader创建las文件的数据头,通过lasData将数据头载入特定的las文件。

import laspy
import numpy as np

# 创建数据头
header = laspy.LasHeader(point_format=3, version="1.2")
header.offsets = np.zeros(3)
header.scales = np.ones(3)

# 创建las文件
las = laspy.LasData(header)

# 载入x, y, z 坐标
xs, ys = np.indices([500,500])-250
zs = np.sqrt(xs ** 2 + ys ** 2)
las.x = xs.reshape(-1)
las.y = ys.reshape(-1)
las.z = zs.reshape(-1)

las.write("test.las")

写入文件之后,可以打开看一下。能打开las格式的软件有很多,这里用开源的cloudcompare,效果如下

在这里插入图片描述

读取点云

laspy.read可以读取las格式的点云文件,并返回一个las对象

import laspy        #后续所有示例均默认此行,故不再重复
las = laspy.read('test.las')

通过dir可以查看laspy对象的成员和属性,其中带有一些常见的魔法函数,比如__sizeof__,说明可以通过len来查看元素个数。

其中header成员即为上文中创建的那个header,

h = las.header
print(h.z_max)
# 354.0
print(h.x_scale)
#1.0

las文件

las是一种二进制点云存储格式,具体包括11种,下表中,uintint分别代表无符号和有符号整形;float为浮点型。

格式0

维度类型位数
X, Y, Z有符号32x3
强度无符号16
回波序号无符号3
回波数无符号3
正反扫描标志布尔1
扫描线标志布尔1
分类号无符号5
合成点标志布尔1
关键点标志布尔1
保留点标志布尔1
扫描角序号有符号8
用户数据无符号8
点源序号无符号8

格式1-5均基于格式0,分别添加一些维度

格式1添加GPS时间

添加维度类型位数
GPS时间浮点64位

格式2添加了颜色信息

添加维度类型位数
r, g, buint16x3

格式3添加GPS时间和rgb颜色

添加维度类型位数
GPS时间浮点64位
r, g, buint16x3

格式4

添加维度类型位数
gps_time浮点64位
wavepacket_indexuint8
wavepacket_offsetuint64
wavepacket_sizeuint32
_point_wave_locationuint32
x_t, y_t, z_tfloat32x3

格式5添加GPS时间和rgb颜色

添加维度类型位数
gps_time浮点64位
r, g, buint16x3
wavepacket_indexuint8
wavepacket_offsetuint64
wavepacket_sizeuint32
_point_wave_locationuint32
x_t, y_t, z_tfloat32x3

格式6是一种新的基础格式

维度类型位数
X, Y, Z有符号32x3
intensity无符号16
return_number无符号4
number_of_returns无符号4
synthetic布尔1
key_point布尔1
withheld布尔1
overlap布尔1
scan_channeluint2
scan_direction_flag布尔1
edge_of_flight_line布尔1
classificationuint5
user_data无符号8
scan_angle有符号8
point_source_id无符号8
gps_timefloat64

格式7在6的基础上添加了颜色信息

添加维度类型位数
r, g, buint16x3

格式8在6的基础上添加了颜色信息和临近点

添加维度类型位数
r, g, buint16x3
niruint16

格式9

添加维度类型位数
wavepacket_indexuint8
wavepacket_offsetuint64
wavepacket_sizeuint32
point_wave_locationuint32
x_t, y_t, z_tfloat32x3

格式10

添加维度类型位数
r, g, buint16x3
niruint16
wavepacket_indexuint8
wavepacket_offsetuint64
wavepacket_sizeuint32
point_wave_locationuint32
x_t, y_t, z_tfloat32x3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值