点云格式解读LAS/PCD

1.LAS点云格式

从本质上来说,LAS格式是一种二进制文件格式。其目的是提供一种开放的格式标准,允许不同的硬件和软件提供商输出可互操作的统一格式。现在LAS格式文件已成为LiDAR数据的工业标准格式

LAS文件按每条扫描线排列方式存放数据,包括激光点的三维坐标、多次回波信息、强度信息、扫描角度、分类信息、飞行航带信息、飞行姿态信息、项目信息、GPS信息、数据点颜色信息等。LAS格式定义中用到的数据类型遵循1999年ANSI(AmericanNationalStandardsInstitute,美国国家标准化协会)C语言标准。

一个符合LAS标准的LIDAR文件分为三个部分:公用文件头块(PUBLICHEADERBLOCK)、变量长度记(VARIABLELENGTHRECORDS)和点数据记录(POINTDATARECORD)。

C--class(所属类)
F一flight(航线号)
T一time(GPS时间)
I一intensity(回波强度)
R一return(第几次回波)
N一number of return(回波次数)
A一scan angle(扫描角)
RGB一red green blue(RGB颜色值)


滤波:移除对生成数字高程模型(DEM)无用的数据点,包括错误点和地物点。

滤波原理:基于高程的突变,即当临近的两个激光点间高程变化较大时,一般认为不是由地形的陡然起伏所造成的,更为可能的是由于地面存在地物而引起的,高程较大的点很可能不是地面点。若两点间的距离越近,高差越大,较高的点更有可能为地物点,故判断某点是否地面点时,要考虑该点到参考地面点的距离,随着两点间距离的增加,其高差也会变大。

2.pcd点云格式

PCD全称Point Cloud Data,是一种存储点云数据的文件格式。发明PCD文件格式不是重造轮子,因为现有的“轮子”都无法满足PCL的数据处理需求。PCD格式出现之前表示激光扫描仪获取的点云、任意多边形等的文件格式比如:


PLY:表示多边形文件格式。
STLCAD文件格式,用3d max或CAD软件处理。
OBJ:一种几何学文件格式。
X3D:ISO标准的基于XML格式的计算机3D图像文件格式

扫描二维码关注公众号,回复: 2537764 查看本文章

PCD版本

PCD格式有多个版本,如PCD_V5、PCD_V6等,分别表示PCD格式的0.5、0.6版本。PCL使用PCD_V7版本。

PCD文件格式头

PCD文件必须用ASCII字符编码。文件格式头(file format header)说明文件中存储的点云数据的格式。每个格式声明及点云数据之间用\n字符隔开。PCD_V7版本的格式头包含如下信息:

# .PCD v0.7 - Point Cloud Data file format  
VERSION 0.7 //PCD文件版本
FIELDS x y z r g b intensity timestamp //每个点包含哪些维度,xyz表示XYZ三维坐标,rgb表示颜色(可以分开表示,也可以一个浮点数表示),intensity表示激光反射强度,timestamp表示时间戳,normal_x、normal_y、normal_z表示平面法线三维坐标,j1、j2、j3表示不变矩。
SIZE 4 4 4 1 1 1 1 8 //每个维度的数据占用字节大小
TYPE F F F U U U U F //每个维度的数据类型,I表示有符号类型int8(char)、int16(short)、int32(int),U表示无符号类型uint8(unsigned char)、uint16(unsigned short)、uint32(unsigned int),F表示浮点型
COUNT 1 1 1 1 1 1 1 1 //每个维度含有多少个元素(如果未提供COUNT属性,默认值为1)
WIDTH 32 //用点的数量表示点云数据集的宽度。有两种含义:1.无序数据集的点云中点的数量 2.有序点云数据集的宽度(一行中点的数量),有序点云数据集中,点云类似图片或矩阵的结构,分为行和列,这种数据通常来自于立体摄像机(stereo camera)、时间飞行摄像机(Time Of Flight camera,使用红外线或者光脉冲来估计光线从发射到检测到的时间延迟来测量距离),知道点的相邻关系,使算法计算更高效。
HEIGHT 2172 //用点云数据集中点的数量表示点云数据集的高度。高度有如下两种含义:1.有序的点云数据集中,行的数量 2.无序点云数据集中,高度为1(可以用来判断一个数据集是有序的还是无序的)
VIEWPOINT 0 0 0 1 0 0 0 //指定数据集合中点的采集视点。可以用来后续可能的坐标转换,或者求平面法线坐标。格式是平移(tx ty tz) + 四元数(qw qx qy qz),默认是0 0 0 1 0 0 0。
POINTS 69504 //点云中点的总数(冗余字段)
DATA binary_compressed //点云数据的存储类型,0.7版本支持两种存储方式:ascii和binary。

数据存储类型

ASCII格式:每行一个点的数据,比如x y z rgb格式的数据

binary格式:数据是pcl::PointCloud::points数组或者vector的完整内存复制。Linux系统中,使用mmap/munmap操作使得数据读/写尽可能快。

无论是ascii格式还是binary格式,使用PCL库处理都能做到既简洁又快速。使用ascii模式存储可以使用gnuplot图形编辑点云或者直接使用sed、awk操作点云。

使用如下程序展示点云数据:

#include <iostream>
#include <string>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
using namespace std;

int main (int argc, char** argv){
typedef pcl::PointXYZRGB PointT;
pcl::PointCloud<PointT>::Ptr cloud (new pcl::PointCloud<PointT>);

std::string dir = "D:\\PCL\\show_sample\\";
std::string filename = "sample.pcd";

if (pcl::io::loadPCDFile<PointT> ((dir+filename), *cloud) == -1){
//* load the file
PCL_ERROR ("Couldn't read PCD file \n");
return (-1);
}
printf("Loaded %d data points from PCD\n",
cloud->width * cloud->height);

pcl::visualization::PCLVisualizer viewer("Cloud viewer");
viewer.setCameraPosition(0,0,-3.0,0,-1,0);
viewer.addCoordinateSystem(0.3);

viewer.addPointCloud(cloud);
while(!viewer.wasStopped())
viewer.spinOnce(100);
return (0);
} 

本文转自:http://www.cnblogs.com/chenbokai/p/6010143.html

                   http://blog.csdn.net/a464057216/article/details/54864591

猜你喜欢

转载自blog.csdn.net/lhm_19960601/article/details/81254254
今日推荐