@
- PointXYZ——成員變量: float x, y, z;
- PointXYZI——成員變量: float x, y, z, intensity;
- PointXYZRGBA——成員變量: floatx, y, z; uint32_ t rgba;
- PointXYZRGB——float x, y, z, rgb;
- PointXY——float x, y;
- InterestPoint——float x, y, z, strength;
- Normal——float normal[3],curvature ;
- PointNormal——float x, y, z; float normal[3], curvature;
- PointXYZRGBNormal——floatx, y, z, rgb, normal[3], curvature;
- PointXYZINormal——floatx, y, z, intensity, normal[3], curvature;
- PointWithRange - float x, y, z (union with float point[4]), range;
- PointWithViewpoint - float x, y, z, vp_x, vp_y, vp_z;
- MomentInvariants - float j1, j2, j3;
- PrincipalRadiiRSD - float r_min, r_max;
- Boundary - uint8_t boundary_point;
- PrincipalCurvatures - float principal_curvature[3], pc1, pc2;
- PFHSignature125 - float pfh[125];
- FPFHSignature33 - float fpfh[33];
- VFHSignature308 - float vfh[308];
- Narf36 - float x, y, z, roll, pitch, yaw; float descriptor[36];
- BorderDescription - int x, y; BorderTraits traits;
- IntensityGradient - float gradient[3];
- Histogram - float histogram[N];
- PointWithScale - float x, y, z, scale;
- PointSurfel - float x, y, z, normal[3], rgba, radius, confidence, curvature;

PointXYZ——成員變量: float x, y, z;
PointXYZ是使用最常見的一個點數據類型,因為它只包含三維xyz坐標信息,這三個浮點數附加一個浮點數來滿足存儲對齊,用戶可利用points[i].data[0],或者points[i].x訪問點的x坐標值。
union
{
float data[4];
struct
{
float x;
float y;
float z;
};
};
PointXYZI——成員變量: float x, y, z, intensity;
PointXYZI是一個簡單的XYZ坐標加intensity的point類型,理想情況下,這四個變量將新建單獨一個結構體,並且滿足存儲對齊,然而,由於point的大部分操作會把data[4]元素設置成0或1(用於變換),不能讓intensity與xyz在同一個結構體中,如果這樣的話其內容將會被覆蓋。例如,兩個點的點積會把他們的第四個元素設置成0,否則該點積沒有意義,等等。因此,對於兼容存儲對齊,用三個額外的浮點數來填補intensity,這樣在存儲方面效率較低,但是符合存儲對齊要求,運行效率較高。
union
{
float data[4];
struct
{
float x;
float y;
float z;
};
};
union
{
struct
{
float intensity;
};
float data_c[4];
};
PointXYZRGBA——成員變量: floatx, y, z; uint32_ t rgba;
除了rgba信息被包含在一個整型變量中,其它的和PointXYZI類似。
union
{
float data[4];
struct
{
float x;
float y;
float z;
};
};
union
{
struct
{
uint32_t rgba;
};
float data_c[4];
};
PointXYZRGB——float x, y, z, rgb;
除了rgb信息被包含在一個浮點型變量中,其它和PointXYZRGB類似。rgb數據被壓縮到一個浮點數里的原因在於早期PCL是作為ROS項目的一部分來開發的,那里RGB數據是用浮點數來傳送的,PCL設計者希望所有遺留代碼會重新更改(在PCL 2.x中很可能這樣做),可能取消此數據類型。
union
{
float data[4];
struct
{
float x;
float y;
float z;
};
};
union
{
struct
{
float rgb;
};
float data_c[4];
};
PointXY——float x, y;
簡單的二維x-y point結構
struct
{
float x;
float y;
};
InterestPoint——float x, y, z, strength;
除了strength表示關鍵點的強度的測量值,其它的和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 ;
另一個最常用的數據類型,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;
PointNormal是存儲XYZ數據的point結構體,並且包括采樣點對應法線和曲率。
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——floatx, y, z, rgb, normal[3], curvature;
PointXYZRGBNormal存儲XYZ數據和RGB顏色的point結構體,並且包括曲面法線和曲率。
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 rgb;
float curvature;
};
float data_c[4];
};
PointXYZINormal——floatx, y, z, intensity, normal[3], curvature;
PointXYZINormal存儲XYZ數據和強度值的point結構體,並且包括曲面法線和曲率
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;
PointWithRange除了range包含從所獲得的視點到采樣點的距離測量值之外,其它與PointXYZI類似。
union
{
float data[4];
struct
{
float x;
float y;
float z;
};
};
union
{
struct
{
float range;
};
float data_c[4];
};
PointWithViewpoint - float x, y, z, vp_x, vp_y, vp_z;
PointWithViewpoint除了vp_x、vp_y和vp_z以三維點表示所獲得的視點之外,其它與PointXYZI一樣。
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;
MomentInvariants是一個包含采樣曲面上面片的三個不變矩的point類型,描述面片上質量的分布情況。查看MomentInvariantsEstimation以獲得更多信息。
struct
{
float j1,j2,j3;
};
PrincipalRadiiRSD - float r_min, r_max;
PrincipalRadiiRSD是一個包含曲面塊上兩個RSD半徑的point類型,查看RSDEstimation以獲得更多信息。
struct
{
float r_min,r_max;
};
Boundary - uint8_t boundary_point;
Boundary存儲一個點是否位於曲面邊界上的簡單point類型,查看BoundaryEstimation以獲得更多信息。
struct
{
uint8_t boundary_point;
};
PrincipalCurvatures - float principal_curvature[3], pc1, pc2;
PrincipalCurvatures包含給定點主曲率的簡單point類型。查看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];
PFHSignature125包含給定點的PFH(點特征直方圖)的簡單point類型,查看PFHEstimation以獲得更多信息。
struct
{
float histogram[125];
};
FPFHSignature33 - float fpfh[33];
FPFHSignature33包含給定點的FPFH(快速點特征直方圖)的簡單point類型,查看FPFHEstimation以獲得更多信息。
struct
{
float histogram[33];
};
VFHSignature308 - float vfh[308];
VFHSignature308包含給定點VFH(視點特征直方圖)的簡單point類型,查看VFHEstimation以獲得更多信息。
struct
{
float histogram[308];
};
Narf36 - float x, y, z, roll, pitch, yaw; float descriptor[36];
Narf36包含給定點NARF(歸一化對齊半徑特征)的簡單point類型,查看NARFEstimation以獲得更多信息。
struct
{
float x,y,z,roll,pitch,yaw;
float descriptor[36];
};
BorderDescription - int x, y; BorderTraits traits;
BorderDescription包含給定點邊界類型的簡單point類型,看BorderEstimation以獲得更多信息。
struct
{
int x,y;
BorderTraitstraits;
};
IntensityGradient - float gradient[3];
IntensityGradient包含給定點強度的梯度point類型,查看IntensityGradientEstimation以獲得更多信息。
struct
{
union
{
float gradient[3];
struct
{
float gradient_x;
float gradient_y;
float gradient_z;
};
};
};
Histogram - float histogram[N];
Histogram用來存儲一般用途的n維直方圖。
template<int N>
struct Histogram
{
float histogram[N];
};
PointWithScale - float x, y, z, scale;
PointWithScale除了scale表示某點用於幾何操作的尺度(例如,計算最近鄰所用的球體半徑,窗口尺寸等等),其它的和PointXYZI一樣。
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;
PointSurfel存儲XYZ坐標、曲面法線、RGB信息、半徑、可信度和曲面曲率的復雜point類型。
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_trgba;
float radius;
float confidence;
float curvature;
};
float data_c[4];
};