pcl中的PFH和FPFH

2024-02-28 15:48
文章标签 pcl fpfh pfh

本文主要是介绍pcl中的PFH和FPFH,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • PFH
    • 点特征直方图计算方式
    • vector组合方式
  • FPFH
    • FAST点特征直方图计算方式
  • 参考

PFH

点特征直方图计算方式

在这里插入图片描述
在这里插入图片描述
注意
这里图上标注的角度并不是真实的角度,而是对应角度的余弦值(按理说是内积,但是模长都是1),可以从这个代码中的pcl::computePairFeatures函数看出:

bool
pcl::computePairFeatures (const Eigen::Vector4f &p1, const Eigen::Vector4f &n1, const Eigen::Vector4f &p2, const Eigen::Vector4f &n2,float &f1, float &f2, float &f3, float &f4)
{Eigen::Vector4f dp2p1 = p2 - p1;dp2p1[3] = 0.0f;f4 = dp2p1.norm ();if (f4 == 0.0f){PCL_DEBUG ("[pcl::computePairFeatures] Euclidean distance between points is 0!\n");f1 = f2 = f3 = f4 = 0.0f;return (false);}Eigen::Vector4f n1_copy = n1,n2_copy = n2;n1_copy[3] = n2_copy[3] = 0.0f;float angle1 = n1_copy.dot (dp2p1) / f4;// Make sure the same point is selected as 1 and 2 for each pairfloat angle2 = n2_copy.dot (dp2p1) / f4;if (std::acos (std::fabs (angle1)) > std::acos (std::fabs (angle2))){// switch p1 and p2n1_copy = n2;n2_copy = n1;n1_copy[3] = n2_copy[3] = 0.0f;dp2p1 *= (-1);f3 = -angle2;}elsef3 = angle1;// Create a Darboux frame coordinate system u-v-w// u = n1; v = (p_idx - q_idx) x u / || (p_idx - q_idx) x u ||; w = u x vEigen::Vector4f v = dp2p1.cross3 (n1_copy);v[3] = 0.0f;float v_norm = v.norm ();if (v_norm == 0.0f){PCL_DEBUG ("[pcl::computePairFeatures] Norm of Delta x U is 0!\n");f1 = f2 = f3 = f4 = 0.0f;return (false);}// Normalize vv /= v_norm;Eigen::Vector4f w = n1_copy.cross3 (v);// Do not have to normalize w - it is a unit vector by constructionv[3] = 0.0f;f2 = v.dot (n2_copy);w[3] = 0.0f;// Compute f1 = arctan (w * n2, u * n2) i.e. angle of n2 in the x=u, y=w coordinate systemf1 = std::atan2 (w.dot (n2_copy), n1_copy.dot (n2_copy)); // @todo optimize thisreturn (true);
}

vector组合方式

pcl中对其实现使用了三个角度,而没有使用长度,对每一个角度划分为5个区域(bin),然后接下来就是将这3种特征的5个Bin组合成一个vector,有两张方式:

  1. 将这个5*3个bin直接组合在一块,特征只有15个值,最终的直方图横轴就只有15个坐标.FPFH就是采用的这种方式
  2. 讲这3种特征按照各自的阈值分为5类,一共分为15类.比如第一对点的特征为:3,4,4,然后根据5进制转10进制的方式,将其转为10进制数:3x1+4x5+4x25=123.因此,这种方式会有125个横坐标值.FPH就是采用的这种方式

第二种的计算方式如下:
在这里插入图片描述pcl中采用3个角度特征,bin设为5,采用10进制计数,最终为555=125

The default PFH implementation uses 5 binning subdivisions (e.g., each of the four feature values will use this many bins from its value interval), and does not include the distances (as explained above – although the computePairFeatures method can be called by the user to obtain the distances too, if desired) which results in a 125-byte array (5^3) of float values. These are stored in a pcl::PFHSignature125 point type.

FPFH

FAST点特征直方图计算方式

在这里插入图片描述pcl中对FPFH的实现依旧使用了3个角度,但是对bin的划分提升到了11个区域,feature vector的组合方式采用了直接拼接的方式所以为33

The default FPFH implementation uses 11 binning subdivisions (e.g., each of the four feature values will use this many bins from its value interval), and a decorrelated scheme (see above: the feature histograms are computed separately and concantenated) which results in a 33-byte array of float values. These are stored in a pcl::FPFHSignature33 point type.

参考

PFH
FPFH

这篇关于pcl中的PFH和FPFH的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

PCL点云滤波

激光扫描仪、RGB-D相机等设备获取点云数据时,由于设备精度,电磁波的衍射特性,环境因素,操作者经验等因素,导致获取的点云存在一定程度的噪声。点云中的噪声点对后续操作的影响比较大,因此在进行后续处理操作前,应先去除点云噪声。   PCL中有一个专门的点云滤波模块(滤波函数文档地址),可以将噪声点去除,还可以进行点云压缩等操作,非常灵活实用,例如:双边滤波,统计滤波,条件滤波,随机采样一致性滤波

PCL-直通滤波

