点云特征描述子概述、PFH描述子提取

news2024/9/22 9:39:03

1、 6种点云特征描述子简概

NARF(Normal Aligned Radial Feature)特征点描述子:NARF描述子是一种基于法线对齐的径向特征描述子。它通过将点云表面分割为小的网格单元,并计算每个单元中的法线直方图,从而提取特征。NARF描述子对于点云的曲率形状变化比较敏感,可用于目标检测和场景识别等任务。

PFH(Point Feature Histogram)和 FPFH(Fast Point Feature Histogram)点特征直方图描述子:PFH和FPFH是一类常用的点云特征描述子。它们通过计算点与其邻域内其他点之间的相对位置和法线之间的关系构建直方图描述子。PFH描述子计算相对复杂,而FPFH是对PFH进行了优化,提高了计算效率。这些描述子通常用于点云配准、识别和匹配等任务。

RoPs(Rotational Projection Statistics)特征:RoPs特征是一种基于旋转投影统计的描述子。它将点云投影到多个不同的视点上,并统计每个视点上的投影信息,如高度、密度和曲率等。RoPs特征对点云的旋转和尺度变化具有较好的不变性,可用于目标分类和识别等任务。

VFH(Viewpoint Feature Histogram)视点特征直方图描述子:VFH描述子是一种基于视点的特征描述子。它计算点云中每个点与其他点之间的相对位置和法线之间的关系,并构建直方图描述子。VFH描述子主要用于点云的识别和分类任务,对视点变化具有较好的不变性

GASD(Global Alignment of Spatial Distribution)全局对齐的空间分布描述子:GASD描述子是一种基于空间分布的全局特征描述子。它通过将点云投影到三维直方图中,并统计点云在不同区域的分布情况来构建描述子。GASD描述子对点云的全局形状和分布特征进行建模,常用于点云的识别和分类。 

基于惯性矩和偏心率的描述子:这种描述子是一种基于点云几何属性的特征描述子。它通过计算点云的惯性矩和偏心率等几何属性,来表征点云的形状特征。这种描述子通常用于点云的形状分析和识别任务

2、提取PFH(Point Feature Histogram)特征描述子

代码

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

#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/features/normal_3d.h>

int main(){

    // 读取点云数据
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::io::loadPCDFile("/home/jason/file/pcl-learning/data/bunny.pcd", *cloud);

    // --------------------
    // K近邻搜索法线估计
    // --------------------

    pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
    pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> normalEstimation;
    normalEstimation.setInputCloud(cloud);
    normalEstimation.setRadiusSearch(0.03);//领域半径,每个点的领域范围

    pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree(new pcl::search::KdTree<pcl::PointXYZ>);
    normalEstimation.setSearchMethod(kdtree);// kd树搜索每个点的领域点
    normalEstimation.compute(*normals); // 用每个点的领域点估计其法线向量

    // -----------------------------------------------------------------------------
    // 计算PFH特征描述子
    // 使用点云数据和对应的法线数据作为输入。
    // 然后通过设置最近邻搜索方法和搜索半径,对每个点在其邻域内进行特征计算,生成PFH特征描述子。
    // 计算结果存储在pfhs中,可以用于后续的点云处理任务
    // -----------------------------------------------------------------------------

    pcl::PFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::PFHSignature125> pfh; // 创建PFHEstimation对象
    pfh.setInputCloud(cloud); // 输入点云数据
    pfh.setInputNormals(normals); // 输入法线数据

    pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>()); // 创建KdTree对象tree
    pfh.setSearchMethod(tree); // 将tree设置为PFH估计过程中用于搜索最近邻点的方法

    pcl::PointCloud<pcl::PFHSignature125>::Ptr pfhs(new pcl::PointCloud<pcl::PFHSignature125>()); // 用于存储计算得到的PFH特征描述子
    pfh.setRadiusSearch(0.08); // 设置搜索半径,指定在计算每个点的PFH描述子时使用的邻域范围; 必须大与估算法向量的领域半径
    pfh.compute(*pfhs); // 计算点云的PFH特征描述子

    //--------------
    // 打印PFH描述子
    // --------------
    unsigned long size = pfhs->points.size();
    for (int j = 0; j < size ; ++j){
        pcl::PFHSignature125 &signature125 = pfhs->points[j];
        float *h = signature125.histogram;

        printf("%d: %f, %f,%f \n", j, h[1], h[2], h[3]);
    }

    // -----------------
    // 可视化法线
    // ----------------
    pcl::visualization::PCLVisualizer viewer("PCL Viewer");
    viewer.setBackgroundColor(0.0, 0.0, 0.5);
    viewer.addPointCloudNormals<pcl::PointXYZ, pcl::Normal>(cloud, normals, 1, 0.01, "normals");

    while (!viewer.wasStopped()){
        viewer.spinOnce();
    }
    return 0;


}
描述子的打印信息

 

