0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PCL中法线空间采样介绍

麦辣鸡腿堡 来源:古月居 作者:敢敢のwings 2023-11-21 17:28 次阅读

法线空间采样

NormalSpaceSampling即:法线空间采样,它在法向量空间内均匀随机抽样,使所选点之间的法线分布尽可能大,结果表现为地物特征变化大的地方剩余点较多,变化小的地方剩余点稀少,可有效保持地物特征。实现方法如下:

1、首先计算每个点的K领域,然后计算点到领域点的法线夹角值,以此来近似达到曲率的效果并提高计算效率,因为曲率越大的地方,夹角值越大。

2、设置一个角度阈值,当点的领域夹角值大于阈值时被认为是特征明显的区域,其余区域为不明显区域。

3、对明显和不明显区域进行均匀采样,采样数分别为U_(1-V)和U_V,U是目标采样数,V是均匀采样性。

// 创建基于邻域的法向估计类对象
 // // 基于omp并行加速,需配置开启OpenMP
 // pcl::NormalEstimationOMP< pcl::PointXYZ, pcl::Normal > ne; 
 // ne.setNumberOfThreads(10);
 pcl::NormalEstimation< pcl::PointXYZ, pcl::Normal > ne;
 // 创建一个空的kdtree对象,并把它传递给法线估计对象,
 // 用于创建基于输入点云数据的邻域搜索kdtree
 pcl::search::KdTree< pcl::PointXYZ >::Ptr 
             tree(new pcl::search::KdTree< pcl::PointXYZ >());
 // 传入待估计法线的点云数据,智能指针
 ne.setInputCloud(cloud_src);
 // 传入kdtree对象,智能指针
 ne.setSearchMethod(tree);
 // 设置邻域搜索半径
 ne.setRadiusSearch(0.1f);    // 设置半径时,要考虑到点云空间间距
 // // 也可以设置最近邻点个数
 // ne.setKSearch(25);
 // 设置视点源点,用于调整点云法向(指向视点),默认(0,0,0)
 ne.setViewPoint(0,0,0);
 // 计算法线数据
 ne.compute(*cloud_normals);


 // 通过concatenateFields函数将point和normal组合起来形成PointNormal点云数据
 pcl::PointCloud< pcl::PointNormal >::Ptr 
             cloud_with_normal(new pcl::PointCloud< pcl::PointNormal >());
 pcl::PointCloud< pcl::PointNormal >::Ptr 
     cloud_with_normal_sampled(new pcl::PointCloud< pcl::PointNormal >());
 pcl::concatenateFields(*cloud_src, *cloud_normals, *cloud_with_normal);


 // 创建法向空间采样(模板)类对象
 pcl::NormalSpaceSampling< pcl::PointNormal, pcl::Normal > nss;
 // 设置xyz三个法向空间的分类组数,此处设置为一致,根据具体场景可以调整
 const int kBinNum = 8;
 nss.setBins(kBinNum, kBinNum, kBinNum);
 // 如果传入的是有序点云,此处可以尝试设置为true
 nss.setKeepOrganized(false);
 // 设置随机种子,这样可以保证同样的输入可以得到同样的结果,便于debug分析
 nss.setSeed(200);   // random seed
 // 传入待采样的点云数据
 nss.setInputCloud(cloud_with_normal);
 // 传入用于采样分析的法线数据,需与传入点云数据一一对应
 nss.setNormals(cloud_normals);
 // 设置采样总数,即目标点云的总数据量
 const float kSampleRatio = 0.1f;
 nss.setSample(cloud_with_normal- >size()*kSampleRatio);
 // 执行采样并带出采样结果
 nss.filter(*cloud_with_normal_sampled);
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • plc
    plc
    +关注

    关注

    4975

    文章

    12254

    浏览量

    454915
  • 数据
    +关注

    关注

    8

    文章

    6511

    浏览量

    87600
  • 采样
    +关注

    关注

    1

    文章

    109

    浏览量

    25371
