@[TOC]PCL中点云特征描述与提取模块的学习
学习背景
参考书籍:《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,,PCL版本为1.10.0,CMake版本为3.16
学习内容
使用积分图进行法线估计,注意此方法只适用有序点云
源代码及所用函数
源代码
//使用积分图进行法线估计
#include<iostream>
#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>
#include<pcl/features/integral_image_normal.h>
#include<pcl/visualization/cloud_viewer.h>
int main()
{
//打开点云
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile("/home/jojo/PointCloud/PCLB/Features/03/table_scene_mug_stereo_textured.pcd",*cloud);
//创建法线向量
pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
pcl::IntegralImageNormalEstimation<pcl::PointXYZ,pcl::Normal> ne;
/****************************************************************************************
三种法线估计方法
COVARIANCE_MATRIX 模式从具体某个点的局部邻域的协方差矩阵创建9个积分,来计算这个点的法线
AVERAGE_3D_GRADIENT 模式创建6个积分图来计算水平方向和垂直方向的平滑后的三维梯度并使用两个梯度间的向量
积计算法线
AVERAGE_DEPTH——CHANGE 模式只创建了一个单一的积分图,从而平局深度变化计算法线
********************************************************************************************/
ne.setNormalEstimationMethod(ne.AVERAGE_3D_GRADIENT);//设置法线估计方式AVERAGE_3D_GRADIENT
ne.setMaxDepthChangeFactor(0.02f);//设置深度变化系数
ne.setNormalSmoothingSize(10.0f);//设置法线优化时考虑的邻域大小
ne.setInputCloud(cloud);//输入的点云
ne.compute(*normals);
//可视化点云
pcl::visualization::PCLVisualizer viewer("PCL Viewer");//设置窗口名称
viewer.setBackgroundColor(0,0,0);//设置窗口背景颜色
viewer.addPointCloudNormals<pcl::PointXYZ,pcl::Normal>(cloud,normals);
while (!viewer.wasStopped())
{
viewer.spinOnce();
}
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)#指定CMake的最低版本要求为3.16
project(project)#设置项目名称
find_package(PCL 1.10 REQUIRED)#查找PCL库,要求版本为1.10或更高。
include_directories(${PCL_INCLUDE_DIRS})#将PCL库的头文件目录添加到包含路径中
link_directories(${PCL_LIBRARY_DIRS})#将PCL库的库文件目录添加到链接器搜索路径中。
add_definitions(${PCL_DEFINITIONS})#添加PCL库的编译器定义
add_executable (normal_estimation_using_integral_images normal_estimation_using_integral_images.cpp)
target_link_libraries (normal_estimation_using_integral_images ${PCL_LIBRARIES})#将PCL库链接到可执行文件目标。
运行结果
函数
补充内容
点云文件显示已存在,上传不了。