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

发布于:2022-10-30 ⋅ 阅读:(515) ⋅ 点赞:(0)

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, b uint 16x3

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

添加维度 类型 位数
GPS时间 浮点 64位
r, g, b uint 16x3

格式4

添加维度 类型 位数
gps_time 浮点 64位
wavepacket_index uint 8
wavepacket_offset uint 64
wavepacket_size uint 32
_point_wave_location uint 32
x_t, y_t, z_t float 32x3

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

添加维度 类型 位数
gps_time 浮点 64位
r, g, b uint 16x3
wavepacket_index uint 8
wavepacket_offset uint 64
wavepacket_size uint 32
_point_wave_location uint 32
x_t, y_t, z_t float 32x3

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

维度 类型 位数
X, Y, Z 有符号 32x3
intensity 无符号 16
return_number 无符号 4
number_of_returns 无符号 4
synthetic 布尔 1
key_point 布尔 1
withheld 布尔 1
overlap 布尔 1
scan_channel uint 2
scan_direction_flag 布尔 1
edge_of_flight_line 布尔 1
classification uint 5
user_data 无符号 8
scan_angle 有符号 8
point_source_id 无符号 8
gps_time float 64

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

添加维度 类型 位数
r, g, b uint 16x3

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

添加维度 类型 位数
r, g, b uint 16x3
nir uint 16

格式9

添加维度 类型 位数
wavepacket_index uint 8
wavepacket_offset uint 64
wavepacket_size uint 32
point_wave_location uint 32
x_t, y_t, z_t float 32x3

格式10

添加维度 类型 位数
r, g, b uint 16x3
nir uint 16
wavepacket_index uint 8
wavepacket_offset uint 64
wavepacket_size uint 32
point_wave_location uint 32
x_t, y_t, z_t float 32x3

网站公告

今日签到

点亮在社区的每一天
去签到