收藏 人收藏

    评论

    相关推荐

    关于232的NCL,PCL的疑问

    有没有大神接触过这种232通讯的仪表,上面有NCL RXD,NCL TXD;PCL RXD,PCL TXD。这种能用DB9的芯片去采集数据吗?我用DB9的RXD去接它的 NCL TXD,数据偶尔会有一位的偏移,请问该怎么正确的采集它的数据,拜谢
    发表于 11-07 16:15

    PCL点云库介绍及项目配置方式

    关于PCL点云库,大家百度的时候可以找到很多相关的介绍,反正一堆专业性概念,相关的技术层面以及一些强大的应用叙述云云,不过关于这些小编实在不感冒,能先把这个工具好好用起来再说吧。关于PCL相关的论坛
    发表于 07-02 07:44

    EMIF介绍CE空间

    一. EMIF介绍CE空间:dsp的存储空间分为片内和片外两种,片外空间分成四个部分,分别用于映射不同的片外设备,即ce空间 。The re
    发表于 07-28 09:08

    阿尔法线圈是什么

    在无线充电领域,我们平常可以看到各种不同尺寸、不同材质、不同形状的线圈被广泛应用于发射端与接收端产品上,alpha线圈,俗称阿尔法线圈,因为它的两个引出线均在线圈外侧,形似α而得名。阿尔法线圈是单线
    发表于 09-15 06:43

    如何去配置PCL

    PCL是什么?怎样去编写并调试PCL程序?
    发表于 10-09 08:19

    PCL6143运动控制器原理及应用

    PCL6143运动控制器的原理及应用 可以用于设计开发相应的芯片电路。介绍PCL6143 的功能结构、主要寄存器以及指令系统。设计了一款基于PC104总线的四轴运动控制卡, 介绍了如
    发表于 09-26 08:14

    PCL6143运动控制器的原理及应用

       介绍PCL6143的功能结构、主要寄存器以及指令系统。设计了一款基于PC104总线的四轴运动控制卡,介绍了如何编写运动控制卡的功能函数库。
    发表于 12-13 17:16 106次下载
    <b class='flag-5'>PCL</b>6143运动控制器的原理及应用

    PCL86牛输出耳放电路图

      PCL86牛输出耳放电路图
    发表于 09-29 22:30 4146次阅读
    <b class='flag-5'>PCL</b>86牛输出耳放电路图

    中法海洋卫星成功发射 首次实现海风和海浪同步观测

    北京时间10月29日8时43分,中国在酒泉卫星发射中心用长征二号丙运载火箭,成功发射中法合作研制的首颗卫星中法海洋卫星。 中国国家航天局、自然资源部介绍说,中法海洋卫星由两国历时13年
    的头像 发表于 10-29 10:05 5114次阅读

    空间曲线基于内在几何量的均匀采样方法

    为解决均匀参数采样在许多情况下得到质量不高的采样点,进而生成不理想的B样条拟合曲线,提出空间曲线基于内在几何量的均匀采样方法,以获得给定总数且具有代表性的
    发表于 04-22 11:34 4次下载
    <b class='flag-5'>空间</b>曲线基于内在几何量的均匀<b class='flag-5'>采样</b>方法

    在Ubuntu上编译安装pcl教程

    编译安装PCL(Point Cloud Library)是在Ubuntu上使用自定义选项进行安装的一种方式。
    的头像 发表于 10-26 09:36 434次阅读

    PCL中基础下采样介绍

    顾名思义,随机下采样就似乎在原始点云中随机采样一定点数的点。这种方法最终得到的点云数量也是固定的。 pcl::PointCloud ::Ptr cloud_sub( new pcl
    的头像 发表于 11-21 17:03 438次阅读
    <b class='flag-5'>PCL</b>中基础下<b class='flag-5'>采样</b><b class='flag-5'>介绍</b>

    PCL中最远点采样是什么

    最远点采样(Farthest Point Sampling) 这里我们来单独看一下调用代码,这里可以看到PCL中支持直接调用farthest_sampling这个函数可以实现最远点采样。 最远点
    的头像 发表于 11-21 17:18 327次阅读

    PCL泊松盘采样具体流程

    点之间最近的距离r,以及采样点所在空间的维度n,比如2维平面 2、在空间里生成足够多的网格,保证不接触的两个网格之间的点的距离大于r,并且网格数量足够多保证每个网格至多只需装一个采样
    的头像 发表于 11-21 17:42 445次阅读
    <b class='flag-5'>PCL</b>泊松盘<b class='flag-5'>采样</b>具体流程

    PCL中非均匀体素采样介绍

    非均匀体素采样 SamplingSurfaceNormal,将输入空间划分为网格,直到每个网格中最多包含N个点,并在每个网格中随机采样点。 使用每个网格的N个点计算法线。 在网格内
    的头像 发表于 11-21 17:50 433次阅读