法向量可视化

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/690430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网站监控】如何监控自己的网站(接口)

网站监控-如何监控自己的网站 前言一、开始使用1、使用API进行监控数据采集?2、请求参数3、如何查看监控效果? 二、注意点 前端必备工具&#xff08;免费图床、API、chatAI等&#xff09;推荐网站LuckyCola: https://luckycola.com.cn/ 前言 网站接口监控是指对接口的状态进…

Keil为啥比IAR更受欢迎?

关注星标公众号&#xff0c;不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 最近交流群在讨论【选择Keil和IAR的问题】&#xff0c;这就顺便展开来说下。 你可能觉得Keil、IAR这种集成开发环境界面比较古老&#xff0c;又不好用。 但是&#xff0c;这里告诉大…

ConcurrentModificationException异常分析与解决

ConcurrentModificationException异常分析与解决 1、场景重现&#xff0c;制造ConcurrentModificationException异常 Testpublic void ConcurrentModificationExceptionTest() {JSONArray jsonArray new JSONArray();JSONObject jsonObject new JSONObject();jsonObject.put…

改写cocos2d的ProgressTimer实现任意起始点的Radial进度条

解释一下要做的事&#xff1a; 原生ProgressTimer控件的进度起始点只能是在&#xff08;0.5&#xff0c;1&#xff09;的位置&#xff0c;如下&#xff1a; 我们要改成可以将矩形边上的任意点作为起始点&#xff0c;如下&#xff1a; 首先讲一下绘制的逻辑&#xff1a; 先根…

3: PCIe BDF(Bus,Device,Function)

目录 1.概述 2.BUS&#xff1a;总线号 3.Device&#xff1a;设备号 4.Function&#xff1a;功能号 1.概述 PCIe总线中的每一个功能都有一个唯一的标识符与之对应。这个标识符就是BDF&#xff08;Bus&#xff0c;Device&#xff0c;Function&#xff09; 2.BUS&#xff1a;总…

基于Java客户管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

SSD202D-GPIO调试驱动-三

前面又两个介绍 SSD202D-GPIO调试驱动-一 SSD202D-GPIO调试驱动-二 主要是调试方法: insmod gpio_lonbon.ko 然后可以再看到一下节点 //出现以下节点 proc/gpio-lb/dbg sys/kernel/debug/gpio-lb/debug sys/class/gpio-lb/ dev/gpio-lb 然后

python中MongoEngine简单使用

python中MongoEngine简单使用 1 MongoEngine介绍 MongoEngine是一个处理MongoDB的对象文档映射器。pymongo是非面向对象的方式操作数据。 MongoEngine开发文档 # 开发文档 http://docs.mongoengine.org/index.html# 数据类型 http://docs.mongoengine.org/apireference.htm…

Excel 2019访问SQL Server数据库的实现过程

源之&#xff1a;https://vip.kingdee.com/article/288066926977041920?productLineId11 在日常ERP系统实施过程中&#xff0c;往往会遇到客户的一些个性化需求&#xff0c;比如有些客户习惯用Excel电子表格来查看ERP系统中的数据&#xff0c;业余拓展学习了一下&#xff0c;借…

STM32cubeMX配置工程(全过程+修改MCU方法+注意事项)

1.修改默认的固件包下载路径&#xff0c;避免占用C盘空间 2、选择ACCESS TO MCU 3、在跳出的界面中的Part Number中搜索对应的芯片型号 4、选好后在右下角双击对应的芯片&#xff0c;然后跳出配置界面 左边可以配置外设&#xff0c;右边可以配置每个IO口的功能 System Core包括…

