目录
前言
LAS(Laser File Format)是一种专门为三维点云数据设计的文件格式,由美国摄影测量和遥感协会(American Society for Photogrammetry and Remote Sensing,ASPRS)管理和维护。
LAS 文件格式采用二进制存储,可以保存激光点的三维坐标、强度、回波、RGB、扫描角等多种信息,是目前最为广泛使用的点云数据格式。LAZ 文件格式是 LAS 的无损压缩版本。
对于较为直观的ASCII文件,其存在数据读取效率慢的问题。
本文主要从las格式点云数据的读取和重要的数据信息入手,快速学习las格式点云数据的使用。
如有兴趣全面了解las格式,请参考官方文件:LAS_1_4_r14.pdf
las格式规范
las文件主要包含一个公共文件头和点的坐标、颜色等信息。公共文件头中较为重要的信息为:点数量(number_of_point_records)、偏移量(offset)、尺度因子(scale_factor)等。点的信息为:x,y,z,R,G,B等。
las文件中,其存储的点云坐标数据为整数形式,通过尺度因子将整数坐标转换为实际的浮点型坐标,这样可以高效存储和精确表示坐标值。
实际坐标值=(存储的整数值 * 尺度因子)+ 偏移量
注:通过开源的LAStools工具读取出来的坐标是实际的浮点型坐标。
VS中配置LAStools
LAStools是一款处理las格式点云数据的开源工具,它可以实现las格式点云数据的读写、滤波、分析等操作。本部分主要讲解如何将已编译好的LAStools配置到VS2022中,有需要下载已编译好的LAStools工具的可自行下载,我已经上传了资源。
解压文件后目录结构如下:
vs2022中新建项目,打开项目属性,依次如下图所示设置:
注: Debug模式下附加依赖项添加的是LASlibD.lib,Release模式下添加的是LASlib.lib
以上配置完成后,就可以在VS中通过代码读取las文件数据了。
VS2022中读取las数据示例
示例代码如下,已对代码进行了注释。
#include<iostream>
#include "lasreader.hpp"
using namespace std;
int main()
{
string file_path("E:\\1.las");
LASreadOpener lasreadopener;
lasreadopener.set_file_name(file_path.c_str());
LASreader* lasreader = lasreadopener.open();
cout << "输出las文件的公共文件头信息" << endl;
cout << lasreader->header.number_of_point_records << endl; / 点数量
cout << lasreader->header.x_offset << endl; / x坐标的偏移量
cout << lasreader->header.y_offset << endl; / y坐标的偏移量
cout << lasreader->header.z_offset << endl; / z坐标的偏移量
cout << lasreader->header.x_scale_factor << endl; / x坐标的尺度因子
cout << lasreader->header.y_scale_factor << endl; / y坐标的尺度因子
cout << lasreader->header.z_scale_factor << endl; / z坐标的尺度因子
/ 点的坐标信息、颜色信息
lasreader->read_point();
/ 将颜色换算为了0-255的标准形式
cout << "R:" << lasreader->point.get_R() * 255 / 65535
<< "G:" << lasreader->point.get_G() * 255 / 65535
<< "B:" << lasreader->point.get_B() * 255 / 65535 << endl;
cout << "X:" << lasreader->point.get_x() << "Y:" << lasreader->point.get_y()
<< "Z:" << lasreader->point.get_z() << endl;
}