PCL学习笔记(三):PCL的点类型
数据类型
基础类
pcl::PointCloud
pcl::PointCloud::width:点云宽度
pcl::PointCloud::height:点云高度
pcl::PointCloud::points:点云中包含的点
pcl:`PointCloud<pcl::PointCloud::isOrganized:点云有无组织
//有组织点 cloud.width = 640; // Image-like organized structure, with 480 rows and 640 columns, cloud.height = 480; // thus 640*480=307200 points total in the dataset //无组织点 cloud.width = 307200; cloud.height = 1; // unorganized point cloud dataset with 307200 points //点云数组向量 pcl::PointCloud<pcl::PointXYZ> cloud; std::vector<pcl::PointXYZ> data = cloud.points; 判断组织 if (!cloud.isOrganized ()) ...
模板类型
对于模板类型,只需要熟悉大概有什么类型可用,使用时翻阅文档就可以了。
使用中会发现类型中通常包含一个用于SSE对齐的数据,感兴趣可以简单了解一下,Sreaming SIMD Extensions, 它是一组CPU指令,用于像信号处理、科学计算或者3D图形计算一样的应用,但是SSE对于数据是有很多种格式要求的,其中就有对齐这一点,所以就有了这一部分的操作
PointXYZ - Members: float x, y, z
最常用的数据类型之一,只表示3D xyz信息。这3个浮点数用一个附加浮点数进行填充,以进行SSE对齐。用户可以访问点[i].data[0]或点[i].x
union { float data[4]; struct { float x; float y; float z; }; };
PointXYZI - Members: float x, y, z, intensity
XYZ+强度类型。在理想情况下,这4部分将创建一个单一的结构,SSE对齐。但是,由于大多数点操作会将data[4]数组的第四部分设置为0或1(用于转换),因此不能将intensity设置为同一结构的成员,因为它的内容将被覆盖。例如,两点之间的点积将其第四个分量设置为0,否则点积就没有意义,等等。
因此,对于SSE对齐,我们使用3个额外的浮动来填充强度。在存储方面效率低,但在内存对齐方面很好。
union { float data[4]; struct { float x; float y; float z; }; }; union { struct { float intensity; }; float data_c[4]; };
PointXYZRGBA - Members: float x, y, z; std::uint32_t rgba
与PointXYZI类似,除了rgba包含打包成无符号32位整数的rgba信息外。由于联合声明,还可以按名称单独访问颜色通道。
union { float data[4]; struct { float x; float y; float z; }; }; union { union { struct { std::uint8_t b; std::uint8_t g; std::uint8_t r; std::uint8_t a; }; float rgb; }; std::uint32_t rgba; };
PointXYZRGB - float x, y, z; std::uint32_t rgba 与PointXYZRGBA相同
PointXY - *float x, y
InterestPoint - float x, y, z, strength
与PointXYZI类似,除了强度包含关键点强度的度量
Normal - float normal[3], curvature
最常用之一,表示给定点处的曲面法向,以及曲率的度量
PointNormal - float x, y, z; float normal[3], curvature
保存XYZ数据、曲面法线和曲率的点结构。
PointXYZRGBNormal - float x, y, z, normal[3], curvature; std::uint32_t rgba
保存XYZ数据、RGBA颜色以及曲面法线和曲率的点结构。
PointXYZINormal - float x, y, z, intensity, normal[3], curvature
保存XYZ数据和强度值以及曲面法线和曲率的点结构。
PointWithRange - float x, y, z (union with float point[4]), range
与PointXYZI类似,除了range包含从获取视点到世界上的点的距离的度量。
PointWithViewpoint - float x, y, z, vp_x, vp_y, vp_z
与点xyzi类似,除了vp_x、vp_y和vp_z包含作为3D点的采集视点
MomentInvariants - float j1, j2, j3
在曲面片上保持3个不变矩的简单点类型。
PrincipalRadiiRSD - float r_min, r_max
在曲面片上保持2 RSD半径的简单点类型
Boundary - std::uint8_t boundary_point
简单点类型,用于保存点是否位于曲面边界上
PrincipalCurvatures -* float principal_curvature[3], pc1, pc2*
保持给定点的主曲率的简单点类型。
PFHSignature125 - float pfh[125]
包含给定点的PFH(点特征直方图)的简单点类型。
FPFHSignature33 - float fpfh[33]
包含给定点的FPFH(快速点特征直方图)的简单点类型
VFHSignature308 - float vfh[308]
包含给定点的VFH(视点特征直方图)的简单点类型
Narf36 - float x, y, z, roll, pitch, yaw; float descriptor[36]
保持给定点的NARF(通常对齐的半径特征)的简单点类型
BorderDescription - int x, y; BorderTraits traits
保存给定点的边界类型的简单点类型
IntensityGradient -* float gradient[3]*
保持给定点的强度梯度的简单点类型
Histogram - float histogram[N]
通用n-D直方图占位符
PointWithScale - float x, y, z, scale
与PointXYZI类似,除了scale包含考虑某个点进行几何操作的比例
PointSurfel - float x, y, z, normal[3], rgba, radius, confidence, curvature
包含XYZ数据、曲面法线、RGB信息、比例、置信度和曲面曲率的复杂点类型
自定义类型
struct MyPointType { float test; };
————————————————
版权声明:本文为CSDN博主「CallMe航仔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tobebest_lah/article/details/106241406