如何提速读取laz?laslayers(点云分层/分块 存储)和decompress_selective

rapidlasso GmbH

是一家位于德国巴伐利亚州Gilching(吉尔兴)小镇的一家,极具浪漫主义的公司。



看这远古时代的注释(——lastools中lasreadpoint、laszip.hpp、lasreader_las.hpp的注释)生日前,电影后,花园里?what?


这诚挚的warning,还是原型,lay只支持las1.4版本的文件!
步入正题

LASlayers简介

官网的google翻译中文版:
我们很高兴在 LAStools 中发布一些巧克力般甜蜜的新功能。 今天,在 2014 年情人节(cnblogs作者本人注:what?情人节发布,我想冷静一下),我们建议使用新的 *.lay 文件在您的 LiDAR 周围包裹精巧而豪华的层。 在 *.lax 和 *.laz 文件之后,必须出现 *.lay 文件,因为 x 和 z 需要 y 来真正说明... (-;(cnblogs作者本人注:额(-;这万年不变的笑脸)
这个新概念被称为“LASlayers”。 它允许在现有 LAS 或 LAZ 文件的顶部添加修改层或附加属性。 这意味着 I/O 时间(或传输带宽)要低得多,因为只有文件的那些部分需要写回磁盘(通过网络)实际发生了变化。 (cnblogs作者本人注:好吧没有暴力的解压压缩算法,用老土方法也行吧)
大多数点属性(例如 xyz 坐标、强度、扫描角度、GPS 时间、WavePackets 等)在处理 LiDAR 时不会被修改。 LASlayers 通过仅将差异存储到相应的“LAY”文件来避免将未更改的部分第二次(或第三次或第四次)复制到新的 LAS 或 LAZ 文件中。 例如,更改点分类或删除几个点,通常可以用小于新 LAS 或 LAZ 文件大小的 1% 来表示。 类似地,添加离地高度信息会导致 LAY 文件仅为原始文件的 10% 到 15%。

使用简介

DSM(Digital Surface Model)数字表面

DEM(Digital Elevation Model)数字高程

测试

部分解压

格式生成

我们先将现有的文件转化为指定类型的文件。

需求如下:

  1. lasitem_version需要为版本3或者4,最好为4。

  2. las_version最好为1.4版本。

las2las -i inflie_name.las -set point_type 8 -set_verson 1.4 -o outfile_name.laz

-i 后面的也可以是inflie_name.laz

上图是las2las -h 显示的内容

红x位置,需要设置为5以上,这样的话header_size就为375

转换完以后,这里就成了POINT14格式的,另外LASitem_version会自动读取这种格式的点云为item_V3或item_V4版,这样就可分层读取所需要的文件了。

以下是375或者224是怎么来的:

然后,转变完之后,发现稍微增大了那么一点点可能也就百分之一,可以忽略不计

分层解压

然后我们分层解压,
只需要添加如下代码即可。

lasReaderOpener.set_decompress_selective(laszip_DECOMPRESS_SELECTIVE_CHANNEL_RETURNS_Z);//解压具体字段在laszip_decompress_selective_v3.hpp中
#define LASZIP_DECOMPRESS_SELECTIVE_ALL                0xFFFFFFFF

#define LASZIP_DECOMPRESS_SELECTIVE_CHANNEL_RETURNS_XY 0x00000000
#define LASZIP_DECOMPRESS_SELECTIVE_Z                  0x00000001
#define LASZIP_DECOMPRESS_SELECTIVE_CLASSIFICATION     0x00000002
#define LASZIP_DECOMPRESS_SELECTIVE_FLAGS              0x00000004
#define LASZIP_DECOMPRESS_SELECTIVE_INTENSITY          0x00000008
#define LASZIP_DECOMPRESS_SELECTIVE_SCAN_ANGLE         0x00000010
#define LASZIP_DECOMPRESS_SELECTIVE_USER_DATA          0x00000020
#define LASZIP_DECOMPRESS_SELECTIVE_POINT_SOURCE       0x00000040
#define LASZIP_DECOMPRESS_SELECTIVE_GPS_TIME           0x00000080
#define LASZIP_DECOMPRESS_SELECTIVE_RGB                0x00000100
#define LASZIP_DECOMPRESS_SELECTIVE_NIR                0x00000200
#define LASZIP_DECOMPRESS_SELECTIVE_WAVEPACKET         0x00000400
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE0              0x00010000
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE1              0x00020000
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE2              0x00040000
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE3              0x00080000
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE4              0x00100000
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE5              0x00200000
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE6              0x00400000
#define LASZIP_DECOMPRESS_SELECTIVE_BYTE7              0x00800000
#define LASZIP_DECOMPRESS_SELECTIVE_EXTRA_BYTES        0xFFFF0000

测试结果

提速前后对比

完全解压为13s左右

只解压XYZ坐标为7s左右,时间只有原来的56%。

后期可根据代码需要,只解压部分字段即可。

posted @ 2021-08-09 15:10  Lachiven  阅读(904)  评论(0编辑  收藏  举报