【三维点云数据处理】SHOT三维特征描述子

2023-11-04 05:59

本文主要是介绍【三维点云数据处理】SHOT三维特征描述子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【三维点云数据处理】ISS3d+CSHOT+RANSAC+ICP

【三维点云数据处理】ISS特征点提取算法


目录

一、算法原理

参考文献

二、 代码实现

三、结果展示


一、算法原理

2014年 ,Tombari等 将点签名和点特征直方图的思想相结合,提出SHOT特征描述子。首先将点邻域空间分成几个子空间,然后对子空间中每个点的法向特征统计到直方图进行编 码,再将每个子空间的直方图联合到一起得到三维描述子。此方法对于含有噪声、杂波的点云以及密度不均的点云都具有一定的鲁棒性、高效性和较好的描述性。具体过程如下:

1. 按照上图所述的协方差矩阵,通过求解可得协方差矩阵的特征值以及特征值对应的特征向量,将特征值以递减的顺序进行排列可得\lambda_{1}> \lambda_{2}>\lambda_{3},其对应的向量为v_{1},v_{2},v_{3},分 别 代 表x,y,z3个坐标轴,并记为(x^{+},y^{+},z^{+}),记其相反方向为(x^{-},y^{-},z^{-})为保证局部坐标系的唯一准确性,需要对局部坐标系的二义性进行消除,方法的中心思想就是近邻点与查询点组成的向量的方向尽量与查询点的法向保持一致。具体实施方法如下。以x轴为例 ,依据以下法则判定x轴方向

式中d_{i} 为 采 样 点p和邻域点p_{i}的欧式距离\begin{Vmatrix} p_{i}-p \end{Vmatrix}。统 计s^{+},s^{-} 的 数 目 确 定x轴 方 向 ,当\begin{vmatrix} s^{+} \end{vmatrix}= \begin{vmatrix} s^{-} \end{vmatrix},进一步将采样点的k近邻点集M_{k}作为邻域点,统 计S_{x}^{+},S_{x}^{-} 的数目确定方向。由上述 方法确定z、x轴 方 向 ,y轴方向由z×x确定 ,至此局部参考坐标系二义性消除 ,局部参考坐标系被唯一 确定.
 2. 特征点邻域的空间划分。对特征点的邻域进行空间划分,沿方位划分为8份 ,沿高度划分为2 份,沿半径划分为2份 ,邻域空间总共划分为32份 .
 3. 计算局部直方图。局部参考坐标系确定后, 选取采样点R邻域内其他点法向量n_{q}采样点局部参考坐标系的z轴方向向量z_{k}的夹角余弦作为 函 数 值 如 式(11),将其累计到直方图不同的盒子中. 对每个子空间将cos\theta的值划分11份,SHOT描 述 子 的 维 度 为 32×11=352 维 。

cos\theta = z_{k}n_{q} (11)

参考文献

[1]陆军,邵红旭,王伟,范哲君,夏桂华.基于关键点特征匹配的点云配准方法[J].北京理工大学学报,2020,40(04):409-415.DOI:10.15918/j.tbit1001-0645.2018.476.


二、 代码实现

typedef pcl::PointXYZ PointT;
typedef pcl::PointCloud<PointT> PointCloud;

typedef pcl::PointXYZ PointType;
typedef pcl::Normal NormalType;

typedef pcl::SHOT352 DescriptorType;

创建SHOT特征估计器 

pcl::SHOTEstimationOMP<PointType, NormalType, DescriptorType> descr_est

    // Calc SHOTColor feature descriptorspcl::SHOTColorEstimation<PointT, pcl::Normal, SHOTSignT, PointRef> cshot_src;//pcl::search::KdTree<PointT>::Ptr tree_cshot_src(new pcl::search::KdTree<PointT>);cshot_src.setSearchMethod(modelKdTree_src);cshot_src.setInputCloud(iKeypoints_src);cshot_src.setInputNormals(iCloud_src_normals);cshot_src.setRadiusSearch(cshotparm::radius_dense);cshot_src.setSearchSurface(iCloud_src);PointCloudSHOTDesc::Ptr rCSHOTDesc_src(new PointCloudSHOTDesc());cshot_src.compute(*rCSHOTDesc_src);std::cout << "------> Computed *rCSHOTDesc_src SHOTColor descriptor values ..." << std::endl;std::cout << rCSHOTDesc_src->is_dense << std::endl;std::cout << rCSHOTDesc_src->size() << std::endl;// ---------------直方图可视化-----------------//定义绘图器pcl::visualization::PCLPlotter* plotter = new pcl::visualization::PCLPlotter("My Plotter");//设置特性plotter->setTitle("SHOT");plotter->setShowLegend(true);cout << pcl::getFieldsList<SHOTSignT>(*rCSHOTDesc_src)<< endl;plotter->addFeatureHistogram<SHOTSignT>(*rCSHOTDesc_src, "shot", 5, "one_SHOT");/*第2个参数为点云类型的field name,5表示可视化第五个点的FPFH特征该参数可通过getFieldsList()返回,并且只限定于注册过的点云类型*/plotter->setWindowSize(800, 600);plotter->spinOnce(30000000);plotter->clearPlots();

 注意事项

 plotter->addFeatureHistogram<SHOTSignT>(*rCSHOTDesc_src, "shot", 5, "one_SHOT");

上述代码添加特征直方图时第二个参数可由pcl::getFieldsList<SHOTSignT>()显示出来。

cout << pcl::getFieldsList<SHOTSignT>(*rCSHOTDesc_src)<< endl;


三、结果展示

SHOT特征描述子可视化:

 

 

这篇关于【三维点云数据处理】SHOT三维特征描述子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/343728

相关文章

Python xmltodict实现简化XML数据处理

《Pythonxmltodict实现简化XML数据处理》Python社区为提供了xmltodict库,它专为简化XML与Python数据结构的转换而设计,本文主要来为大家介绍一下如何使用xmltod... 目录一、引言二、XMLtodict介绍设计理念适用场景三、功能参数与属性1、parse函数2、unpa

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

hdu4826(三维DP)

这是一个百度之星的资格赛第四题 题目链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=500 题意:从左上角的点到右上角的点,每个点只能走一遍,走的方向有三个:向上,向下,向右,求最大值。 咋一看像搜索题,先暴搜,TLE,然后剪枝,还是TLE.然后我就改方法,用DP来做,这题和普通dp相比,多个个向上

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

Vector3 三维向量

Vector3 三维向量 Struct Representation of 3D vectors and points. 表示3D的向量和点。 This structure is used throughout Unity to pass 3D positions and directions around. It also contains functions for doin

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

速通GPT-3:Language Models are Few-Shot Learners全文解读

文章目录 论文实验总览1. 任务设置与测试策略2. 任务类别3. 关键实验结果4. 数据污染与实验局限性5. 总结与贡献 Abstract1. 概括2. 具体分析3. 摘要全文翻译4. 为什么不需要梯度更新或微调⭐ Introduction1. 概括2. 具体分析3. 进一步分析 Approach1. 概括2. 具体分析3. 进一步分析 Results1. 概括2. 具体分析2.1 语言模型

【LVI-SAM】激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节

激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节 1. 特征提取实现过程总结1.0 特征提取过程小结1.1 类 `FeatureExtraction` 的整体结构与作用1.2 详细特征提取的过程1. 平滑度计算(`calculateSmoothness()`)2. 标记遮挡点(`markOccludedPoints()`)3. 特征提取(`extractF