PCL点云库学习笔记(特征)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

特征

一、概述

点特征是根据该点周围可用的信息来描述几何图案,在点周围选择的数据空间通常称为k邻域。两个最广泛使用的几何点特征是下表面的估计曲率和点法线,使用其k个最近点提供的信息来表征一个点。
为了有效地确定k,通常使用空间分解技术(例如八叉树或kD树)将输入数据集分成较小的块,然后在该空间中执行最近点搜索。 可以选择在p点附近的k个固定点,或者以点为中心的半径r的球体内的所有点。
计算点p处的表面法线和曲率变化的最简单方法是在k邻域内进行特征分解(即计算特征向量和特征值)。对应于最小特征值的特征向量将在点p处近似表面法线n,而表面曲率变化将从特征值估算为
在这里插入图片描述

二、特征模块在PCL中是如何工作的

通过setInputCloud(PointCloudConstPtr&)给出整个点云的数据集,评估点云中每个点的特征;
通过setIndices(IndicesConstPtr&)给定索引列表,具有索引的点才进行特征评估。 默认为false,不指定点,当setIndices()=true时只对索引点进行评估;
通过setSearchSurface(PointCloudConstPtr&)来指定要使用的点邻域集。指定要使用邻域点的表面;
当我们有一个非常密集的输入数据集时,只想要估计使用pcl_keypoints方法发现的某些关键点,可以通过setInputCloud()进行关键点输入,并将原始数据作为setSearchSurface()传递。

代码将为输入数据集中的所有点估计一组表面法线。

#include <pcl/point_types.h>
#include <pcl/features/normal_3d.h>

{
  //定义一个点集
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);

  //读取或创建点云数据
  
  //创建法线估计类,把输入的点云数据传递给它
  pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
  ne.setInputCloud (cloud);//给定点云数据集

 
  //创建一个空的kdtree,并将其传递给法线估计类
  // Its content will be filled inside the object, based on the given input dataset (as no other search surface is given).
  pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ> ());
  ne.setSearchMethod (tree);

  // 创建输出法线点云数据集
  pcl::PointCloud<pcl::Normal>::Ptr cloud_normals (new pcl::PointCloud<pcl::Normal>);

  // Use all neighbors in a sphere of radius 3cm
  ne.setRadiusSearch (0.03);

  //计算发现特征
  ne.compute (*cloud_normals);

  // cloud_normals->points.size () should have the same size as the input cloud->points.size ()
}

以下为输入点云中的部分点的一组表面法线

#include <pcl/point_types.h>
#include <pcl/features/normal_3d.h>

{
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);//定义一组点云

  ... read, pass in or create a point cloud ...

  // 创建一组要使用的索引。 索引的大小为输入点云中前10%的点
  std::vector<int> indices (std::floor (cloud->points.size () / 10));
  for (std::size_t i = 0; i < indices.size (); ++i) indices[i] = i;

  // 创建普通的估计类,并将输入数据集传递给它
  pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
  ne.setInputCloud (cloud);

  // 传递索引
  pcl::shared_ptr<std::vector<int> > indicesptr (new std::vector<int> (indices));
  ne.setIndices (indicesptr);

  //创建一个空的kdtree表示形式,并将其传递给正常的估计对象
  //它的内容将根据给定的输入数据集填充到对象内部(因为未提供其他搜索表面)。
  pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ> ());
  ne.setSearchMethod (tree);

  // Output datasets
  pcl::PointCloud<pcl::Normal>::Ptr cloud_normals (new pcl::PointCloud<pcl::Normal>);

  // Use all neighbors in a sphere of radius 3cm
  ne.setRadiusSearch (0.03);

  // Compute the features
  ne.compute (*cloud_normals);

  // cloud_normals->points.size () should have the same size as the input indicesptr->size ()
}
PCL自学:Feature5】视点特征直方图VFH概念及使用 (持续更新) 一、视点特征直方图(VFH)原理   这篇博文描述了视点特征直方图(Viewpoint Feature Histogram[VFH])描述符,在一些其他文章也称为视角特征直方图,这是一种用于聚类识别和6DOF姿态估计问题(六自由度姿态估计)的点聚类的描述符。 1.理论基础:   视点特征直方图(或VFH)起源于FPFH描述符(参见快速点特征直方图(FPFH)描述符)。FPFH有很好的速度和辨别能力,在此基础上添加视点方差,同时保持尺度不变性。   VFH对目标识别和位姿识别问题的主要贡献是将FPFH扩展到整 阅读详情

相关推荐

PCL求取三维点云模型每点曲率

