一、随便扯扯的概述

在进入到计算机图形学的研究中已经过去了好几个月了,自然免不了要跟PCL打交道。在学习PCL的过程中,越来越觉得PCL真的是个非常强大的工具,让人爱不释手,但同时也让人感到沮丧,因为你会发现,你有的想去实现的想法PCL里面都早就实现了,并且效果还非常好。这里就我在学习提取点云特征的过程中遇到的一个PCL里面的一个非常简单并且基本的特征提取方法(利用PCL中的曲率计算)做个简要的记录。

         如果需要配置PCL,请看我https://blog.csdn.net/McQueen_LT/article/details/84792197这篇文章。

二、计算点云曲率(法线)的具体步骤

PCL中有一个计算点云法线的类叫做NormalEstimation,使用方法就是:

1. 利用setInputCloud()方法输入需要进行法线估计的点云;

2. 初始化一个邻域搜索的方式,例如KdTree;

3. 使用setSearchMethod()设置搜索方式;

4. 声明一个用来存储计算结果的Normal类点云;

5. 通过setRadiusSearch()设置搜索邻域的半径;

6. 将第4步声明的变量传入compute()函数存储计算结果。

三、了解 pcl::PointCloud<pcl::Normal>::Ptr 数据结构

在二中最终计算的结果就存储在这个类型的数据结构中,在后面的利用曲率提取特征的过程中我们会利用到这个数据结构中的curvature元素。要找到这个元素也不是特别明显就能发现的,可以通过阅读PCL的相关源码http://docs.pointclouds.org/trunk/point__types_8hpp_source.html就能很清楚其中的内部结构。

这个结构中一共有四个元素,前三个元素分别为normal_x,normal_y,normal_z,可以清楚地知道分别就是法线的向量了,还有一个就是curvature元素,表示当前点的曲率。

四、 提取特征(代码)

后面的过程更简单,我就直接贴出完整的代码。

#include <pcl/point_types.h>
#include <pcl/features/pfh.h>
#include <pcl/features/fpfh.h>
#include <pcl/io/ply_io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/features/normal_3d.h>
#include <pcl/visualization/histogram_visualizer.h>
#include <pcl/visualization/pcl_plotter.h>
#include <pcl/visualization/cloud_viewer.h>
#include <math.h>
#include <Eigen/Eigen>
#include <cmath>
#include <string>
using namespace std;int main()
{string filename="bunny";pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr (new pcl::PointCloud<pcl::PointXYZ>);pcl::PLYReader reader;//    pcl::PCDReader reader;//    reader.read(filename+".pcd", *cloud_ptr);reader.read(filename+".ply", *cloud_ptr);if(cloud_ptr==NULL){cout<<"ply/pcd file read error"<<endl;return -1;}pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;ne.setInputCloud(cloud_ptr);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>);double nor_radius=0.002;ne.setRadiusSearch(nor_radius);ne.compute(*cloud_normals);pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_b(new pcl::PointCloud<pcl::PointXYZRGB>);cloud_b->points.resize(cloud_ptr->size());for(int i=0; i<cloud_ptr->points.size(); i++){cloud_b->points[i].x = cloud_ptr->points[i].x;cloud_b->points[i].y = cloud_ptr->points[i].y;cloud_b->points[i].z = cloud_ptr->points[i].z;cloud_b->at(i).r=100;cloud_b->at(i).g=100;cloud_b->at(i).b=100;}pcl::KdTreeFLANN<pcl::PointXYZRGB> kdtree;kdtree.setInputCloud(cloud_b);for(int i=0; i<cloud_b->points.size(); i++){if(cloud_normals->points[i].curvature>0.01){cloud_b->at(i).r=255;cloud_b->at(i).g=0;cloud_b->at(i).b=0;}}pcl::io::savePLYFile<pcl::PointXYZRGB>("curvature_"+filename+".ply", *cloud_b, false);pcl::visualization::CloudViewer viewer("Viewer");viewer.showCloud(cloud_b);system("PAUSE");return 0;
}

最后贴两张效果图(上述代码会将最后的结果以PLY文件的格式保存到本地,如果想查看的话去去下载个meshlab就行.)

