pcl曲面重建模块-poisson重建算法示例
2016-08-23 21:19
477 查看
poisson曲面重建算法
pcl-1.8测试通过
pcl-1.8测试通过
#include <iostream> #include <pcl/common/common.h> #include <pcl/io/pcd_io.h> #include <pcl/io/ply_io.h> #include <pcl/search/kdtree.h> #include <pcl/features/normal_3d_omp.h> #include <pcl/point_types.h> #include <pcl/surface/mls.h> #include <pcl/surface/poisson.h> #include <pcl/filters/passthrough.h> #include <pcl/visualization/pcl_visualizer.h> #include <boost/thread/thread.hpp> using namespace pcl; using namespace std; int main (int argc, char** argv) { /*点云读入阶段*/ if(argc <= 2) { cout << "请输入点云数据文件名称,并指定输出数据文件名称" << endl; return 1; } PointCloud<PointXYZ>::Ptr cloud (new PointCloud<PointXYZ>); if(io::loadPCDFile<PointXYZ> (argv[1], *cloud) == -1){ cout << "数据读入失败!!" << endl; return 1; } cout << "数据读入 完成" << endl; /*滤波阶段*/ PointCloud<PointXYZ>::Ptr filtered(new PointCloud<PointXYZ>()); PassThrough<PointXYZ> filter; filter.setInputCloud(cloud); filter.filter(*filtered); cout << "低通滤波 完成" << endl; // MovingLeastSquares<PointXYZ, PointXYZ> mls; // mls.setInputCloud(filtered); // mls.setSearchRadius(0.01); // mls.setPolynomialFit(true); // mls.setPolynomialOrder(2); // mls.setUpsamplingMethod(MovingLeastSquares<PointXYZ, PointXYZ>::SAMPLE_LOCAL_PLANE); // mls.setUpsamplingRadius(0.005); // mls.setUpsamplingStepSize(0.003); // PointCloud<PointXYZ>::Ptr cloud_smoothed (new PointCloud<PointXYZ>()); // mls.process(*cloud_smoothed); // cout << "移动最小二乘平面滤波完成" << endl; /*法向计算阶段*/ NormalEstimationOMP<PointXYZ, Normal> ne; ne.setNumberOfThreads(8); ne.setInputCloud(filtered); ne.setRadiusSearch(5); Eigen::Vector4f centroid; compute3DCentroid(*filtered, centroid); ne.setViewPoint(centroid[0], centroid[1], centroid[2]); PointCloud<Normal>::Ptr cloud_normals (new PointCloud<Normal>()); ne.compute(*cloud_normals); for(size_t i = 0; i < cloud_normals->size(); ++i){ cloud_normals->points[i].normal_x *= -1; cloud_normals->points[i].normal_y *= -1; cloud_normals->points[i].normal_z *= -1; } PointCloud<PointNormal>::Ptr cloud_smoothed_normals(new PointCloud<PointNormal>()); //将点云数据的坐标和法向信息拼接 concatenateFields(*filtered, *cloud_normals, *cloud_smoothed_normals); cout << "法向计算 完成" << endl; /*poission 重建阶段*/ //创建poisson重建对象 Poisson<PointNormal> poisson; // poisson.setDepth(9); //输入poisson重建点云数据 poisson.setInputCloud(cloud_smoothed_normals); //创建网格对象指针,用于存储重建结果 PolygonMesh mesh; //poisson重建开始 poisson.reconstruct(mesh); //将重建结果存储到硬盘,并保存为PLY格式 io::savePLYFile(argv[2], mesh); cout << "曲面重建 完成" << endl; /*图形显示阶段*/ cout << "开始图形显示......" << endl; boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("my viewer")); viewer->setBackgroundColor(0,0,7); viewer->addPolygonMesh(mesh, "my"); viewer->addCoordinateSystem(50.0); viewer->initCameraParameters(); while(!viewer->wasStopped()){ viewer->spinOnce(100); boost::this_thread::sleep(boost::posix_time::microseconds(100000)); } return (0); }
相关文章推荐
- pcl曲面重建模块-poisson重建算法示例
- pcl曲面重建模块-贪婪三角形投影算法实例
- PCL贪婪投影三角算法曲面重建
- 基于PCL三维曲面重建
- PCL: Surface模块之GreedyProjectionTriangulation表面重建
- PCL点云曲面重建(1)
- PCL经典代码赏析八:PCL 点云曲面重建与点云配准
- 基于PCL的三维重建—贪婪投影三角化算法实践与参数设置
- PCL: 根据几何规则的曲面剖分-贪婪法表面重建三角网格
- Python pygorithm模块用法示例【常见算法测试】
- PCL点云曲面重建(1)
- PCL: Surface模块之GridProjection表面重建
- 【OpenCV3图像处理】OpenCV3源代码目录解析(算法模块解析 和 示例目录解析)
- 从算法入手讲解SQL Server的典型示例
- “摘要”算法,使用示例——java
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
- 从算法入手讲解SQL Server的典型示例
- 关于使用HttpModule模块处理登录验证示例
- 将15位身份证补全为18位身份证的算法示例详解
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)