最近在做有关实验需要计算模型曲率,但是网上找了一圈也没找到满意的资料。最后发现PCL库可以很方便的求取模型中每一个点的曲率,但是我们要想将PCL库求得的曲率数据应用到自己的项目中需要将PCL库与我们的项目进行结合,并且在PCL求出曲率后存放在自己的结构体中,这样才能得到更适合自己项目的数据。-----------------------------------实现思路:鉴于在实际使用中只需要一些曲...

会飞的鱼博客 2万+

PCL 计算点云的高斯曲率和平均曲率【2025最新版】

计算点云的高斯曲率和平均曲率,博客长期更新,本文最近更新时间为2025年12月27日。

点云侠的博客 6001

PCL点云库安装及学习(2021.7.28)

PCL点云库学习 2021.7.131、PCL简介2、PCL环境配置3、PCL代码实战 1、PCL简介         PCL是一个点云库PCL帮助文档,PCL论文下载,PCL的Github地址 2、PCL环境配置 3、PCL代码实战 ...

I have a dream, here my dreams come true! 2万+

PCL 计算点云法向量与表面曲率(C++详细过程版)

PCL中的算法邻域搜索只能是K近邻搜索或半径搜索,无法实现混合搜索;本文C++详细过程实现的代码对该不足进行改进,可以实现混合搜索。在一些应用中可以大大提高算法效率。

点云侠的博客 2280

PCL学习记录

Features pcl::Feature 以两种方式输入数据 整个点云数据集,通过setInputCloud (PointCloudConstPtr &)给出–必须的 任何特征估计类都会试图在给定的输入云中的每一个点上估计一个特征。 一个点云数据集的子集,通过setInputCloud (PointCloudConstPtr &)和setIndices (IndicesConstPtr &)给出。 任何特征估计类将尝试在给定的输入云中的每个点上估计一个特征,该点的索引在给定的指数

路边的石头 506

点云库PCL从入门到精通》不完全学习笔记

我认为快不快速,在原理上的差别在于:PFH是计算邻域内所有点的统计结果,FPFH是先计算一组(但是这个一组是怎么个范围,不是很清楚),再用计算结果表示邻近点的直方图;首先,指定一个维度以及该维度下的值域,其次,遍历点云中的每个点,判断该点在指定维度上的取值是否在值域内,删除取值不在值域内的点,最后,遍历结束,留下的点即构成滤波后的点云。因此,泊松曲面重建比上述方法更可取,因为它们会产生非平滑结果,因为点云的点也是生成的三角形网格的顶点,无需任何修改。它为源点云中的每个点计算到目标点云中最近点的距离。

weixin_43245498的博客 1937

点云库PCL学习笔记 -- 可视化 -- 4.PCLPlotter可视化特征直方图

点云库PCL学习笔记 -- 可视化 -- 4.PCLPlotter可视化特征直方图 基于八叉树的无序点云数据集的空间变化检测代码octree_change_detection.cpp 设置编译文件CMakeLists.txt 编译 mkdir build cd build/ cmake .. make 执行程序 cd .. ./build/octree_change_detection 结果如下: ...

杰尼君的博客 905

点云库PCL学习:特征描述与提取(FPFH)

点云库PCL学习:特征描述与提取(FPFH)快速点特征直方图(FPFH)描述子PFH和FPFH的区别估计FPFH描述子估计结果 快速点特征直方图(FPFH)描述子 已知点云P中有n个点,那么它的点特征直方图(PFH)的理论计算复杂度是(Onk2),其中k是点云P中每个点p计算特征向量时考虑的邻域数量。对于实时应用或接近实时应用中,密集点云的点特征直方图(PFH)的计算,是一个主要的性能瓶颈。此处为...

Mr Qin的博客 3186

【激光雷达】认识点云库PCL

前言 激光雷达生成的点云数据通过可视化显示,是下图中的效果: 能看到激光雷达发射多线激光束(蓝色圆圈形纹),通过接收器进行处理加工,最好可视化展示出来。从图能看到车、行人、路灯杆、周围的建筑物等。 我们能看到它感知到行人(红色的),一圈一圈类似于水纹的是激光雷达发出的光波。 那么通过什么来处理这些点云数据呢? 答案是:PCL点云库 简介 PCL全称 Poi...

黎国溥 6675

PCL点云库入门(第1讲)——PCL库简介和安装(Win10/11+VS2019+PCL 1.12.0)

PCL,全称为,即点云库,是一个专注于2D/3D图像和点云处理的大型开源项目。该项目最初由斯坦福大学的杰出计算机视觉专家Radu博士及其团队开发和维护,经过十余年的发展,目前(2024年12月)已更新至1.14.1版本。PCL点云库集成了众多尖端的点云处理算法,这些算法不仅包括基础的滤波、特征估计、表面重建、配准、模型拟合和分割等,还涵盖了更高级的功能,如点云数据的语义理解、场景解析以及动态环境下的实时处理。这些算法能够对含有噪声的点云数据进行有效过滤,去除异常值;

