PCL法线估计
来源:互联网 发布:java 整型类型 编辑:程序博客网 时间:2024/05/23 20:15
平面的法线是垂直于它的单位向量。在点云的表面的法线被定义为垂直于与点云表面相切的平面的向量。表面法线也可以计算点云中一点的法线,被认为是一种十分重要的性质。
法线提供了关于曲面的曲率信息,这是它的优势。许多的PCL的算法需要我们提供输入点云的法线。为了估计它们,代码分析如下
法线提供了关于曲面的曲率信息,这是它的优势。许多的PCL的算法需要我们提供输入点云的法线。为了估计它们,代码分析如下
#include <pcl/io/pcd_io.h>#include <pcl/features/normal_3d.h>#include <boost/thread/thread.hpp>#include <pcl/visualization/pcl_visualizer.h>int main(int argc,char**argv){//创建点云对象pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);//创建法线的对象pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);//读取PCD文件if(pcl::io::loadPCDFile<pcl::PointXYZ>(argv[1],*cloud) !=0){ return -1;}//创建法线估计的对象pcl::NormalEstimation<pcl::PointXYZ,pcl::Normal> normalEstimation;normalEstimation.setInputCloud(cloud);//对于每一个点都用半径为3cm的近邻搜索方式normalEstimation.setRadiusSearch(0.03);//Kd_tree是一种数据结构便于管理点云以及搜索点云,法线估计对象会使用这种结构来找到哦啊最近邻点pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree(new pcl::search::KdTree<pcl::PointXYZ>);normalEstimation.setSearchMethod(kdtree);//计算法线normalEstimation.compute(*normals);//可视化boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("Normals"));viewer->addPointCloud<pcl::PointXYZ>(cloud,"cloud");while(!viewer->wasStopped()) { viewer->spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(1000000)); }}
试验结果就是运行命令,这里就随便输入一个PCD 文件
可能看不处什么效果*********************
(2)图像积分
积分图像是对有序点云的发现的估计的一种方法。该算法把点云作为一个深度图像,并创建一定的矩形区域来计算法线,考虑到相邻像素关系,而无需建立树形查询结构。因此,它是非常有效的。
#include <pcl/io/pcd_io.h>#include <pcl/features/integral_image_normal.h>#include <boost/thread/thread.hpp>#include <pcl/visualization/pcl_visualizer.h>intmain(int argc, char** argv){ // 点云数据对象 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // 法线对象 pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>); // 读取文件 if (pcl::io::loadPCDFile<pcl::PointXYZ>(argv[1], *cloud) != 0) { return -1; } // 法线估计对象 pcl::IntegralImageNormalEstimation<pcl::PointXYZ, pcl::Normal> normalEstimation; normalEstimation.setInputCloud(cloud); // 法线估计方法: COVARIANCE_MATRIX, AVERAGE_DEPTH_CHANGE, SIMPLE_3D_GRADIENT. normalEstimation.setNormalEstimationMethod(normalEstimation.AVERAGE_3D_GRADIENT); //设置深度变化的阀值 normalEstimation.setMaxDepthChangeFactor(0.02f); // 设置计算法线的区域 normalEstimation.setNormalSmoothingSize(10.0f); // 计算 normalEstimation.compute(*normals); // 可视化 boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("Normals")); viewer->addPointCloud<pcl::PointXYZ>(cloud, "cloud"); viewer->addPointCloudNormals<pcl::PointXYZ, pcl::Normal>(cloud, normals, 20, 0.03, "normals"); while (!viewer->wasStopped()) { viewer->spinOnce(100); boost::this_thread::sleep(boost::posix_time::microseconds(100000)); }}
结果可视化
具体官方的网址查看pointclouds.org/documentation/tutorials/normal_estimation_using_integral_images.php
大神请忽略!!!!
微信公众号号可扫描二维码一起共同学习交流
0 0
- PCL法线估计
- pcl里面的法线估计
- pcl里面的法线估计
- PCL:点云的法线估计(并显示)
- 点云PCL估计一个点云的表面法线
- 使用openmp加速法线估计
- PCL入门<三>平面的法线
- 估计一个点云的表面法线
- 估计一个点云的表面法线
- 使用积分图进行法线估计
- pcl通过积分图来进行法线预测
- pcl通过积分图来进行法线预测
- 基于多项式拟合的法线估计、点云平滑
- PCL之空间非合作目标位姿估计
- 法线
- 点云相关学习总结一——估计一个点云的表面法线
- 基于多项式拟合的法线估计、点云平滑和数据重采样
- 利用PCL处理Realsense点云数据-显示点云法线方向及出现问题的解决
- 谷歌draco
- K-means算法及OpenCV实现
- PCL的PNG文件和计算点云重心
- BZOJ4197: [Noi2015]寿司晚宴 状压DP
- 图片处理(一)
- PCL法线估计
- 活字格V3.0版本强势发布,企业Web应用案例大赛火热进行中
- linux使用<二> 常用命令
- PCL几种采样方法
- STM32F030_RTC详细配置说明
- PCL行人检测
- svn用户账号到期问题
- PCL点云分割(2)
- Spark RDD/Core 编程 API入门系列之map、filter、textFile、cache、对Job输出结果进行升和降序、union、groupByKey、join、reduce、look