PCL中定义了大量的point类型,大多数需要用到的类型已经被包含在内了,如下:
1.PointXYZ------成员变量:float x,y,z;
这是最常用的一个,只包含三维坐标值,附加一个浮点进行对齐
union{
float data[4];
struct{
float x;
float y;
float z;
};
};
2.PointXYZI------成员变量:float x,y,z,intensity;
这个是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];
};
3.PointXYZRGBA------成员变量:float x,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];
};
4.PointXYZRGB------成员变量:float x,y,z,rgb;
除了RGB信息被包含在一个float类型变量中,其他和PointXYZRGBA类似,RGB被压缩在一个浮点数中的原因是PCL早起是作为ROS的一部分被开发出来的
union{
float data[4];
struct{
float x;
float y;
float z;
};
};
union{
struct{
float rgb;
};
float data_c[4];
};
5.PointXY------float x,y;
简单的二维x-y结构
struct{
float x;
float y;
};
6.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];
};
7.Normal------float normal[3],curvature;
另一个常用的数据类型,Normal结构体表示给定点所在样本曲面上的法线方向,以及对应曲率的测量值
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];
};
8.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];
};
9.PointXYZRGBNormal------float x,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];
};
10.PointXYZINormal------float x,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];
};
11.PointWithRange------float x,y,z,range;
PointWithRange除了Range包含所获得的视点到采样点的距离测量值之外,其他与PointXYZI类似
union{
float data[4];
struct{
float x;
float y;
float z;
};
};
union{
struct{
float range;
}
float data_c[4];
};
12.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];
};
13.MomentInvariants------float j1,j2,j3;
MomentInvariants是一个包含采样曲面上面片的3个不变矩的point类型,描述面片上质量的分布情况
struct{
float j1,j2,j3;
};
14.PrincipalRadiiRSD------float r_min,r_max;
PrincipalRadiiRSD是一个包含曲面块上两个RSD半径的point类型
struct{
float r_min,r_max;
};
15.Boundary------uint8_t boundary_point;
Boundary存储一个点是否位于曲面边界上的简单point类型
struct{
uint8_t boundary_point;
};
16.PrincipalCurvatures------float principal_curvature[3],pc1,pc2;
PrincipalCurvatures包含给定点主曲率的简单point类型
struct{
union{
float principal_curvature[3];
struct{
float principal_curvature_x;
float principal_curvature_y;
float principal_curvature_z;
};
};
float pc1;
float pc2;
};
17.PFHSignaturel125------float pfh[125];
PFHSignaturel125包含给定点的PFH的简单point类型
struct{
float histogram[125];
}
18.FPFHSignature33------float fpfh[33];
FPFHSignature33包含给定点的FPFH的简单point类型
struct{
float histogram[33];
}
19.VFHSignature308------float vfh[308];
VFHSignature308包含给定点VFH的简单point类型
struct{
float histogram[308];
}
20.Narf36------float x,y,z,roll,pitch,yaw;float descriptor[36];
Narf36包含给定点NARF的简单point类型
struct{
float x,y,z,roll,pitch,yaw
float descriptor[36];
}