qq_36812406的博客 1万+

ubuntu18.04 安装pcl点云库(亲测有效)

PCL点云处理库的简单介绍和安装使用。ubuntu18.04

莫大逗比嘟嘟 8295

PCL点云库入门——PCL库点云特征之点云法向量(NormalEstimation)及其可视化

点云特征描述在三维数据处理领域扮演着至关重要的角色,它直接决定了后续的识别、分类以及重建等关键任务的执行效果。在众多的特征描述方法中,我们可以看到基于几何形状的特征、基于统计信息的特征以及基于变换域的特征这三种主要类别。几何形状特征,例如法线和曲率等,能够直观地揭示点云数据中各个点的局部结构信息;而统计信息特征,如分布直方图和协方差矩阵等,从宏观层面描述了点云数据的整体特性;变换域特征,例如傅里叶变换和小波变换等,通过频域分析的方法来揭示点云数据中隐藏的深层次信息。

qq_36812406的博客 2463

激光雷达与PCL点云库学习

运行环境是树莓派4b,很多包不能用指令下载1、ros中常用的包从下面这个链接下载(视觉、pcl、激光等等)2、一些找不到的包可以从github上搜(有时候名字不是表明那个,可以直接百度一下)3、PCL点云库:红色是X轴,绿色是Y轴,蓝色是Z1、必须懂得的概念编译的debug(慢)、release动态库(dll)、静态库(lib)C++的模板编程与基本用法cmake的原理和简单使用Elem* data;int size;public:2、PCL处理流程。

2301_76695137的博客 3104

PCL点云库:中

本篇博客参考《点云库PCL从入门到精通》对其中的主要内容进行了总结并对代码进行了调试,以便加深理解和记忆

路遥知马力,日久见人心 1019

PCL点云库 概览

PCL 是一个功能强大且灵活的开源库,覆盖了从点云创建、处理到可视化的各个方面。无论是基础的点云操作,还是复杂的配准、特征提取和分割,PCL都提供了丰富的接口和工具。通过掌握PCL的核心功能,您可以轻松地处理来自各种3D传感器的数据,在计算机视觉、机器人、无人驾驶等领域中实现复杂的点云处理任务。

weixin_73414031的博客 2045

PCL点云库:上

本篇博客参考《点云库PCL从入门到精通》对其中的主要内容进行了总结并对代码进行了调试,以便加深理解和记忆

路遥知马力,日久见人心 1086

PCL点云库入门——PCL库点云特征之PFH点特征直方图(Point Feature Histograms -PHF)

PFH点(Point Feature Histogram)特征直方图的原理涉及利用参数化查询点与邻域点之间的空间差异,并构建一个多维直方图以捕捉点的k邻域几何属性。这个高维超空间为特征表示提供了一个可度量的信息空间,对于点云对应曲面的六维姿态,它具有不变性,并且在不同的采样密度或邻域噪声水平下表现出鲁棒性。PFH特征描述表示法基于点与其k邻域之间的关系以及它们的估计法线,简而言之,它考虑了所有估计法线方向之间的相互作用,试图捕捉最佳的样本表面变化情况,以描述样本的几何特征

qq_36812406的博客 1715

PCL点云库完全教程:从基础到实战应用

点云库(Point Cloud Library,PCL)是一个开源的大型跨平台机器视觉库,专注于处理点云数据,广泛应用于三维数据处理领域。PCL库集合了多种计算机视觉和图形处理的算法,支持从点云获取、滤波、特征提取、分割、表面重建、配准到可视化等多个处理步骤,为研究者和开发者提供了一站式的解决方案。以下介绍几种常用的点云滤波算法:均值滤波:通过对点云中的点及其邻域点取均值来平滑表面,减少噪声。中值滤波:将每个点的位置替换为邻域点的中值,有效去除离群点。统计滤波。

weixin_42405592的博客 3564

点云库PCL学习——Harris关键点

本节将演示如何检测点云的3DHarris角点。 Harris算子是常见的特征检测算子,既可以提取角点也可以提取边缘点。与2DHarris角点检测原理不同,3DHarris角点检测利用的是点云法向量的信息。 首先介绍一下Harris算子所用到的类: HarrisKeyPoint2D类 pcl::HarrisKeypoint2D< PointInT, PointOutT, Intensi...

zzh_AI的博客 5157
上一篇: PCL点云库学习笔记(滤波)
下一篇: PCL点云库学习笔记(点云分割1)
catog
博客等级 码龄7年 52粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值