12 参数化模型投影

参数化模型投影,可以将一个点云投影到一个参数模型上,如平面、球面等,参数化模型通过一组参数来设定,对于平面来说,ax+by+cz=0

12.1  代码

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/ModelCoefficients.h>
#include <pcl/filters/project_inliers.h>

#if 1
int main(int argc, char** argv)
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_projected(new pcl::PointCloud<pcl::PointXYZ>);
	// 填入点云数据
	cloud->width = 5;
	cloud->height = 1;
	cloud->points.resize(cloud->width * cloud->height);
	for (size_t i = 0; i < cloud->points.size(); ++i)
	{
		cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
	}
	std::cerr << "Cloud before projection: " << std::endl;
	for (size_t i = 0; i < cloud->points.size(); ++i)
		std::cerr << "    " << cloud->points[i].x << " "
		<< cloud->points[i].y << " "
		<< cloud->points[i].z << std::endl;

	// 创建一个系数为Z=0的平面  ax+by+cz+d=0 
	pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients()); // 定义模型对象,并填充对应数据
	coefficients->values.resize(4);//创建4个元素
	coefficients->values[0] = coefficients->values[1] = 0;//a=b=0
	coefficients->values[2] = 1.0;//c=1
	coefficients->values[3] = 0;//d=0   --->故z=0


	pcl::ProjectInliers<pcl::PointXYZ> proj; // 创建投影滤波对象
	proj.setModelType(pcl::SACMODEL_PLANE);  // 设置对象对应的投影模型,本次代码使用的是面的所以是SACMODEL_PLANE
	proj.setInputCloud(cloud);                 // 设置输入点云
	proj.setModelCoefficients(coefficients); // 设置模型对应的系数
	proj.filter(*cloud_projected);           // 执行投影操作

	std::cerr << "Cloud after projection: " << std::endl;
	for (size_t i = 0; i < cloud_projected->points.size(); ++i)
		std::cerr << "    " << cloud_projected->points[i].x << " "
		<< cloud_projected->points[i].y << " "
		<< cloud_projected->points[i].z << std::endl;

	return (0);
}
#endif

12.2  结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值