PCL提取3D点云模型特征(1.0 点云曲率)相关推荐

  1. PCL提取3D点云模型特征(3.0 FPFH快速点特征直方图)附完整代码

    一.概述 上一篇博客解释了PFH是什么以及如何利用PFH来提取点云的特征,那么讲了PFH(PCL提取3D点云模型特征(2.0 PFH点特征直方图 )附完整代码)之后肯定是要接着说FPFH的.本来想着把 ...

  2. 云模型的matlab实现,基于云模型效能评估的Matlab实现

    摘  要: 对基于云模型的系统效能评估方法及过程进行了简要的描述,用Matlab代码实现了部分算法,代码经测试均可正确运行.对云模型的研究和应用有一定的推广价值和研究意义. 关键词: Matlab:云 ...

  3. 关于云模型生成云图的MATLAB代码

    首先了解一下什么叫云模型,云模型由中国工程院院士李德毅于1995年提出.云模型由若干云滴组成.其中每个云滴是确定的点,构成一个负责不确定的云.对于一个云的描述饱含三个元素,记作:(Ex,En,He). ...

  4. Matlab实现云模型

    云模型 (1) 模型简介如下图所示 (2) 具体云模型如下图所示   有原始数据得到云滴得步骤为:    [1]计算数据Ex En He      Ex=mean(x(i,:)) En=mean(sq ...

  5. MatLab建模学习笔记11——云模型在数据处理中的应用

    云模型属于不确定性人工智能范畴,主要用于定性与定量之间的相互转换,自然界中的不确定性从属性角度来说主要有随机性和模糊性."云"或者"云滴"是云模型的基本单元,& ...

  6. bluemix_使用Bluemix采用混合云模型

    本教程是使用IBMBluemix®界面的先前版本编写的. 随着技术的飞速发展,某些步骤和插图可能已更改. 我们的团队使用可组合服务方法构建了一个销售报价到现金应用程序,并将其部署在混合云上. 我们的混 ...

  7. 一文读懂什么是云服务器,和本地服务器的区别,云服务的用途,华为云服务器的获取

    [系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <QT开发实战> <嵌入式通用开发实战> <从0到1学习嵌入式Linux开发> <A ...

  8. 实力登场!移动云技术内核2.0 四大全新升级!

    " 中国数字经济占GDP比重持续增长,5G网络建设已进入规模化部署阶段.随着5G网络的发展,企业的数字化改造需求越来越旺盛. 企业日益增长的数字化改造需求对云基础设施提出了新的挑战:需要支持 ...

  9. PCL中3D点云特征描述与提取(三)

    PCL中3D点云特征描述与提取(三) 1 如何从一个深度图像中提取NARF特征 2 RoPs特征 2.1 理论基础 2.1.1 生物视觉认知学启示 2.1.2 局部参考坐标框架构建 2.1.3 RoP ...

最新文章

  1. android系统应用程序,Android系统应用程序基本概念解读
  2. apche 虚拟主机设置
  3. 倪海厦天纪笔记16_倪海厦老师讲解天纪易经——第3集(13)
  4. springboot映射服务器目录,Spring boot文件路径映射配置代码实例
  5. 使用GNS3和Cisco IOU搭建路由交换实验-安装篇
  6. CVPR 2022 | 旷视研究院入选论文亮点解读
  7. 写给那些远程办公程序员的建议!
  8. Oracle 数据库连接工具
  9. ipixsoft swf to html5 converter,iPixSoft SWF to Video Converter
  10. 手机屏碎了,怎样辨别是外屏坏还是内屏坏,看完这篇文章就明白了
  11. Golang 字符串
  12. 英特尔芯片的后缀_英特尔处理器后缀的含义是什么?
  13. 淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段。
  14. java几种对象的区别(PO,POJO,VO,BO,DAO)
  15. R包SangerSeqR处理ab1数据
  16. CSR867x — TWS模式的应用笔记【转载】
  17. Vue 内嵌微信登录二维码及修改默认样式
  18. 【理科】2020年高考数学(第三章导数)考点与题型全归纳
  19. 【MySQL】16-超详细的MySQL单行函数汇总
  20. 工程师如何学习机器学习算法

热门文章

  1. 基于javaweb的小区物业管理系统(java+springboot+ssm+mysql)
  2. 2011级-csdn-java-张侃— struts2的优点
  3. 第十四届蓝桥杯(Web应用开发)模拟赛1期-大学组
  4. java面试宝典大全 | 一份培训机构内部泄露的绝密文档,java面试题
  5. 服务器(Dell T360)Ubuntu16.04+Tesla P100+CUDA8.0+CUDNN7.0.5配置
  6. vs2010c语言窗口程序,VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)...
  7. 2023.2.22上机练习
  8. crm2011 分配角色和删除角色
  9. RXJAVA从入门到精通
  10. 浅谈中国十大国产MOS管品牌哪个好?