内容介绍
贪婪投影三角化算法是一种对原始点云进行快速三角化的算法,该算法假设曲面光滑,点云密度变化均匀,不能在三角化的同时对曲面进行平滑和孔洞修复。
方法:
(1)将三维点通过法线投影到某一平面
(2)对投影得到的点云作平面内的三角化
(3)根据平面内三位点的拓扑连接关系获得一个三角网格曲面模型
在平面区域的三角化过程中用到了基于Delaunay的空间区域增长算法,该方法通过选取一个样本三角片作为初始曲面,不断扩张曲面边界,最后形成一张完整的三角网格曲面,最后根据投影点云的连接关系确定各原始三维点间的拓扑连接,所得的三角网格即为重建得到的曲面模型。
该算法适用于采样点云来自表面连续光滑的曲面且点云的密度变化比较均匀的情况。
/*
* GreedyProjection是根据点云进行三角化,而 poisson 则是对water-tight的模型进行重建,
* 所以形成了封闭mesh和很多冗余信息,需要对poisson的重建进行修剪才能得到相对正确的模型
*
*/
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/kdtree/kdtree_flann.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>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include<pcl/filters/voxel_grid.h>
#include <pcl/surface/mls.h>
int main(int argc, char** argv)
{
//读取文件
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud2(new pcl::PointCloud<pcl::PointXYZ>); //创建点云对象指针,用于存储输入
if (pcl::io::loadPCDFile("sparse_points.pcd",