PCL点云类型详解

点云类型详解

  • 数据类型
    • 基础类
    • 模板类型
    • 自定义类型

数据类型

基础类

  • pcl::PointCloud
    • pcl::PointCloud::width:点云宽度
    • pcl::PointCloud::height:点云高度
    • pcl::PointCloud::points:点云中包含的点
    • pcl:`PointCloud:点云有无组织
//有组织点
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;
};

你可能感兴趣的:(PCL)