PCL:基于多项式平滑点云及法线估计的曲面重建

mac2026-08-17  1

#include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/kdtree/kdtree_flann.h> #include <pcl/surface/mls.h> int main(int argc, char** argv) {// 将一个适当类型的输入文件加载到对象PointCloud中 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>()); pcl::PCDWriter writer; // 加载bun0.pcd文件,加载的文件在 PCL的测试数据中是存在的 pcl::io::loadPCDFile("table_scene_lms400_downsampled.pcd", *cloud); // 创建一个KD树 pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>); // 输出文件中有PointNormal类型,用来存储移动最小二乘法算出的法线 pcl::PointCloud<pcl::PointNormal> mls_points; // 定义对象 (第二种定义类型是为了存储法线, 即使用不到也需要定义出来) pcl::MovingLeastSquares<pcl::PointXYZ, pcl::PointNormal> mls; mls.setComputeNormals(true); //设置参数 mls.setInputCloud(cloud); //设置输入点云 mls.setPolynomialFit(true);//设置在最小二乘计算中需要法线估计 mls.setSearchMethod(tree); mls.setSearchRadius(0.03); //设置搜索半径,确定多项式拟合时所用的邻域点进行k近邻搜索时所用的半径 // 曲面重建 mls.process(mls_points); // 保存结果 pcl::io::savePCDFile("bun0-mls.pcd", mls_points); //writer.write("下采样过后的点.pcd", mls_points, false);//自己添加 return 0; }
最新回复(0)