如何提速读取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)数字高程
测试
部分解压
格式生成
我们先将现有的文件转化为指定类型的文件。
需求如下:
-
lasitem_version需要为版本3或者4,最好为4。
-
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%。
后期可根据代码需要,只解压部分字段即可。