点云的投影
/// <summary>
/// 参数化模型投影点云
/// </summary>
/// <param name="cloud">点云</param>
/// <param name="x">投影平面x面的系数</param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <param name="c"></param>
/// <returns></returns>
pcl::PointCloud<pcl::PointXYZ>::Ptr PclTool::cloudProjection(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, float x, float y, float z, float c)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_projected(new pcl::PointCloud<pcl::PointXYZ>);
// 填充 ModelCoefficients 的值,使用ax+by+cz+d=0平面模型,其中 a=b=d=0,c=1 也就是X——Y平面
// 定义模型系数对象,并填充对应的数据
pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients());
coefficients->values.resize(4);
coefficients->values[0] = x;
coefficients->values[1] = y;
coefficients->values[2] = z;
coefficients->values[3] = c;
// 创建 ProjectInliers 对象,使用ModelCoefficients作为投影对象的模型参数
pcl::ProjectInliers<pcl::PointXYZ> proj; // 创建投影滤波对象
proj.setModelType(pcl::SACMODEL_PLANE); // 设置对象对应的投影模型
proj.setInputCloud(cloud); // 设置输入点云
proj.setModelCoefficients(coefficients); // 设置模型对应的系数
proj.filter(*cloud_projected); // 投影结果存储cloud_projected
return cloud_projected;
}
-
xy平面的投影
pcl::PointCloudpcl::PointXYZ::Ptr Projection_xy = PclTool::cloudProjection(table_cloud, 0.0, 0.0, 1.0, 0.0)
-
yz平面上的投影
pcl::PointCloudpcl::PointXYZ::Ptr Projection_yz = PclTool::cloudProjection(table_cloud, 1.0, 0.0, 0.0, 0.0);