贪婪投影三角化算法对有向点云进行三角化
来源:互联网 发布:linux下创建文件命令 编辑:程序博客网 时间:2024/05/09 23:29
贪婪投影法:先将有向点云投影到某一局部坐标平面内,再在坐标平面内进行平面内的三角化,根据平面内三位点的拓扑关系获得一个三角网格曲面模型。
#include <pcl/point_types.h>#include <pcl/io/pcd_io.h>#include <pcl/kdtree/kdtree_flann.h>#include <pcl/features/normal_3d_omp.h>#include <pcl/features/normal_3d.h>#include <pcl/surface/gp3.h>#include <pcl/visualization/pcl_visualizer.h>#include <boost/thread/thread.hpp>#include <fstream>void main(){ pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>) ; if (pcl::io::loadPCDFile("bun000.pcd" , *cloud) == -1) { PCL_ERROR("Could not read pcd file!\n") ; return ; } pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals(new pcl::PointCloud<pcl::PointNormal>) ; pcl::NormalEstimation<pcl::PointXYZ , pcl::Normal> n ;//法线估计对象 pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>) ;//存储估计的法线 pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>) ; tree->setInputCloud(cloud) ; n.setInputCloud(cloud) ; n.setSearchMethod(tree) ; n.setKSearch(20) ; n.compute(*normals) ; pcl::concatenateFields(*cloud , *normals , *cloud_with_normals) ; pcl::search::KdTree<pcl::PointNormal>::Ptr tree2(new pcl::search::KdTree<pcl::PointNormal>) ; tree2->setInputCloud(cloud_with_normals) ; pcl::GreedyProjectionTriangulation<pcl::PointNormal> gp3 ; pcl::PolygonMesh mesh ; //存储最终三角化的网格模型 gp3.setSearchRadius(0.025) ; gp3.setMu(2.5) ;//设置样本点到最近邻域距离乘积的系数 gp3.setMaximumNearestNeighbors(100) ;//设置样本点搜索的邻域个数为100 gp3.setMaximumSurfaceAngle(M_PI/4) ;//设置某点法线方向偏离样本点法线方向的最大角度为45度 gp3.setMinimumAngle(M_PI/180) ;//设置三角化后得到的三角形内角最小角度为10度 gp3.setMaximumAngle(2*M_PI/3) ; gp3.setNormalConsistency(false) ;//设置该参数保证法线朝向一致 gp3.setInputCloud(cloud_with_normals) ;//设置输入点云为有向点云 gp3.setSearchMethod(tree2) ;//设置搜素方式为tree2 gp3.reconstruct(mesh) ;//重建提取三角化 std::vector<int> parts = gp3.getPartIDs() ; std::vector<int> status = gp3.getPointStates() ; fstream fs ; fs.open("partsID.txt" , ios::out); if (!fs) { return ; } fs<<"点云数量为:"<<parts.size()<<"\n" ; for (int i = 0 ; i < parts.size() ; i++) { if (parts[i] != 0) { fs<<parts[i]<<"\n" ; } } boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D viewer")) ; viewer->setBackgroundColor(0 , 0 , 0) ; viewer->addPolygonMesh(mesh , "my") ; viewer->initCameraParameters() ; while (!viewer->wasStopped()) { viewer->spinOnce(100) ; boost::this_thread::sleep(boost::posix_time::microseconds(100000)) ; } return ;}
1 1
- 贪婪投影三角化算法对有向点云进行三角化
- 贪婪投影三角化算法中的参数设置
- 贪婪投影三角化法实现点云数据的网格化
- 基于PCL的三维重建—贪婪投影三角化算法实践与参数设置
- 一个三角化多边形的算法
- 球面三角化
- 任意多边形三角化
- Delaunay三角化
- 1. 空间三角化及三角化面片光滑
- 多边形三角化问题见闻
- VTK实现Delaunay三角化
- 计算几何——多边形三角化
- Opengl ES 线的三角化
- 关于多边形三角化,ue4 c++
- 从Delaunay三角化到网格质量
- 计算几何实践3:三角化
- 对角化矩阵
- 矩阵对角化1
- Dreamoon and Stairs
- JavaWeb应用中的身份验证(编程型)——实现servlet管理SSL
- 常用dos命令&Linux命令
- 检查网络状态—实时监测
- zzulioj--1634--Happy Thanksgiving Day - A + B Problem(模拟水题)
- 贪婪投影三角化算法对有向点云进行三角化
- hdu5606 bestcoder#68 div2tree【并查集】
- maven生成项目信息站点的信息种类
- What' s cheating
- 设计模式(12)-装饰模式
- 软工课程总结
- Doubango之Sip协议栈分析----阿冬专栏!!!
- 数据结构01--栈
- Android开发实用网址