• 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")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

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

    在这里插入图片描述

    读取点云

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

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

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

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

    h = las.header
    print(h.z_max)
    # 354.0
    print(h.x_scale)
    #1.0
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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
  • 相关阅读:
    某保险企业容器云 PaaS 平台实践经验分享
    群面的技巧
    k8s实战入门
    Python之numpy函数
    液晶显示计算器(按键程序)
    NewStarCTF2023week2-include 0。0
    计算机毕业设计Java我图你秀图片素材交易平台(源码+系统+mysql数据库+Lw文档)
    公共字段自动填充-@TableField的fill实现(2)
    严重内卷的电商直播还有机会吗?教你如何在电商直播中脱颖而出!
    WebRTC系列-网络传输之4Connection排序
  • 原文地址:https://blog.csdn.net/m0_37816922/article/details/127597965