java之路——带你了解SpringSecurity安全框架与基本应用

文章目录 一、什么是SpringSecurity二、SpringSecurity的主要应用场合三、springsecurity代码步骤 一、什么是SpringSecurity **Spring Security是一个功能强大的开源框架&#xff0c;用于在Java应用程序中实现身份验证和授权功能。它提供了一套全面的安全性解决方案&#xff…

java设计模式(二十三)访问者模式

目录 定义模式结构角色职责代码实现适用场景优缺点定义 访问者模式是一种行为型模式,它允许你定义一个作用于某个对象结构中的各个元素的操作,而同时又不改变这些元素的类。该模式的核心思想是将数据结构与数据操作分离,从而可以在不改变数据结构的前提下定义新的操作。 模…

【爆肝四万字!操作系统原理95+】期末考试知识点超超全总结

本文涵盖了笔者本学期学习“操作系统原理”课程的所有重要内容&#xff0c;还包含了一定量的经典例题。纯干货&#xff0c;不废话&#xff01;目的在于知识的记录&#xff0c;便于今后的回顾&#xff0c;同时也希望对即将考试的朋友们有帮助。 目录 操作系统概述 操作系统的…

前端Vue自定义加载中loading加载结束end组件 可用于分页展示 页面加载请求

前端Vue自定义加载中loading加载结束end组件 可用于分页展示 页面加载请求&#xff0c; 请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13219 效果图如下&#xff1a; 实现代码如下&#xff1a; # cc-paging #### 使用方法 使用方法 <!--…

Floyd 算法研究(P 矩阵详解)

Floyd 算法研究 理论基础 求最短路径Floyd算法&#xff01; Floyed&#xff08;floyd&#xff09;算法详解 Floyd-傻子也能看懂的弗洛伊德算法 最短路径Floyd算法【图文详解】 最短路径问题—Floyd算法详解 算法&#xff1a;最短路径之弗洛伊德&#xff08;Floyd&#xff09;算…

DS18B20数字温度传感器的工作原理引脚及功能实物读取温度原理图

DS18B20温度传感器仿真图 . . . . 功能描述&#xff1a; 1 本实验采用DS18B20作为温度检测模块&#xff0c;51单片机&#xff0c;液晶1602显示&#xff0c;报警电路&#xff0c;按键电路。 2 液晶上面T代表温度&#xff0c;H代表上限值&#xff0c;L代表下限值 3 这个上下限值…

阿里云安全提醒:网站涉及违法不良信息该怎么办

北京某客户的网站突然收到阿里云的短信告警说&#xff0c;【阿里云】尊敬的********qq.com:您网站www.*******.com涉及违法不良信息&#xff0c;请尽快核查清理&#xff0c;详见站内信及邮件。客户有点懵&#xff0c;不知道为何会收到这样的一条短信&#xff0c;但阿里云也不会…

LTV-61L-ASEMI代理台湾光宝高速光耦LTV-61L

编辑&#xff1a;ll LTV-61L-ASEMI代理台湾光宝高速光耦LTV-61L 型号&#xff1a;LTV-61L 品牌&#xff1a;台湾光宝 封装&#xff1a;LSOP-6 引脚数量&#xff1a;6 类型&#xff1a;光耦 特性&#xff1a;台湾光宝、IGBT驱动器、储能专用光耦&#xff3c;高速光耦 封…

怎么一键远程访问无人值守电脑?

远程办公和无人值守的远程访问 如今&#xff0c;远程办公越来越人们所熟知。远程办公需要在没有其他人帮助的情况下访问您的办公室计算机并接受远程请求。那么如何从外面完成对办公室电脑的无人值守远程访问呢&#xff1f; 众所周知&#xff0c;远程桌面使您能够通过…

基于SpringBoot的点餐系统的设计与实现(源码+数据库+文档+说明)

系统主要采用了 Spring Boot、 Mybatis的框架&#xff0c; MySQL作为开发数据库&#xff0c;利用 MVC的设计理念&#xff0c;实现了管理端管理员工及菜品信息发布、员工账号菜品信息发布及配送、移动端查看菜品信息及消费等基本的功能需求。 关键技术介绍 操作系统&#xff1…