PCL2.1添加您自己的自定义PointT类型

参考:
http://www.pointclouds.org/documentation/tutorials/adding_custom_ptype.php#adding-custom-ptype

PCL提供哪些PointT类型?

1.PointXYZ----- 成员:float x,y,z;
用户可以通过points[i].data[0]或points[i].x用于访问x坐标值。
union:http://c.biancheng.net/view/2035.html

union
{
  float data[4];
  struct
  {
    float x;
    float y;
    float z;
  };
};

2.PointXYZI----- 成员: float x, y, z, intensity;
简单的XYZ +强度点类型。在理想情况下,这四个组件将创建一个与SSE对齐的单一结构。但是,由于大多数点操作会将data [4]数组的最后一个分量设置为0或1。例如,两个点之间的点积会将其第4个分量设置为0,否则该点积就没有意义了,等等。因此我们不能使 强度成为同一结构的成员,因为其内容将容易覆盖。

union
{
  float data[4];
  struct
  {
    float x;
    float y;
    float z;
  };
};
union
{
  struct
  {
    float intensity;
  };
  float data_c[4];
};

PointXYZRGBA----成员:float x,y,z;std :: uint32_t rgba;
与PointXYZI类似,除了包含无符号32位的rgba信息。由于有了union声明,还可以按名称单独访问颜色通道。

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;
};

PointXY - float x, y;
简单的2D x-y点结构。

struct
{
  float x;
  float y;
};

InterestPoint-浮点数x,y,z,强度;
与PointXYZI类似,只是强度包含了对关键点强度的度量。

union
{
  float data[4];
  struct
  {
    float x;
    float y;
    float z;
  };
};
union
{
  struct
  {
    float strength;
  };
  float data_c[4];
};

Normal - float normal[3], curvature; 法线向量的坐标值(xyz),曲率

另一种最常用的数据类型,“ Normal”结构体表示给定点的表面法线,以及“曲率”度量值(可以通过求解表面的特征值得到–参见NormalEstimation类API了解更多信息)。

由于在PCL中对表面法线进行的操作非常普遍,因此我们用四个分量填充为三个分量,以便进行SSE对齐并提高计算效率。用户可以访问点points[i].data_n[0]或points[i].normal[0]或points[i].normal_x,以访问法线向量的第一个坐标。同样,曲率不能曲率不能存储在相同的结构中,因为它会被对正常数据的操作覆盖。。

union
{
  float data_n[4];
  float normal[3];
  struct
  {
    float normal_x;
    float normal_y;
    float normal_z;
  };
}
union
{
  struct
  {
    float curvature;
  };
  float data_c[4];
};

PointNormal -=== float x, y, z; float normal[3], curvature;
一个点结构,包含XYZ数据,连同表面法线和曲率。

union
{
  float data[4];
  struct
  {
    float x;
    float y;
    float z;
  };
};
union
{
  float data_n[4];
  float normal[3];
  struct
  {
    float normal_x;
    float normal_y;
    float normal_z;
  };
};
union
{
  struct
  {
    float curvature;
  };
  float data_c[4];
};

PointXYZRGBNormal ---- float x, y, z, normal[3], curvature; uint32_t rgba;
一个点结构,包含XYZ数据,RGBA颜色,连同表面法线和曲率。

union
{
  float data[4];
  struct
  {
    float x;
    float y;
    float z;
  };
};
union
{
  float data_n[4];
  float normal[3];
  struct
  {
    float normal_x;
    float normal_y;
    float normal_z;
  };
}
union
{
  struct
  {
    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;
    };
    float curvature;
  };
  float data_c[4];//通过data_c[4]写8个字节前面是rgba4字节,后面是曲率的4个字节数据
};

PointXYZINormal---- float x, y, z, intensity, normal[3], curvature;
保存XYZ数据,强度值以及表面法线和曲率的点结构。

union
{
  float data[4];
  struct
  {
    float x;
    float y;
    float z;
  };
};
union
{
  float data_n[4];
  float normal[3];
  struct
  {
    float normal_x;
    float normal_y;
    float normal_z;
  };
}
union
{
  struct
  {
    float intensity;
    float curvature;
  };
  float data_c[4];
};

PointWithRange ----- float x, y, z (union with float point[4]), range
与PointXYZI类似,range包含了从采集点到物体点的距离量。

union
{
  float data[4];
  struct
  {
    float x;
    float y;
    float z;
  };
};
union
{
  struct
  {
    float range;
  };
  float data_c[4];
};

PointWithViewpoint-浮点数x,y,z,vp_x,vp_y,vp_z;

与PointXYZI类似,还包括将获取视点包含为一个3D点的vp_x、vp_y和vp_z。

union
{
  float data[4];
  struct
  {
    float x;
    float y;
    float z;
  };
};
union
{
  struct
  {
    float vp_x;
    float vp_y;
    float vp_z;
  };
  float data_c[4];
};

