PCL点云处理:自定义Spin image特征类型


前言

PCL提供的SpinImageEstimation函数,可以提取三维点云的自旋图像(Spin image, SI)特征。虽然官方推荐使用pcl::Histogram<153>数据类型来存储SI特征,但在实际应用时发现部分函数(如KdTreeFLANN)尚不支持Histogram类型存储的特征(可能不会报错,但是实际效果特别差)。除了将SI特征转存到VFHSignature308等其他数据结构之外,还可通过本文的方法自定义SI数据类型。


一、声明和定义

在point_types.h文件中,添加以下声明:

struct SpinImage153;

同时添加注册代码:

POINT_CLOUD_REGISTER_POINT_STRUCT(pcl::SpinImage153,
    (float[153], histogram, si)
)

在point_types.hpp文件中,找到#define PCL_POINT_TYPES和#define PCL_FEATURE_POINT_TYPES,分别在其下方列表中添加:

(pcl::SpinImage153)           \

同时添加以下定义:

PCL_EXPORTS std::ostream& operator << (std::ostream& os, const SpinImage153& p);
struct SpinImage153
{
	float histogram[153];
	static int descriptorSize() { return 153; }

	friend std::ostream& operator << (std::ostream& os, const SpinImage153& p);
};

二、模板和测试

在point_representation.h文件中,添加以下代码:

template <>
class DefaultPointRepresentation <SpinImage153> : public DefaultFeatureRepresentation <SpinImage153>
{};

在point_test.h文件中,添加以下代码:

template<> inline bool isFinite<pcl::SpinImage153>(const pcl::SpinImage153&) { return (true); }

至此完成,按照以下形式使用该数据类型即可:

pcl::PointCloud<pcl::SpinImage153>::Ptr si(new pcl::PointCloud<pcl::SpinImage153>)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值