本篇内容: 讲解直通滤波的作用通过pcl实现直通滤波 效果: 1 主要原理 点云数据通常包含x、y、z三个维度的数据,用户指定维度、范围后,直通滤波过滤或保留该范围内的所有点云 假设我指定维度’y’,范围(0.0,0.1),运行直通滤波后,则过滤或保留y坐标为(0.0,0.1)范围内的所有点云 2 直通滤波主要流程 初始化直通滤波器: pcl::PassThrough<PointTy

【译】PCL官网教程翻译(22):全局对齐空间分布(GASD)描述符 - Globally Aligned Spatial Distribution (GASD) descriptors

英文原文查看 全局对齐空间分布(GASD)描述符 本文描述了全局对齐的空间分布(GASD)全局描述符,用于有效的目标识别和姿态估计。 GASD基于表示对象实例的整个点云的参考系的估计,该实例用于将其与正则坐标系对齐。然后,根据对齐后的点云的三维点在空间上的分布情况计算其描述符。这种描述符还可以扩展到整个对齐点云的颜色分布。将匹配点云的全局对齐变换用于目标姿态的计算。更多信息请参见GASD。

【译】PCL官网教程翻译(21):旋转投影统计(RoPs)特征 - RoPs (Rotational Projection Statistics) feature

英文原网址查看 旋转投影统计(RoPs)特征 在本教程中,我们将学习如何使用pcl::ROPSEstimation类来提取点特性。在这门课中实现的特征提取方法是由Yulan Guo, Ferdous Sohel, Mohammed Bennamoun, Min Lu and Jianwei Wanalso在他们的文章《旋转投影统计用于三维局部表面描述和目标识别》中提出的。 理论基础 特征提

【译】PCL官网教程翻译(20):惯性矩和偏心距描述符 - Moment of inertia and eccentricity based descriptors

英文原网页查看。 基于惯性矩和偏心距的描述符 在本教程中,我们将学习如何使用pcl::MomentOfInertiaEstimation类来获得基于偏心量和惯性矩的描述符。这个类还允许提取轴对齐和有向的点云包围框。但是请记住,提取的OBB可能并不是最小的边界框。 理论基础 特征提取方法的思想如下。首先计算点云的协方差矩阵,提取点云的特征值和特征向量。可以考虑得到的特征向量是归一化的,并且总

【译】PCL官网教程翻译(19):从深度图像中提取NARF特征 - How to extract NARF Features from a range image

英文原文阅读 从深度图像中提取NARF特征 本教程演示如何从深度图像中提取位于NARF关键点位置的NARF描述符。可执行文件使我们能够从磁盘加载点云(如果没有提供,也可以创建点云),从中提取感兴趣的点,然后在这些位置计算描述符。然后,它在图像和3D查看器中可视化这些位置。 代码 首先,在您喜欢的编辑器中创建一个名为narf_feature_extract .cpp的文件,并在其中放置以下代

【译】PCL官网教程翻译(18):估计一组点的视点特征直方图(VFH)签名 - Estimating VFH signatures for a set of points

英文原文查看 估计一组点的视点特征直方图(VFH)签名 本文描述了视点特征直方图([VFH])描述符,这是一种针对聚类(如对象)识别和6DOF姿态估计问题的点簇表示方法。 下图展示了一个VFH识别和姿态估计的例子。给定一组火车数据(除最左边的点云外,最上面一行、最下面一行),学习一个模型,然后使用一个云(最左边的部分)查询/测试模型。匹配的结果按从最好到最差的顺序从左到右从左下角开始。有关更多

【译】PCL官网教程翻译(17):快速点特征直方图(FPFH)描述符 -Fast Point Feature Histograms (FPFH) descriptors

英文原文阅读 快速点特征直方图(FPFH)描述符 计算复杂度直方图(见点特征直方图(PFH)描述符)对于一个给定的有 n n n个点的点云 P P P为 O ( n k 2 ) O (nk ^ 2) O(nk2), k k k是每个点P的最邻近点个数。对于要求实时或接近实时的应用程序,密集点的特征直方图的计算效率是一个一个主要问题。 本教程描述了PFH公式的简化,称为快速点特征直方图(FPF

【译】PCL官网教程翻译(16):点特征直方图(PFH)描述符 -Point Feature Histograms (PFH) descriptors

英文原网页查看。 点特征直方图(PFH)描述符 就点特征表示而言,表面法线和曲率估计是在表示特定点周围的基本的几何形状方面。虽然计算速度极快,也很容易,但是它们不能捕捉太多的细节,因为它们只能用很少的值来近似一个点的k邻域的几何形状。直接的结果是,大多数场景将包含许多具有相同或非常相似的特征值的点,从而减少了它们的信息特征。 本教程介绍了一组为简单起见而创建的3D特征描述符PFH(点特征直方图

Ubuntu中PCL、Eigen、ROS、Ceres、VScode相关操作,安装,卸载,文件存储位置基础合集

Ubuntu中PCL相关操作 查看PCL对应的版本号 apt-cache show libpcl-dev 卸载PCL相关命令 sudo apt-get remove libpcl-dev 如果想要完全卸载相关软件包及其配置文件,需要加上--purge参数: sudo apt-get --purge remove libpcl-dev Ubuntu中eigen相关操作 ubunt