点云根据模型进行投影

pcl库中根据模型投影的算法是ProjectInliers,可以将3D模型降维到 模型指定的空间。

使用效果如下:

 使用x-o-y平面投影

 使用 参数: 0,1,1,0 投影

使用 1,1,1,0参数投影 

编写的klib平台插件代码如下:

struct FilterProjectInliers
{
	//ProjectInliers
	bool copy_all_data = false;
	int model_type = pcl::SACMODEL_PLANE;
	ModelCoefficients::Ptr coeff = make_shared<ModelCoefficients>();
	FilterProjectInliers()
	{
		coeff->values.assign({0,0,1,0});
	}

	template<class PT>
	KArbit operator()(const pcl::shared_ptr<PointCloud<PT> >& cloud)
	{
		pcl::shared_ptr<PointCloud<PT> > res(new PointCloud<PT>);
		ProjectInliers<PT> f;
		f.setCopyAllData(copy_all_data);
		f.setModelType(model_type);
		f.setModelCoefficients(coeff);
		f.setInputCloud(cloud);
		f.filter(*res);
		return res;
	}
};


struct KPclFilterProjectInliers : KPlugBase
{
	FilterProjectInliers p;
	KPclFilterProjectInliers()
	{
		addProp("model").setType(PropTypeShapeModel).setEmptyIndex(1);
		addProp("copy_all_data").setType(PropTypeBool).setValueAddr(&p.copy_all_data);
	}

	int __exec(const KArbit& src, KArbit& dst) override
	{
		auto& aL = a2list(src);
		CastType(shapeMode, KShapeModel, aL[1]);
		p.model_type = shapeMode.type;
		con_cvt(shapeMode.coeffs, p.coeff->values);
		dst = cld_op(aL[0], p);
		return true;
	}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值