MomentInvariants - float j1, j2, j3;
简单的点类型,包含表面上3个力矩不变量。有关更多信息,请参见MomentInvariantsEstimation。

struct
{
  float j1, j2, j3;
};

PrincipalRadiiRSD - float r_min, r_max;
简单的点类型,包含表面上的2个RSD半径。有关更多信息,请参见RSDEstimation。

struct
{
  float r_min, r_max;
};

Boundary - uint8_t boundary_point;
简单点类型,保存了是否位于表面边界信息。有关更多信息,请参见BoundaryEstimation。

struct
{
  uint8_t boundary_point;
};

PrincipalCurvatures - float principal_curvature[3], pc1, pc2;
简单点型,包含给定点的主曲率。有关更多信息,请参见PrincipalCurvaturesEstimation。

struct
{
  union
  {
    float principal_curvature[3];
    struct
    {
      float principal_curvature_x;
      float principal_curvature_y;
      float principal_curvature_z;
    };
  };
  float pc1;
  float pc2;
};

PFHSignature125 - float pfh[125];
保存给定点的PFH(点特征直方图)的简单点类型。有关更多信息,请参见PFHEstimation。

struct
{
  float histogram[125];
};

VFHSignature308 - float vfh[308];
持有给定点的VFH(视点特征直方图)的简单点类型。有关更多信息,请参见VFHEstimation。

struct
{
  float histogram[308];
};

Narf36 - float x, y, z, roll, pitch, yaw; float descriptor[36];
包含给定点的NARF(通常对齐半径特性)的简单点类型。有关更多信息,请参见NARFEstimation。

struct
{
  float x, y, z, roll, pitch, yaw;
  float descriptor[36];
};

BorderDescription - int x, y; BorderTraits traits;
简单点类型,包含给定点的边界类型。有关更多信息,请参见BorderEstimation。

struct
{
  int x, y;
  BorderTraits traits;
};

IntensityGradient - float gradient[3];
简单点类型,包含给定点的强度梯度。有关更多信息,请参见IntensityGradientEstimation。

struct
{
  union
  {
    float gradient[3];
    struct
    {
      float gradient_x;
      float gradient_y;
      float gradient_z;
    };
  };
};

Histogram - float histogram[N];
通用n-D直方图占位符。

Histogram - float histogram[N];
通用n-D直方图占位符。

PointWithScale - float x, y, z, scale;
与PointXYZI类似,还包含考虑几何操作中某一点的scale(例如,计算最近邻的球体半径、窗口大小等)。

struct
{
  union
  {
    float data[4];
    struct
    {
      float x;
      float y;
      float z;
    };
  };
  float scale;
};

PointSurfel - float x, y, z, normal[3], rgba, radius, confidence, curvature;
包含XYZ数据、曲面法线、RGB信息、比例尺、置信度和曲面曲率的复杂点类型。

union
{
  float data[4];
  struct
  {
    float x;
    float y;
    float z;
  };
};
union
{
  float data_n[4];
  float normal[3];
  struct
  {
    float normal_x;
    float normal_y;
    float normal_z;
  };
};
union
{
  struct
  {
    uint32_t rgba;
    float radius;
    float confidence;
    float curvature;
  };
  float data_c[4];
};

PCL(Point Cloud Library)是一个开源的库,它提供了大量对点云进行处理的算法。在PCL中,点云是由点的集合构成的,每个点可以包含多种属性,例如位置(x, y, z)、颜色(r, g, b)等。PCL标准库中有一些预定义的点云类型,例如`pcl::PointXYZRGB`就包含了位置和颜色信息。但是有时候标准类型可能不能满足所有的需求,这时就需要自定义点云类型。 如果你需要为自定义的点云类型添加颜色信息,你可以通过继承PCL中的点类型来实现。例如,如果你有一个自定义的点类型`CustomPoint`,它可能只包含了x, y, z坐标的定义,你可以通过继承并添加RGB值来创建一个包含颜色信息的点类型`CustomPointWithColor`。 下面是一个简单的例子: ```cpp #include <pcl/point_types.h> #include <pcl/point_cloud.h> struct CustomPoint { float x, y, z; }; struct CustomPointWithColor : pcl::PointXYZRGB { CustomPoint point; CustomPointWithColor(float x, float y, float z, uint8_t r, uint8_t g, uint8_t b) : pcl::PointXYZRGB(r, g, b), point(x, y, z) {} }; typedef pcl::PointCloud<CustomPointWithColor> CustomPointCloud; ``` 在这个例子中,`CustomPointWithColor`结构体继承自`pcl::PointXYZRGB`,同时包含了一个`CustomPoint`类型的成员`point`。在构造函数中,我们首先调用父类`pcl::PointXYZRGB`的构造函数来初始化颜色信息,然后初始化自定义的坐标信息。 使用自定义点云类型添加颜色信息后,你可以像处理标准点云类型一样来处理这些自定义点云,包括可视化、滤波、分割等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值