#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //添加QDateTime头文件 #include #include #include #include // Point Cloud Library #include #include #include #include // TicToc #include #include #include #include #include #include #include #include #include #include #include #include #include //随机数 #include #include #include // TicToc #include #include #include #include #include #include #include #include #include #include #include #include #include #include // 4PCS算法 #include //K4PCS算法头文件 #include #include #include #include #include //贪婪投影三角化算法类定义的头文件 #include //移动立方体 #include #include //MLS #include //泊松重建 #include #include #include #include #include #include // TicToc #include // 体素滤波 #include // 体素滤波 #include #include #include #include #include #include #include //随机参数估计方法 #include //模型定义 #include //RANSAC分割 #include #include #include //rand()头文件 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //可视化相关头文件 #include #include #include #include #include #include #include #include // Boost #include // Visualization Toolkit (VTK) #include #include "BasePCL.h" /////////////////////////////////////////////////////////// //// 构建 点法向量 ////////////////////////////////////////////////////////// // 构建点云法向量 void NormalEstimation(pcl::PointCloud::Ptr cloud, pcl::PointCloud::Ptr cloud_with_normals); //////////////////////////////////////////////////////////////////// // 离群点 + 滤波 ////////////////////////////////////////////////////////////////// /* 下采样 */ void downSampling(pcl::PointCloud::Ptr cloud, pcl::PointCloud::Ptr cloud_filtered, double leafSize = 0.01f); /* 高斯滤波 */ void gaussian_filter(pcl::PointCloud::Ptr cloud, pcl::PointCloud::Ptr cloud_filtered, double radius); /* 双边滤波1 */ void bilateralFilter(pcl::PointCloud::Ptr input, pcl::PointCloud::Ptr output, float sigma_s, float sigma_r); /* 半径滤波器: 基于密度的杂散点移除 */ void radius_filter(pcl::PointCloud::Ptr cloud, pcl::PointCloud::Ptr cloud_filtered, pcl::PointCloud::Ptr cloud_filtered_out, double RadiusSearch=0.015, int minNearSearch=35); /* 统计滤波器: 基于统计的杂散点移除 */ void statistical_filter( pcl::PointCloud::Ptr cloud, pcl::PointCloud::Ptr cloud_filtered, pcl::PointCloud::Ptr cloud_filtered_out, int meanK= 50, double StddevThresh=1.0); /************************************************************************/ /* 表面重建 */ /************************************************************************/ /* 下采样点云精简 */ void MLS(pcl::PointCloud::Ptr cloud_in, pcl::PointCloud::Ptr cloud_with_normals); void Pos(pcl::PointCloud::Ptr cloud_with_normals, pcl::PolygonMesh& mesh, int Degree = 2, int Depth = 8, int IsoDivide = 8, float SamplesPerNode=3.0, int SolverDivide=8 ); // 贪婪三角网 void GP(pcl::PointCloud::Ptr cloud_with_normals, pcl::PolygonMesh& mesh, double SearchRadius=1, double Mu=2.5, int MaximumNearestNeighbors=100, double MaximumSurfaceAngle=M_PI/4.0, double MinimumAngle=M_PI/18, double MaximumAngle=M_PI/3 ); //移动立方体 void MC(pcl::PointCloud::Ptr cloud, pcl::PolygonMesh& mesh); /************************************************************************/ /* 点云配准算法 */ /************************************************************************/ //// 接下来使用的点云指针 //PointCloudT::Ptr cloud_in; // Original point cloud //PointCloudT::Ptr cloud_tr; // Transformed point cloud //PointCloudT::Ptr cloud_RE; // ICP output point cloud // ////使用配准基类Registration来实现多态 //pcl::Registration::Ptr ALIGN; //pcl::IterativeClosestPoint::Ptr icp; // ////迭代次数 //int iterations = 1; // Default number of ICP iterations //// bool next_iteration = false; /* 打印4*4的矩阵 */ void print4x4Matrix(const Eigen::Matrix4d& matrix); // TODO /* 4*4的矩阵 */ QString get4x4MatrixStr(const Eigen::Matrix4d& matrix);