参考:
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];
};